【简介】
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求;
【优缺点】
优点:基于YAML/JSON格式,专注于接口本身的编写, 写法简单,可生成测试报告, 支持抓包录制, 支持python扩展、可做接口自动化, 方便搭建接口框架;
缺点:属领域特定语言,官方文档不直白详细,没有编辑器插件对语法校验,编写易出错;
【结论】
可以考虑用来做接口测试,但是语法校验需要单独处理。
httprunnerManage地址: https://github.com/HttpRunner/HttpRunnerManager
mockserver地址:https://github.com/yinquanwang/MockServer
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【使用教程】:
1、安装
pip install httprunner
注:我安装的是python3.6 httprunner 1.5.8
验证:hrun -V
2、运行命令
运行测试用例的命令为hrun
运行全部用例:hrun testcase
运行单个用例:hrun c:/xx/xx/xx/xx.json
运行多个用例:hrun c:/xx/xx/xx/xx.json c:/xx/xx/xx/xx.json
运行失败后停止执行:hrun testcase --failfast
重复运行某个case: 在test下添加times参数,对应的times值为需要重复运行的次数
跳过某个case运行:研用unittest框架中的skip(无条件跳过)、skipIf(条件为真的时候跳过)、skipUnless(条件为假的时候跳过),关键字加在test中
3、生成脚手架
hrun --startproject test_mysite
创建一个名为test_mysite的目录,目录下结构如图:
-------------------------------------------
说明:
api目录下为接口的详细信息
reports目录下为生成的报告
testcases目录下为测试用例
testsuites为测试套件
新建debugtalk.py文件用于编写函数辅助测试
--------------------------------------------
4、结构说明
5、参数关联
6、变量的声明和引用
【在config中定义的variables为全局变量,在test中定义的variables为局部变量,仅供当前test引用,test会继承config中的配置】
[全局变量]
8、实现动态逻辑运算
操作步骤:在测试用例文件的同级或父级创建一个【debugtalk.py】文件,然后再其中定义相关的函数和变量;
如:定义一个生成随机数的函数:
import random
import string
SECRET_KEY = "DebugTalk"
def get_random_string(str_len):
random_char_list = []
for _ in range(str_len):
random_char = random.choice(string.ascii_letters + string.digits)
random_char_list.append(random_char)
random_string = ''.join(random_char_list)
return random_string
调用:
"variables": [
{"device_sn": "${get_random_string(12)}"}
]
9、断言
【validate断言检查,eq是equals的缩写】
10、httprunner常用关键字列举
【config】
【test】
【request】
11、hook函数编写
【hook 函数的定义放置在项目的 debugtalk.py 中,在 YAML/JSON 中调用 hook 函数仍然是采用 ${func($a, $b)} 的形式。】
hook函数分为:setup_hooks和teardown_hooks
hook机制分为两个层级: testcase的config和test
config中的setup_hooks和teardown_hooks 类似于unittest中的setUpClass和tearDownClass
test中的setup_hooks和teardown_hooks 针对单个case生效
12、parameters参数化(httprunner版本为1.5.8,参数化支持在testcases中进行)
注:也可以使用.csv文件进行数据驱动。
一对一的参数化demo:
1 - config: 2 name: "接口测试test" 3 request: 4 base_url: http://xx.xx.xx 5 parameters: 6 - username-password-message-code: 7 - ["test1", "123456", "OK", 1] 8 - ["test2", "test", "用户名或密码错误", 2] 9 - ["test3", "123456", "OK", 1] 10 11 - test: 12 name: login case 13 request: 14 url: /login 15 method: POST 16 headers: 17 Content-Type: application/json 18 json: 19 username: $username 20 password: $password 21 22 validate: 23 - eq: [status_code, 200] 24 - eq: [json.code, $code] 25 - eq: [json.message, $message]