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

源码位置

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

一般来说,我们都是用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']

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容