HttpRunner 框架
简介
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求 【引用作者简述】
相关链接
框架对比
框架 | 最新版本 | 开发语言 | 支持语言 | 持续集成 | 拓展难度 | 性能测试 | 数据分离 | 推广门槛 | 其它特性 |
---|---|---|---|---|---|---|---|---|---|
Robot Framework | 3.1.2 | python | python/java | 是 | 高 | 不支持 | 支持 | 低 | 自带wx的GUI,可支持界面化或命令操作,可支持web UI自动化seleniumLibrary |
HttpRunner | 2.0 | python | python | 是 | 中 | 支持 | 支持 | 高 | 脚本化、有完善易阅读报告输出 |
Jmeter | 5.1.1 | java | java | 是 | 高 | 支持 | 支持 | 低 | 更偏向于接口性能;做功能测试,用例维护管理难 |
HttpRunner 模块化架构
关于HttpRunner框架详情,在此不做过多介绍,本次内容主要以实战为主
HttpRunner 环境安装
因 python2.7版本已停止更新,不在维护,大部分相关开源项目与库已不再对 python2.x 版本的支持,所以此处用 Python3.6 + HttpRunner 1.5.15 搭建环境
起步:
- pip install -r requirements.txt
requirements.txt
HttpRunner == 1.5.15
Jinja2 == 2.10
PyMySQL == 0.9.3 # 非必需安装,因个人项目中涉及到数据库操作
SQLalchemy == 1.3.4 # 非必需安装,因个人项目中涉及到数据库ORM操作
HttpRunner环境搭建验证
- hrun -v 【使用CLI验证】
- pip list 【通过pip list查看】
CLI 命令 hrun用法
- hrun --startporject projectName 创建工程
- hrun testcase/demo.yml 运行case
- 其它详见 hrun -h
HttpRunner 常用关键字
- name:用例名称
- variables :定义变量
- extract :提取返回结果
- validate: 结果效验
- content 返回结果
- eq 效验
- setup_hooks() 钩子函数,类似于unnitest 的setUp() 执行用例前环境准备
- teardown_hooks() 钩子函数,类似于unnitest的teardown() 用例执行后环境初始化操作
实战
具体以 当前使用的项目为例
用HttpRunner 搭建接口自动化框架概况
工程结构
Api模板注册 Basic.yml
# 登陆 login
- api:
def: get_token($password, $sign, $timestamp, $userAccount)
request:
url: /test/login
method: POST
json:
password: $password
timestamp: $time_sign
userAccount: $userAccount
sign: $sign
# 用户信息获取
- api:
def: get_userInfo($sign, $timestamp, $token)
request:
url: /test/userInfo
method: POST
json:
sign: $sign
timestamp: $time_sign
token: $token
用例编写 test.yml
- config:
name: 验证用户信息获取接口
request:
base_url: $server
headers: $m_headers
variables:
userAccount: '15989556891'
password: ${get_pwd(123456)}
childIds: '11027897,11029010'
validate:
- eq: [status_code, 200]
- test:
name: 获取 token
api: get_token($password,$sign,$timestamp,$userAccount)
- test:
name: case 01 验证token错误时,返回是否正确
variables:
token: 'sfsd12'
api: get_userInfo($sign,$timestamp,$token)
extract:
- code: content.code
- msg: content.errorMsg
validate:
- eq: ['$code', '00600010006']
- eq: ['$msg', '无效的token']
- test:
name: case 02 验证token过期,返回是否正确
variables:
token: 616383b06cbf8ce4d392ff4523670058000050900
api: get_userInfo($sign,$timestamp,$token)
extract:
- code: content.code
- msg: content.errorMsg
validate:
- eq: ['$code', '00200010006']
- eq: ['$msg', 'token已过有效期']
- test:
name: case 03 token有效,正常获取用户信息,返回是否正确
api: get_userInfo($sign,$timestamp,$token)
extract:
- code: content.code
- data: content.data
validate:
- eq: ['$code', '000']
- eq: ['$data', '返回数据内容']