首页 > 其他分享 >robotframework自动化测试框架实战教程:创建及使用测试库

robotframework自动化测试框架实战教程:创建及使用测试库

时间:2022-10-21 01:45:44浏览次数:63  
标签:info 教程 Library Functest 实例 robotframework 测试 PASS

创建测试库

测试库的实现可以是Python模块, 也可以是Python类.

Python模块

 

 

 Python类

 

测试库通常在 Setting 表格中设置 Library 来导入, 库名称跟在 Library 后面. 不同于大部分的其它数据, 库名称既是大小写敏感的, 也是空白敏感的. 如果一个测试库是在某个文件里的, 则必须指明路径.

 

 

 测试结果

==============================================================================
Functest                                                                      
==============================================================================
测试库用例                                                            
我的方法

我的类
| PASS |
------------------------------------------------------------------------------
Functest                                                              | PASS |
1 test, 1 passed, 0 failed
==============================================================================

一些重要的概念:

  • 实现为类的测试库都可以接受参数. 这些参数在Setting表中指定, 跟在库名后面, 当Robot Framework创建测试库的实例时, 把这些参数传给构造函数.意思就是MyModule=MyModule(__init__方法的参数),之后使用MyModule.method。
    •   有个常用场景是通过数据库获取数据,就可以创建测试库完成。
      开始连接
      ==============================================================================
      Functest                                                                      
      ==============================================================================
      DBtest                                                                开始连接
      开始查询
      查询完成,数据为{'id': 1, 'username': 'admin', 'password': 'pbkdf2:sha256:260000$l0K5upqR$87143093593e3622bc700f3c57e91180ad05ccb51169b36617cfe3ac6207c9a2', 'nickname': '管理员', 'email': '[email protected]', 'isadmin': 0, 'group_id': 1, 'create_time': datetime.datetime(2022, 10, 15, 20, 19, 4), 'update_time': datetime.datetime(2022, 10, 15, 20, 19, 4), 'delete_time': None, 'update_user_id': None, 'create_user_id': None, 'update_user_name': None, 'create_user_name': None}
      | PASS |
      ------------------------------------------------------------------------------
      Functest                                                              | PASS |
      1 test, 1 passed, 0 failed
      ==============================================================================

 

  • 传递给库的参数, 包括库名本身, 都可以使用变量. 也就是说可以在某些时候, 例如命令行(--variable), 修改它们.
  • Robot Framework 为了保证测试用例之间的独立性, 默认情况下, 它为每个测试用例 创建新的测试库实例. 然而, 这种方式不总是我们想要的, 比如有时测试用例需要共享 某个状态的时候. 此外, 那些无状态的库显然也不需要每次都创建新实例.
    •   TEST CASE 为每个测试用例创建新的实例. 如果有suite setup和suite teardown的话, 同样 也会新建. 这是默认行为.
    • TEST SUITE为每个测试集创建新的实例. 最底层的测试集, 也就是由测试用例文件组成的测试集, 拥有属于自己的测试库实例, 高层的测试集, 都有属于自己的测试库实例.
    • GLOBAL整个测试执行过程中只有一个实例被创建. 所有的测试集和测试用例共享这个实例. 通过模块创建的测试库都是全局的.
      from robot.api import logger
      
      class MyModule:
      
          ROBOT_LIBRARY_SCOPE = 'GLOBAL'
      
          def __init__(self):
              self._counter = 0
      
          def count(self):
              self._counter += 1
              logger.console(self._counter)
      
          def clear_counter(self):
              self._counter = 0
  • 名称的比较是忽略大小写的, 并且其中的空格和下划线 也都忽略掉
  • 异常的回溯(traceback)信息在 日志级别 为 DEBUG 时也会被写入日志
  • 有时候出现异常意味着要 结束整个测试. 要实现这种效果, 为抛出的异常类设置一个特殊的 ROBOT_EXIT_ON_FAILURE 属性 , 并将其值设为 True
  • 有时候, 即使出现了错误仍然希望测试 继续执行. 这时要为异常类设置特殊属性 ROBOT_CONTINUE_ON_FAILURE, 并将值设为 True.
  • 其中一个最有用的方法是 replace_variables, 它允许访问当前可用的变量.
    •   比如我们不知道rfw的哈希方法,可以自己写一个 
      import hashlib
      from robot.libraries.BuiltIn import BuiltIn
      
      class MyModule:
          def getcode(self,password):
              code = hashlib.md5(BuiltIn().replace_variables("${password}").encode())
              print(code.hexdigest())
      *** Test Cases ***
      case1
          Set Global Variable    ${password}        111111
          Getcode     ${password}
      ==============================================================================
      Functest                                                                      
      ==============================================================================
      case1                                                                 | PASS |
      ------------------------------------------------------------------------------
      [info] ${password} = 111111
      [info] 96e79218965eb72c92a549dd5a330112
      Functest                                                              | PASS |
      1 test, 1 passed, 0 failed
      ==============================================================================
  • 一个直接的方式是使用继承来扩展已有库,一个大问题是, 这两个库将很难同时使用. 首先这两个库的同名关键字会产生 冲突, 另外, 这两个库没有共享状态.
    •   比如rfw使用requests不打印请求响应信息,可以重写session类来打印
      ==============================================================================
      Functest                                                                      
      ==============================================================================
      [info] ${data} = {'username': 'admin', 'password': '111111'}
      case1                                                                 b'{"username": "admin", "password": "111111"}'
      {'name': 'admin', 'nickname': '管理员', 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTY2NjI4MzI3NCwianRpIjoiMTY0ZmEzYjAtNDI1ZC00YzE1LWEyM2ItOThiMGIzZWY4NDY0IiwidHlwZSI6ImFjY2VzcyIsInN1YiI6MSwibmJmIjoxNjY2MjgzMjc0LCJleHAiOjE2NjYzMDEyNzR9.ndUAu0VmcBKLvS9AGmxb-nufVumA4hR-9qeegKxJ4GI', 'uuid': 1}
      | PASS |
      ------------------------------------------------------------------------------
      Functest                                                              | PASS |
      1 test, 1 passed, 0 failed
      ==============================================================================
  • 内置关键字 Get Library Instance 可以用来获取当前活动的测试库的实例. 该关键字返回的实例与框架自己使用的实例完全一样
    •   比如获取正在运行的Selenium实例获取页面元素
      *** Settings ***
      Library     BuiltIn
      Library    SeleniumLibrary
      Library     util/SeLibExtensions.py
      Suite Teardown      Close All Browsers
      
      *** Variables ***
      ${host}         http://www.baidu.com
      
      *** Test Cases ***
      case1
          Open Browser      ${host}      chrome
          SeLibExtensions.Title Should Be    谷歌
      ==============================================================================
      Functest                                                                      
      ==============================================================================
      [info] Opening browser 'chrome' to base url 'http://www.baidu.com'.
      [info (+2.43s)] 获取的抬头:百度一下,你就知道
      [FAIL] Title '百度一下,你就知道' is not  '谷歌'
      case1                                                                 | FAIL |
      Title '百度一下,你就知道' is not  '谷歌'
      ------------------------------------------------------------------------------
      Functest                                                              | FAIL |
      1 test, 0 passed, 1 failed
      ==============================================================================
  • 导入测试库的另一种方式是使用 BuiltIn 库提供的关键字 Import Library. 该关键字接受库名称以及可能的参数作为它的参数. 被导入的库中的关键字在调用 Import Library 关键字的测试套件中可用。

    •   重写上面的功能,初始化就获取对象,复用对象方法,可以用Import Library在实例生成后导入多个实例,使用 WITH NAME (此处区分大小写) 命名,调用特定实例的方法
      *** Settings ***
      Library     BuiltIn
      Library    SeleniumLibrary
      Suite Teardown      Close All Browsers
      
      *** Variables ***
      ${host}         http://www.baidu.com
      
      *** Test Cases ***
      case1
          Open Browser      ${host}      chrome       b1
          ${seleniumlib}      Get Browser Aliases
          Import Library      util/SeLibExtensions.py     SeleniumLibrary     WITH NAME       mydriver
          mydriver.get_session_id
          Open Browser      ${host}      chrome       b2
          Switch Browser    b2
          ${seleniumlib}      Get Browser Aliases
          Import Library      util/SeLibExtensions.py     SeleniumLibrary     WITH NAME       mydriver2
          mydriver2.get_session_id
      ==============================================================================
      Functest                                                                      
      ==============================================================================
      [info] Opening browser 'chrome' to base url 'http://www.baidu.com'.
      [info (+4.34s)] ${seleniumlib} = {'b1': 1}
      case1                                                                 dd7cf760150bbb2a910e1a355414eda5
      [info (+0.01s)] Opening browser 'chrome' to base url 'http://www.baidu.com'.
      [info (+9.59s)] ${seleniumlib} = {'b1': 1, 'b2': 2}
      ee414a1679bb6013acdcdbc6edefeb82
      | PASS |
      ------------------------------------------------------------------------------
      Functest                                                              | PASS |
      1 test, 1 passed, 0 failed
      ==============================================================================

       

以上是robotframework自动化测试框架创建及使用测试库的主要实践,可以完善和增强robotframework基本功能。先到这里。

 

标签:info,教程,Library,Functest,实例,robotframework,测试,PASS
From: https://www.cnblogs.com/zerotest/p/16812157.html

相关文章

  • Kali安装教程
    目录一、下载镜像或者压缩包二、安装iso镜像1、创建虚拟机2、首次启动Kali虚拟机三、直接下载7Z文件解压使用四、配置静态IP五、配置DNS服务六、切换成中文语言七、参考文......
  • Linux Crontab命令定时任务基本语法与操作教程
    一、Crontab查看编辑重启  1、查看crontab定时执行任务列表  crontab-l  2、编辑crontab定时执行任务  crontab-e  3、删除crontab......
  • 测试开发jmeter设置线程序号
    测试开发jmeter设置线程序号${__threadNum}需要在请求的名称后面加上${__threadNum}    然后运行结果如下: ......
  • 软工大数据期中测试
    Result文件数据说明:Ip:106.39.41.166,(城市)Date:10/Nov/2016:00:01:02+0800,(日期)Day:10,(天数)Traffic:54,(流量)Type:video,(类型:视频video或文章article)Id:8701(视频或......
  • .NET Core C#系列之XiaoFeng.Redis组件库础操作篇教程
    XiaoFeng.Redis组件库拥有丰富的API和巅峰之作的性能,下面我就先以基础的操作做如下讲解,循序渐进,慢慢提升。欢迎关注xiaofeng组件库,开源不易,多多支持。开源地址:https://git......
  • 聊聊测试工程师的核心竞争力
    核心竞争力实际上就是个人价值诉求的一种表达。我划分了四个较为通用的维度,从这几个维度出发,聊聊不同阶段我的一些看法和建议。思维导图 时间维度1、小白入门在这......
  • 5G 增强型“智能垃圾箱”测试
    英国桑德兰市正在试行多项5G增强型智慧城市技术,包括“智能垃圾箱”。试验期间,在全市范围内安装了许多智能垃圾箱。智能垃圾箱是该市议会与BAICommunications(BAI)合......
  • .NET Core Onvif协议C#教程系列之XiaoFeng.Onvif组件库
        物联网IOT大背景下音视频领域的Onvif协议在2008年成为全球性的开放接口标准。   于是一批开发者涌入该技术领域使用各种编程语言对其改造升级封装。 ......
  • Google Analytics 测试
    集成谷歌分析之后官方提供了测试工具——DebugView可以通过这个工具验证sdk集成的是否正确官方文档:https://firebase.google.com/docs/analytics/debugview测试步骤:......
  • StartAllBack使用教程
    StartAllBack简介StartAllBack是一款Win11开始菜单增强工具,为Windows11恢复经典样式的Windows7主题风格开始菜单和任务栏,功能包括:自定义开始菜单样式和操作,个性化任务栏......