Robot Framework自定义测试库的作用域的理解

  robot framework中,强大的测试库api支持,用户可根据实际需求定义测试库,导入后可使用自定义库中相应的关键字。

  当自定义的测试库是类库,则需要考虑一个问题:类实例。用类实现的库可以有内部状态, 这些状态可以被关键字或构造函数修改. 因为这些状态会影响到关键字实际的行为, 所以, 保证一个测试用例不会意外地影响到另一个用例显得非常重要. 这种依赖行为有可能造成非常难定位的bug。例如, 添加了新的测试用例, 而这些用例使用库的方式并不一致。

  Robot Framework 为了保证测试用例之间的独立性, 默认情况下, 它为每个测试用例创建新的测试库实例. 然而, 这种方式不总是我们想要的, 比如有时测试用例需要共享某个状态的时候. 此外, 那些无状态的库显然也不需要每次都创建新实例。实例化测试库类的方式可以通过属性ROBOT_LIBRARY_SCOPE定义的三个作用域来控制

  1.TEST CASE:为每个测试用例创建测试库实例,用例间相互独立,此为默认情况;

  创建测试库类:GTest.py

 1 class GTest(object):
 2
 3     ROBOT_LIBRARY_SCOPE = "TEST CASE"
 4     counter = 0
 5
 6     def __init__(self):
 7         GTest.counter += 1
 8
 9     def count(self):
10         return self.counter, id(self)

  创建测试套件login.robot:

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py
 4
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}

从用例的执行结果来看,每个使用GTest库的测试用例运行时,counter值加1,且实例id各不相同,所以SCOPE为"TEST CASE"的测试库会为每个测试用例创建实例,这种配置更适用于严格控制用例间相互影响的场景;

  2.TEST SUITE:为每个测试套件创建测试库实例,该测试套件内的所有用例共享这个库实例

  修改测试库类GTest.py, 将ROBOT_LIBRARY_SCOPE值替换为"TEST SUITE"

 1 class GTest(object):
 2
 3     ROBOT_LIBRARY_SCOPE = "TEST SUITE"
 4     counter = 0
 5
 6     def __init__(self):
 7         GTest.counter += 1
 8
 9     def count(self):
10         return self.counter, id(self)

  新增测试套件login2.robot

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py
 4
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}

  运行测试套件login.robot和login2.robot

从以上测试结果来看,图1中,同一测试套件内所有测试用例获取到的GTest实例相同;图2中,不同测试套件获取到的GTest实例不同,因此SCOPE设置为"TEST SUITE"时,会为每个测试套件创建一个测试库实例;

  3.GLOBAL:整个测试过程中只创建一个测试库实例,所有测试套件、测试用例共享同一个测试库实例

  修改测试库GTest.py,将ROBOT_LIBRARY_SCOPE修改为"GLOBAL"

 1 class GTest(object):
 2
 3     ROBOT_LIBRARY_SCOPE = "GLOBAL"
 4     counter = 0
 5
 6     def __init__(self):
 7         GTest.counter += 1
 8
 9     def count(self):
10         return self.counter, id(self)

  运行测试套件login.robot和login2.robot

从用例运行结果来看,测试套件login.robot和login2.robot所用GTest的同一个实例,且只有一个。因此SCOPE设置为"GLOBAL"后,整个测试过程中只生成一个测试库实例。所有套件、测试用例共享这个测试库实例;

  robot官网中说明,如果同一个测试库被多次以不同参数导入,则不管ROBOT_LIBRARY_SCOPE是否定义,每个测试套件会创建一个新的实例

  创建测试库GTest.py,  ROBOT_LIBRARY_SCOPE定义为"GLOBAL"

 1 class GTest(object):
 2
 3     ROBOT_LIBRARY_SCOPE = "GLOBAL"
 4     counter = 0
 5
 6     def __init__(self, *args):
 7         self.args = args
 8         GTest.counter += 1
 9
10     def count(self):
11         return self.counter, id(self)

  创建测试套件login.robot

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py      suite1      login1
 4
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}

  创建测试套件login2.robot

 1 *** Settings ***
 2 Documentation     Suite description
 3 Library           GTest.py      login2      suite2
 4
 5 *** Test Cases ***
 6 Test title
 7     [Tags]    DEBUG
 8     @{res}   count
 9     log many    @{res}
10
11 Test title2
12     [Tags]      DEBUG
13     @{res}   count
14     log many    @{res}

