其他测试框架 使用测试框架-RobotFramework 的那些事

Hank · 2021年12月02日 · 最后由 会飞的野马 回复于 2021年12月07日 · 3723 次阅读

RobotFramework 测试框架使用分享

简介

是一个通用的开源自动化框架,用于验收测试,验收测试驱动开发(ATDD)和机器人过程自动化(RPA)。它具有易于使用的表格测试数据语法,并使用关键字驱动的测试方法。它的测试功能可以通过使用 Python 或 Java 实现的测试库进行扩展,用户可以使用与创建测试用例相同的语法从现有的关键字创建新的更高级别的关键字【关键字驱动】

更新 Log
- 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集成方式 迁移到平台。(方便多个项目统一管理/用例筛选/多环境配置文件切换等)
  • 测试计划

  • 用例管理

  • 用例详情


好了废话不多说进入主题

框架对比-Github(生态圈/框架流行度/框架更新频率等)
# 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 支持 支持 更偏向于接口性能;做功能测试,用例维护管理难

Robot Framework - 模块化架构

Robot Framework - 源码结构


Robot framework 环境安装

因 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

Robot framework 常用库

  • 标准库
  • 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 测试库

  • 其它 ......

Robot framework 常用关键字

  • Set Variable 创建字符串变量 (BuiltIn 库)
  • Create Dictionary 创建字典变量 (BuiltIn 库)
  • Create List 创建列表变量 (BuiltIn 库)
  • Get Length 获取列表长度 (BuiltIn 库)
  • Should Be Equal As Strings 断言 字符串 (BuiltIn 库)
  • should match 匹配 (BuiltIn 库)
  • Log 日志打印 (BuiltIn 库)

常用库文档


Robot framework 自定义关键字

# 自定义库:命名规则:文件名称需与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 GUI
# ride 操作

> ride.py存放路径  \Python36-32\Scripts\ride.py
> * 命令启动 python ride.py
> * .bat脚本启动 python ride.py

# ride 快捷键
> - **F5** 查看依赖库对应关键字
> - **Ctrl + Alt + space** 关键字补全并展示对应关键字 使用说明
> - other.... (有兴趣可去了解下,以上快捷键在用例编写中有一定的帮助)

  • 使用自定义关键字
HttpRunner 用例编写 yml 格式

api 注册

case 编写

Robot framework -> Report html
Log html

jenkins 集成 Robot framework

  • Robot framework 插件安装
  • 构建配置

Robot framework 插件安装

Robot framework 构建结果详情 1

Robot framework 构建结果详情 2


共收到 7 条回复 时间 点赞

你好,请教 RF+Jenkins 的问题。Jenkins job 执行 fail,提示信息是 “robot command not found”(而实际上登录 Jenkins 所在服务器,直接跑 shell 是正常)。百度后大部分的说法是 Jenkins 执行的 shell 是未登录而导致,解法是在 shell 开头添加"#!/bin/bash -il",但重跑后仍是该报错。请问是否有遇到类似坑?

楼主,二次开发的这个平台可以开源吗?最近也在准备搞 rf 的平台,但是一直没啥进展,希望可以学习下你的

Hank #3 · 2021年12月06日 Author
jimmy 回复

可以做以下检查进行问题确认:
1.检查 jenkins 所在服务器环境是否已安装 python3 环境 +robotframework(如果已安装,可直接在 jenkins 所在服务器的 workspac 下 找到对应工程的文件,直接使用 robot 命令执行,看是否 ok)
2.如果以上都没问题,可在 jenkins shell 中添加 环境重载,然后再添加对应的 robot 命令操作
#!/bin/bash
export PYTHON3_HOME=/usr/local/python3
export PATH=$PYTHON3_HOME/bin:$PATH
robot xxx......

Hank #4 · 2021年12月06日 Author

暂时还没开源,后续再看看是否需要做开源规划吧。这次 也主要是看看,目前使用 robotframework 这个框架的小伙伴们多不多,同时也想一起交流学习😀

帖里的测试框架对比蛮奇怪的,RF 是和 unittest,pytest 一个维度的框架, jmeter 和 httprunnner 是一个维度的框架,帖子里这么混着比确实怪怪的。

Hank #6 · 2021年12月06日 Author
天艮 回复

关于这个纬度,你可以再去了解了解...unittest/pytest、rf、httprunner、jmster 分别做那块的内容

Hank 回复

好的吧 如果可以的话 想先单独找你要份代码研究下可以吗?确实自己一直进展太慢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册