Robotframework之ROBOT_LIBRARY_SCOPE = 'GLOBAL'分析
转自:http://blog.sina.com.cn/s/blog_71bc9d680102xbew.html
标签: robotframework | 分类: 自动化测试 |
使用RobotFramework自定义库,首先学习的都是在%python%\Lib\site-packages\下新建一个文件夹,然后创建一个python文件名为__init__.py,然后再创建一个文件,里面是自定义方法,这个可以参考另一篇博文《
RobotFramework自定义关键字
》。当然这篇博文不是说自定义库关键字怎么写,而是说一个我想理解的东西,就是__init__.py中一段代码:ROBOT_LIBRARY_SCOPE = 'GLOBAL',我一直不知道这句话是干嘛的,所以带着想弄懂它,所以就研究了下。主要说说我的思路吧。
1.百度、Google搜索了ROBOT_LIBRARY_SCOPE = 'GLOBAL',这句话,最后找到了一些描述,通过翻译(我英文很烂)大概知道了什么意思,
(1)ROBOT_LIBRARY_SCOPE为ROBOT库范围,这个范围有三个等级,分别是TEST CASE、TEST SUITE、GLOBAL三个等级,默认是TEST CASE;而刚开始学习自定义库,所看到的基本都是GLOBAL这个等级。
(2)在测试库中申明等级的作用是,在调用这个类的方法,就会实例化这个类
--TEST CASE:在每个test case中引用都会实例化一次
--TEST SUITE:在suite中引用,只会实例化一次,也就是说10个test case都引用了这个类的方法,但是只有第一个test case是调用的时候实例化,后续的共用
--GLOBAL:在全局只实例化一次,调用一次后,在所有suite中引用、test case中引用都不会再实例化
(3)有人会说,那我直接用GLOBAL就行了啦,何必知道其他的?对,从只要能运行的角度上来看是没错的,但是如果只在一个test case中用到自定义类方法,这时候用GLOBAL是不是有点浪费啊;或者说多人共同开发的时候,你在运行的时候,自定义类被改了,你使用GLOBAL,之后的test case都不会再实例化,这就会造成你的test case都以旧方法跑,当然这情况出现的比较少。说了一堆废话,还是建议用GLOBAL,哈哈。
2.既然知道了概念,那如何知道是不是这样呢?我先在自定义类中加个日志打印
看到我就写了个加法方法,等下会在脚本中用。有些人会问为什么加在__init__方法中,因为每次调用这个类,首先会先执行这个__init__方法(与,而如果日志放在方法里,那肯定是每次调用这个方法才会打印日志啦。
3.测试思路:
(1)TEST CASE等级:创建2个suite,A_suite中两个测试用例,B_suite一个测试用例,预期结果是,打印三次日志
实际结果:打印了4次,3次是在test case中打印,一次在全局打印
(2)TEST SUITE等级:创建2个suite,A_suite中两个测试用例,B_suite一个测试用例,预期结果是,打印两次日志
实际结果:打印了3次,2次是在test suite中打印,一次在全局打印
(3)GLOBAL等级:创建2个suite,A_suite中两个测试用例,B_suite一个测试用例,预期结果是,打印一次日志
实际结果:打印了1次,一次在全局打印
结论:很明显,不管用什么等级,都会全局调用一次,这与我刚开始理解的好像有点出入,所以再次去翻译,发现是说在TEST CASE或TEST SUITE中新创建一个实例,所以再次强烈建议用GLOBAL。