从测试用例运行结果来看,虽然将作用域定义成了全局的,但是由于在不同测试套件中以不同参数导入,所以用例执行过程中为不同的测试套件生成了不同的实例。

原文地址:https://www.cnblogs.com/blackeyes1023/p/11613463.html

时间: 2024-09-29 15:35:13

Robot Framework自定义测试库的作用域的理解的相关文章

如何自定义测试库(转载)

在网上下载的各种测试库,往往因为各种原因总是不那么完美,现在来学习一下怎么自定义一个RFS库吧! Step 1. 给自定义库起名,如MyLibrary.操作:在Python目录下"..\Lib\site-packages" 建立文件夹"MyLibrary". Step 2. 在"MyLibrary"文件夹中新建一个"version.py"文件,用于描述自定义测试库的版本信息. 代码如下: VERSION = '1.0' 在&q

(三)Robot Framework 创建测试、运行与生成报告

(三)Robot Framework 创建测试.运行与生成报告 发布时间 2017年9月28日 虫师 上一节我们已经介绍 Robot Framework-RIDE 只支持 Python2 ,但 Python2 到 2020 年将不再维护,所以接下来的关于 Robot Framework 的学习将不再基于 Robot Framework-RIDE,你可以参考上一节中介绍的 Sublime Text3 + sublime-robot-framework-assistant 插件来编写 Robot F

使用远程接口库进一步扩展Robot Framework的测试能力

引言: Robot Framework的四层结构已经极大的提高了它的扩展性.我们可以使用它丰富的扩展库来完成大部分测试工作.可是碰到下面两种情况,仅靠四层结构就不好使了: 1.有些复杂的测试可能跨越多个物理机器,且有的测试库也必须部署在被测系统上. 2.一个测试要使用多个库,但是有的只能用jybot运行,有的只能用pybot运行(这种情况很常见). 远程库接口的原理: 为了解决上述两个难题,Robot Framework提供了远程库接口技术(remote library interface).

Robot Framework: 自定义自己的python库

利用Robot Framework编写测试用例,往往需要开发自己的关键字,有的关键字需要通过自己编写python代码来实现.这在rf中,就需要自己定义python库.这个过程其实不复杂,本文来介绍下. 1.在python安装目录下的 Lib\site-packages 目录下 新建一个目录,目录名就是库名,如 NewLibrary 2.在新建的NewLibrary目录下创建一个python文件,任何合法的文件名即可,扩展名为py.如:myclass.py 其内容如下 class MyClass(

Robot Framework(Databaselibrary库操作)

1.安装 DatabaseLibrary 库 DatabaseLibrary 下载地址:https://pypi.python.org/pypi/robotframework-databaselibrary/0.6在线文档:http://franz-see.github.io/Robotframework-Database-Library/如果像安装普通的 Python 程序,可以下载 tar.gz 文件,解压并运行 setup.py 文件进行安装. 因为在上一小节中我们已经安装了 pip,所以

Robot Framework自动化测试Selenium2Library库详细用法

一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internetexplorer Internet Explorer ie googlechrome Google Chrome gc chrome opera Opera phantomjs PhantomJS htmlunit HTMLUnit htmlunitwithjs HTMLUnit with Javas

Robot Framework web测试demo

1.Open RIDE: ride.py 2.New Project: "File" -> "New Project" ,click "OK".     Name:Robot_Demo     Type:Directory ps:The difference between File and Directory is: We can write test case in File ,but Directory not. Robot Fram

【Robot Framework】BuiltIn库

作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的逻辑,那就需要对BuiltIn中的重要关键字有一些了解.BuiltIn库中还封装了很多常见方法和能够控制RF运行状态的关键字,如果想用好RF,一定要对BuiltIn库中的函数有一个比较全面的理解.下面就带着大家认识一下BuiltIn库中比较重要的关键字. Evaluate 关键字: Argument

Robot Framework自定义关键字

需求分析: 如下图,诸多步骤中可能共用某些共同的步骤,比如都需要登录会员 此,可以把登录的操作写成模块化,插入其他脚本供其他脚本调用,如此可以节省不少脚本量 上图为会员登录的操作. 具体实施如下: 1.右键autoTest,点击New Directory. 2.弹出框输入Name 3.保存后目录下生成下图模块 4.选中上图目录,右键,点击New User Keyword 5.弹出框输入模块名称 6.保存后,在右边的部分输入登录脚本 7.保存后,在脚本的存储目录会生成一个文件,此文件名称与模块名称