RobotFramework 测试框架使用分享
简介
是一个通用的开源自动化框架,用于验收测试,验收测试驱动开发(ATDD)和机器人过程自动化(RPA)。它具有易于使用的表格测试数据语法,并使用关键字驱动的测试方法。它的测试功能可以通过使用 Python 或 Java 实现的测试库进行扩展,用户可以使用与创建测试用例相同的语法从现有的关键字创建新的更高级别的关键字【关键字驱动】
- 15 Oct 2021 v4.1.2
- 08 Sep 2021 v4.1.1
- 19 Jul 2021 v4.1
- 25 May 2021 v4.0.3
- 11 May 2021 v4.0.2
- 09 Apr 2021 v4.0.1
- 11 Mar 2021 v4.0
- 02 Sep 2020 v3.2.2
- 30 Jul 2020 v3.2.1
.......
# 选择框架前:
那个框架好用?
那个框架流行?
那个框架更加适合自己当前团队?
框架生态圈如何?文档是否全面?遇到问题能否得到一些帮助?
框架是否灵活?支持自定义场景?
框架使用门槛是否有一定门槛?
# 回到起点,带着初衷(为了解决当前遇到的问题,以及往后的规划),而选择适合自己团队的最优的框架
# (所有框架底层都引用了基础单元测试件:unnitest/pytest/testNg/junit 如果一定要自造轮子,需考虑好轮子的设计/周期/通用性/稳定性等)
# 以下为本人当前使用RobotFramework 框架的现状,涉及到二次开发,先在这里粗略介绍一下
# 二次开发缘由:
1.让测试用例与版本迭代测试关联:通过创建测试计划->勾选需要覆盖的测试用例 方式进行关联
2.让自动化测试用例便于查阅/浏览,相对抽象化的脚本化,会更加直观
3.由传统的jenkins集成方式 迁移到平台。(方便多个项目统一管理/用例筛选/多环境配置文件切换等)
测试计划
用例管理
用例详情
好了,废话不多说,进入主题
# RobotFramework
# Httprunner
# Jmeter
框架 | 最新版本 | 开发语言 | 支持语言 | 持续集成 | 拓展难度 | 性能测试 | 数据分离 | 推广门槛 | 其它特性 |
---|---|---|---|---|---|---|---|---|---|
Robot Framework | 4.1.2 | python | python/java | 是 | 高 | 不支持 | 支持 | 低 | 自带 wx 的 GUI,可支持界面化或命令操作,可支持 web UI 自动化 seleniumLibrary |
HttpRunner | 3.1.6 | python | python | 是 | 中 | 支持 | 支持 | 高 | 脚本化、有完善易阅读报告输出 |
Jmeter | 5.4.1 | java | java | 是 | 高 | 支持 | 支持 | 低 | 更偏向于接口性能;做功能测试,用例维护管理难 |
因 python2.7 版本已停止更新,不在维护,大部分相关开源项目与库已不再对 python2.x 版本的支持,所以此处用 Python3.6 + Robot framework 3.2.2 搭建环境
起步:
- pip install -r requirements.txt
requirements.txt
requests
robotframework==3.2.2
Pypubsub==3.3.0
wxPython==4.0.3
robotframework-ride
robotframework-requests
- 标准库
- Builtin:包含经常需要的关键字。无需导入
- Dialogs:提供了暂停测试执行和从用户的输入方式。
- Collections:提供一组关键词处理 Python 列表和字典。
其它 OperatingSystem 、Remote、String、Telnet、......
扩展库
Android library:所有 android 自动化需要的测试库,内部使用的是 Calabash Android
iOS library:所有 iOS 自动化需要的测试库,内部使用 Calabash iOS 服务
appiumlibrary:Android 和 iOS 测试库,内部使用的是 appium
HTTP library (Requests):内部使用 request 工具的 HTTP 测试的库
selenium2library:使用 selenium2 的 Web 测试库
其它 ......
- Set Variable 创建字符串变量 (BuiltIn 库)
- Create Dictionary 创建字典变量 (BuiltIn 库)
- Create List 创建列表变量 (BuiltIn 库)
- Get Length 获取列表长度 (BuiltIn 库)
- Should Be Equal As Strings 断言 字符串 (BuiltIn 库)
- should match 匹配 (BuiltIn 库)
- Log 日志打印 (BuiltIn 库)
# 自定义库:命名规则:文件名称需与class名保持一致
# 自定义关键字: 符合pep8规范,关键字调用,可省略下划线 如: http_get -> case : http get
> simple: 自定义一个关键字: http get
import requests
def http_get(url, data):
"""
http get 获取指定url内容,并与 预期结果做对比
:param url:
:param data 预期结果
"""
response = requests.get(url=url)
if response.status_code == 200:
if response.text == data:
print('结果相同')
else:
raise Exception('结果不同,原始数据:%s 效验数据:%s' % (response.text, data))
else:
raise Exception('请求失败 code:%s 详情:%s' % (response.status_code, url))
# 用例编写方式有2种
1.框架自带GUI 编辑器编写 Ride (使用感受同 jemter)
2.编辑器编写 Pycharm/Idea (rf官方提供多种支持插件plugs: Robot Framework support/Run Robot Framework TestCase等)
# 建议使用 编辑器方式编写用例(更加快速便捷)
*** Settings ***
Library ../../rf/content_keyword.py # 自定义库
Library ../../rf/db_operate.py # 自定义库
Library ../../rf/source_keyword.py # 自定义库
# 用例集描述
Documentation xxx渠道-订单拆分逻辑检查
# 数据清理
Suite Setup CLEAR FILES # clear
*** Variables ***
*** Test Cases ***
# xx渠道 订单拆单逻辑检查
# 1.订单拆单-库存都满足场景
# 2.订单批号设置检查
# 3.订单拆单-入库写入检查
# 4.订单状态同步检查
# xxx
检查订单拆单-库存都满足
[Documentation] 检查订单拆单-库存都满足场景
#自定义变量 #关键字 #参数
${headers} Create Dictionary Content-Type=application/json
${params} Set Variable id=1
${data} Create Dictionary url=${url} params=${params} headers=${headers}
${rlt} HTTP GET data=${data}
${expect} Set Variable {"code":"0000", "data":{"count":6}} # 预期值 格式与接口响应格式一致,内容字段可少
validate rlt=${rlt} expect=${expect} # 返回结果与 预期接口 对比效验
log to console ${rlt}[data][data][0][suite_id]
${data1} Extract data=${rlt} key=data #单层数据结构提取
log to console ${data1}
${iteration} Json Path data=${rlt} path=$.data.data[0].iteration #指定提取:多层数据结构提取
# ride 操作
> ride.py存放路径: \Python36-32\Scripts\ride.py
> * 命令启动 python ride.py
> * .bat脚本启动 python ride.py
# ride 快捷键
> - **F5** 查看依赖库对应关键字
> - **Ctrl + Alt + space** 关键字补全,并展示对应关键字 使用说明
> - other.... (有兴趣可去了解下,以上快捷键在用例编写中,有一定的帮助)
- 使用自定义关键字
api 注册
case 编写
- Robot framework 插件安装
- 构建配置
Robot framework 插件安装
Robot framework 构建结果详情 1
Robot framework 构建结果详情 2