美文网首页软件测试
Robot Framework源码阅读01——从案例执行说起

Robot Framework源码阅读01——从案例执行说起

作者: JingleGo | 来源:发表于2020-04-19 12:33 被阅读0次

    源码位置

    阅读源码的第一步是什么?首先需要知道源码在哪里。

    一般来说,我们都是用pip将robotframework库安装到Python库目录中。安装Robot Framework后,源码就已经在Python库目录中,我们要做的就是找到它。

    不知道Python目录的可以用sys.path辅助查看

    import sys
    print(sys.path)
    

    在Python目录中,找到site-packages文件夹,site-packages\robot目录存放的就是Robot Framework的源码。

    案例执行方式

    源码已经找到里,那我们接下来回顾下我们的案例是怎么执行的。

    External Tools

    在Pycharm中执行RF案例为例,常用方式是在Preferences-Tools-External Tools里设置:

    • robot by case name(名字随便取),根据选中的案例名称执行
      • Program: PyInterpreterDirectory/python
      • Arguments: -m robot -L DEBUG -d output -t "SelectedText" "FileDir/FileName"
      • Working directory: ProjectFileDir

    设置好以后,这个robot by case name可在Pycharm里单击右键-External Tools中找到。

    假设在rf-reader/01/01_beginning.robot文件中有一条简单的案例:

    *** Test Cases ***
    计算一加一等于二
        ${和}    evaluate    ${1}+${1}
        should be equal    ${和}    ${2}
    

    我们就可以通过鼠标将案例名称“计算一加一等于二”选中,再单击右键,选择robot by case name,这样就执行成功里。

    python -m

    那这个是怎么生效的呢?其实就是通过命令行的方式执行。在上面的例子种,点击完robot by case name后可以在控制台里看到真正执行的命令是:

    python -m robot -L DEBUG -d output -t 计算一加一等于二 /Users/Tester/rf-reader/01/01_beginning.robot
    

    注意,Python2里的pybot,在Python3里已经没有了,之前在Python安装目录里的Scripts可以找到,现在只能找到robot.exe。不过二者差别不大,不影响我们分析RF是怎么执行案例的。

    既然之前执行案例是用的pybot,那看下pybot.bat文件的内容:

    @echo off
    python -m robot.run %*
    

    这里有个知识点:

    • python package2/run.py,是直接运行,是把py文件所在目录加入path。假如run.py中要import一个跟package2平行的package1下的模块module1,用这种方式会报错。
    • python -m package2.run,是相当于导入了模块,用模块的方式来运行,而且会把输入执行命令的目录加入path中。假如run.py中也是要import一个跟package2平行的package1下的模块module1,用这种方式可以正常导入,因为我们输入执行命令的目录是package1和package2所在的那一层,被加入了path。

    回到pybot.bat文件的内容,其实就可以很容易的知道,执行案例的秘密就在robot.run这个模块里。

    入口程序

    run_cli

    刚才已经找到用命令行执行案例的入口就在robot.run,看一下代码:

    if __name__ == '__main__':
        run_cli(sys.argv[1:])
    

    调用的是run_cli这个函数,并且把命令行中的参数都传进去。

    run_cli函数的内容令人难以置信的简单,就是在函数中,把命令行里的参数列表传给RobotFramework().execute_cli

    def run_cli(arguments, exit=True):
        return RobotFramework().execute_cli(arguments, exit=exit)
    

    所以RobotFramework类才是RF处理的灵魂所在,run_cli函数只是提供命令行执行案例的入口。

    sys.argv

    再回过头来看看sys.argv[1:]具体是以什么形式传的参数,如果不熟悉sys.argv用法的可以打印出来感受下,比如新建个rf-reader/01/sysargv.py代码文件:

    import sys
    print(sys.argv)
    

    rf-reader目录下执行

    python -m 01.sysargv  -L DEBUG -d output -t testcasename
    

    可以看到结果是

    ['/Users/Tester/rf-reader/01/sysargv.py', '-L', 'DEBUG', '-d', 'output', '-t', 'testcasename']
    

    sys.argv[0]是执行的程序名

    sys.argv[1:]是跟在程序名后的所有用空格间隔开的参数,比如-L DEBUG,在列表中就是['-L', 'DEBUG']

    相关文章

      网友评论

        本文标题:Robot Framework源码阅读01——从案例执行说起

        本文链接:https://www.haomeiwen.com/subject/nxbubhtx.html