接口自动化框架HttpRunner详细教程

1.httprunner介绍
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。

中文用户手册:
https://cn.httprunner.org/
开发设计文档:
https://debugtalk.com/tags/HttpRunner/

2.核心特性
继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
测试用例与代码分离,采用YAML/JSON的形式描述测试场景,保障测试用例具备可维护性
测试用例支持分层机制,充分实现测试用例的复用
测试用例支持参数化和数据驱动机制
使用 skip 机制实现对测试用例的分组执行控制
支持热加载机制,在文本测试用例中轻松实现复杂的动态计算逻辑
基于 HAR 实现接口录制和用例生成功能(har2case)
结合 Locust 框架,无需额外的工作即可实现分布式性能测试
执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
具有可扩展性,便于扩展实现 Web 平台化(HttpRunnerManager)
3.框架流程
在这里插入图片描述

4.环境配置
HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS、Linux、Windows 系统平台上。
Python 版本:HttpRunner 支持 Python 3.4 及以上的所有版本,并使用 Travis-CI 进行了持续集成测试,测试覆盖的版本包括 2.7/3.4/3.5/3.6/3.7。虽然 HttpRunner 暂时保留了对 Python 2.7 的兼容支持,但强烈建议使用 Python 3.4 及以上版本。

HttpRunner 的稳定版本托管在 PyPI 上,可以使用 pip 进行安装。

控制台上使用
pip install httprunner

建议使用PyCharm进行安装:
File—>Settings—>Project Interpreter—>+ 搜索httprunner选择安装。
坑:安装httprunner固定版本2.3.2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

安装成功后,找到hrun.exe所在的目录,添加到环境变量path中

cmd验证
hrun -V

5.HttpRuuner json用例基本格式

注意 httprunner中所有的键 都是固定
在这里插入图片描述

config 作为整个测试用例集的全局配置项
base_url 主机路径
name 所属模块名称
variables 环境变量(参数化)…根据需要的话,添加这个variables
teststeps测试步骤(指的是每一条接口测试用例)
{}表示一条测试用例
每一条测试用例包含:
name:接口名称
request:表示一个接口请求对象
method:请求方式
url:请求路径
params:get方式的请求参数
data:post方式的请求参数
json:表示上传json格式数据
headers:请求头
validate:预期结果,预期结果可以有多个 —列表
{}表示一条预期结果
eq=equals 预期结果和实际结果是否一致
contains 实际结果是否包含预期结果

content用于表示返回的实体内容 ----> 类似于postman里面用json表示返回实体内容对象

6.指令生成项目基本结构(脚手架)
6.1、Win+R打开终端,cd进入创建项目的目录下输入

6.2、hrun --startproject 项目名称

在这里插入图片描述

6.3、将项目导入Pycharm中目录结构如下:

api目录下为接口的详细信息
reports目录下为生成的报告
testcases目录下为测试用例
testsuites为测试套件
.env存储项目环境变量,通常用于存储项目敏感信息
debugtalk.py文件用于编写函数辅助测试
在这里插入图片描述

7.pycharm中设置json文件打开方式
在这里插入图片描述

8.发送get请求
{
“config”: {
“name”: “作文大全”,
“base_url”: “http://zuowen.api.juhe.cn”,
“variables”: {
}
},
“teststeps”: [
{
“name”: “作文list接口”,
“request”: {
“method”: “GET”,
“url”: “/zuowen/typeList”,
“params”: {
“id”: “1”,
“key”: “be7aba223449062e97f5a2ca98c74103”
}
},
“validate”:[
{“eq”:[“status_code”,200]}
]
}
]
}

9.单个Test_Case执行
import os
os.system(“测试用例路径”)

10.发送post请求
{
“config”: {
“name”: “周公解梦”,
“base_url”: “http://open.smallsword.cn”,
“variables”: {
}
},
“teststeps”: [
{
“name”: “暗恋的人”,
“request”: {
“method”: “post”,
“url”: “/api.php”,
“params”: {
“c”: “meng”,
“a”: “jiemeng”
},
“data”:{
“mengid”: “5”,
“openudid”: “1256FA0F-FF3B-40F3-A2B7-C4127EC8063D”
}
},
“validate”:[
{“eq”:[“status_code”,200]},
{“eq”:[“content.msg”,“操作成功。”]}
]
}
]
}

11.多个Test_Case执行
{
“config”: {
“name”: “测试用例集合”
},
“testcases”: [
{
“name”: “GET请求”,
“testcase”: “testcases/test01.json”
},
{
“name”: “POST请求”,
“testcase”: “testcases/test02.json”
}
]
}

执行
import os
os.system(“hrun C:\Users\Asan\Desktop\code\Httprunner_demo\testsuites\test_suites.json”)

12.HTML报告解析

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

13.配置json创建模板
在这里插入图片描述

模板内容
{
“config”:{
“name”: “模块名称”,
“base_url”: “主机路径”,
“variables”: {
}
},
“teststeps”: [
{
“name”: “接口名称”,
“request”: {
“method”: “请求方式”,
“url”: “接口路径”,
“params”: {
“参数名”: “参数值”
}
},
“validate”: [
{“eq”: [“断言”]}
]
}
]
}
14.环境变量(.env)
14.1.环境变量的作用
在自动化测试中,有时需要借助环境变量实现某些特定的目的,常见的场景包括:
切换测试环境
切换测试配置
存储敏感数据(从信息安全的角度出发)
14.2.通过.env设置环境变量
HttpRunner 运行时,会自动将 .env 文件中的内容加载到运行时(RunTime)的环境变量中,然后在运行时中就可以对环境变量进行读取了,存储采用 name=value 的格式
在这里插入图片描述

14.3.引用环境变量
在这里插入图片描述

15.参数化
15.1.variables中参数化
作用于整个测试用例(json/yml文件),可用于里面的每个请求中
在这里插入图片描述

15.2.Testsuites中参数化
在这里插入图片描述

15.3.cvs参数化
1.data文件夹下面放csv数据,第一行为变量名称
在这里插入图片描述

2.测试套件testsuites里面 关联需要测试的测试用例文件 并读取csv数据
在这里插入图片描述

3.测试用例里面引用,就可以实现写一个接口用例 执行多次
在这里插入图片描述

15.4.debugtalk.py调用python函数(参数化)
HttpRunner 的实现方式为,支持热加载的插件机制(debugtalk.py),可以在 YAML/JSON 中调用 Python 函数
我们可以在测试用例文件的同级或其父级目录中创建一个 debugtalk.py 文件,然后在其中定义相关的函数和变量
import random

def getrandomid():
return random.randint(1,5)

在 YAML/JSON 测试用例文件中,引用变量的方式是采用$ + 变量名称的方式;调用函数的方式为${函数名()}
在这里插入图片描述

16.文件上传
debugtalk.py中编写函数提供上传文件对象
在这里插入图片描述

json测试用例编写
在这里插入图片描述

17.接口依赖
在 HttpRunner 中,支持接口之间的依赖,提取参数值使用extract 关键字和引用提取的数据使用$var,extract 的列表中可指定一个或多个需要提取的参数

在提取参数时,当 HTTP 的响应结果为 JSON 格式,则可以采用.运算符的方式,逐级往下获取到参数值;响应结果的整体内容引用方式为 content 或者 body
content对象取值
{
“code”: 0,
“msg”: “login success!”,
“username”: “test”,
“token”: “b3f7e8e12d23591ea671374dee818c63b1599d4d”
}
content.code 取出code后面对应的值0
content.msg 取出msg后面的对应值"login success!"
list类型取值
[{
“age”: 20,
“create_time”: “2019-09-15”,
“id”: 1,
},
{ “age”: 21,
“create_time”: “2019-09-16”,
“id”: 2,
} ]
content.1 取出list里面的第二组数据{“age”: 21, “create_time”: “2019-09-16”, “id”: 2}
content.0.age取出第一组数据的age对应值20
{
“config”: {
“name”: “接口依赖”,
“base_url”: “http://v.juhe.cn/historyWeather”
},
“teststeps”: [
{
“name”: “获取支持省份列表”,
“request”: {
“url”: “/province”,
“method”: “GET”,
“params”: {
“key”: “eee1da697c1e08cfc566cbc5d84ad5f9”
}
},
“extract”: [
{
“id”: “content.result.0.id”
}
],
“validate”: [
{“eq”:[“status_code”,200]}
]
},
{
“name”: “获取支持的城市地区列表”,
“request”: {
“url”: “/citys”,
“method”: “get”,
“params”: {
“province_id”: “$id”,
“key”: “eee1da697c1e08cfc566cbc5d84ad5f9”
}
},
“validate”: [
{“eq”:[“status_code”,200]}
]
}
]
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值