HttpRunner_参数化进阶
一.获取返回包数据
在提取参数时,当 HTTP 的请求响应结果为 JSON 格式,则可以采用.运算符的方式,逐级往下获取到参数值;响应结果的整体内容引用方式为 content 或者 body,如上面的content.errorCode
二.调用其他接口返回值
(1)前置接口中设置(支持多个)指定的参数
关键字:extract 参数名:token 参数值:content.token
extract:
token: content.token
(2)引用接口中调用该参数名
关键字:$参数名
token: $token
三.yml文件
一个接口在testcases目录下建一个yml(json)文件,内部存储该接口的所有测试场景
四.设置全局变量并引用
(1)设置全局变量参数
关键字:variables 参数名:device_sn 参数值:FwgRiO7CNA50DSU
variables:
device_sn: FwgRiO7CNA50DSU
(2)引用接口中调用该参数名
关键字:$参数名
device_sn: $device_sn
五.调用函数
(1)定义函数
debugtalk.py中编写函数
(2)调用函数
关键字:${函数名($参数)}
举例:debugtalk.py中定义的函数是get_name(n),则引用时是${get_name(1)}
六.参数化驱动(最简单的方式)
(1)新建一个存储参数化数据的yml文件,内容如下:
config:
name:
testcases:
create user $user_id:
testcase: testcases\test_demo.yml --- 需要执行参数化的用例路径
parameters:
user_id: ["index", "index1"] ---需要执行参数话的数据及其参数
(2)引用参数
关键字:$参数名
$user_id
七.参数化驱动(复杂的方式)
注意:从 1.5.11 版本开始,HttpRunner 不再支持测试步骤(teststep)层级的参数化数据驱动,只支持测试用例(testcase)层级的参数化驱动配置,所以下面这种参数化方式已经不支持,比如下图所示:

(1)支持的参数化方式有3中
参数名称的定义分为两种情况:
a.独立参数单独进行定义;
b.多个参数具有关联性的参数需要将其定义在一起,采用短横线(-)进行连接。
数据源指定支持三种方式:
a.在 YAML/JSON 中直接指定参数列表
b.通过内置的 parameterize(可简写为P)函数引用 CSV 文件
c.调用 debugtalk.py 中自定义的函数生成参数列表
(2)在testsuites目录下新建一个存储参数化数据的yml文件,内容如下:
config:
name:
testcases:
create user $username-$password:
testcase: testcases\test_demo.yml
parameters:
- index: ["test", "test1"] --- 单一参数列表
- username-password:
- ["user1", "111111"]
- ["user2", "222222"]
- ["user3", "333333"] --- 多参数列表
- resName-status: ${P(data/account.csv)} ---外部csv文件
(3)使用参数
关键字:$参数名
/api/main/$index/$username/$password/$resName/$status
(4)运行结果:

八.使用指定的报告模板+指定报告生成路径
hrun testcases\test_data.yml --report-template E:/autotest/api_autotest/logs/report.html --report-dir E:/autotest/api_autotest/logs/
九.保存测试过程数据
以log日志文件形式保存(此处名字都是一样的,对于多次运行结果会覆盖,可优化)
hrun testcases\test_data.yml --save-tests
(1).XXX.loaded.json:测试用例加载后的数据结构内容,加载包括测试用例文件(YAML/JSON)、debugtalk.py、.env 等所有项目文件
(2).XXX.parsed.json:测试用例解析后的数据结构内容,解析内容包括测试用例引用(API/testcase)、变量计算和替换、base_url 拼接等
(3).XXX.summary.json:测试报告生成前的数据结构内容。
十.单独使用HttpRunner
(1)新建.py文件,内容如下:
# coding:utf-8
from httprunner.api import HttpRunner
kwargs = {'failfast': False, 'report_dir': 'E:\\demo\\test'} # 看api.py中__init__方法参数
runner = HttpRunner(**kwargs)
result_runner = runner.run('E:\\autotest\\api_autotest\\testcases\\test_demo.yml') # 执行指定目录下用例
print(result_runner) # 输出报告地址
summary = runner.summary # 获取执行结果,需要在run方法后
print(summary)
(2)运行结果如下:
HttpRunner_参数化进阶的更多相关文章
- pytest封神之路第五步 参数化进阶
用过unittest的朋友,肯定知道可以借助DDT实现参数化.用过JMeter的朋友,肯定知道JMeter自带了4种参数化方式(见参考资料).pytest同样支持参数化,而且很简单很实用. 语法 在& ...
- pytest封神之路第零步 快速入门
背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...
- JUnit5学习之七:参数化测试(Parameterized Tests)进阶
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 性能测试十二:jmeter进阶之java请求参数化
如项目中的ip.端口号之类的,都可以在此代码中定义 public Arguments getDefaultParameters() { // TODO Auto-generated method st ...
- Pytest进阶之参数化
前言 unittest单元测试框架使用DDT进行数据驱动测试,那么身为功能更加强大且更加灵活的Pytest框架怎么可能没有数据驱动的概念呢?其实Pytest是使用@pytest.mark.parame ...
- Jmeter(三十四) - 从入门到精通进阶篇 - 参数化(详解教程)
1.简介 前边三十多篇文章主要介绍的是Jmeter的一些操作和基础知识,算是一些初级入门的知识点,从这一篇开始我们就来学习Jmeter比较高级的操作和深入的知识点了.今天这一篇主要是讲参数化,其实前边 ...
- Jenkins 进阶篇 - 参数化构建
我们在构建任务时经常会遇到这样的情景,一个任务配置好了以后,在后面的构建过程中,又会修改一些配置.例如,我们构建项目的代码可能是拉取指定的分支或者是Tag进行构建,又或者是在构建是需要指定特定的运行平 ...
- [C#] 进阶 - LINQ 标准查询操作概述
LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...
- C++_进阶之函数模板_类模板
C++_进阶之函数模板_类模板 第一部分 前言 c++提供了函数模板(function template.)所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体制定,用一个虚拟的类型来 ...
随机推荐
- springboot优雅实现异常处理
前言 在平时的 API 开发过程中,总会遇到一些错误异常没有捕捉到的情况.那有的小伙伴可能会想,这还不简单么,我在 API 最外层加一个 try...catch 不就完事了. 哈哈哈,没错.这种方法简 ...
- Java 使用slf4j记录日志
引入依赖 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12< ...
- Redis主从 部署和配置
目录 一.主从简介 主从介绍 主从原理 二.主从部署 环境介绍 主从配置 临时主从 三.主从测试 一.主从简介 主从介绍 Redis都是主节点.每个从节点只能有一个主节点,而主节点可以同时具有多个从节 ...
- Jenkins实例 自由风格项目
目录 一.General 二.源码管理 三..构建触发器 四.构建环境 五.构建 六.构建后操作 一.General General是构建任务的一些基本配置.名称,描述之类的. 项目名称:是刚才创建构 ...
- 2020ACTF pwn writeup
为了打2021的ACTF,想着把2020年的pwn题做一做吧,发现2020年的pwn题质量还挺高的.反倒是2021年的题目质量不太高,好像是没有专门的pwn师傅出题,可以理解,毕竟办校赛,说白了就是用 ...
- [BUUCTF]REVERSE——[GKCTF2020]BabyDriver
[GKCTF2020]BabyDriver 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索程序里的字符串,看到提示flag是md5(input),下方还看到了类似迷宫的字符串 找到关 ...
- [BUUCTF]REVERSE——helloword
helloword 题目是安卓逆向.安卓逆向工具下载地址 用APKIDE打开附件,ctf+f调出检索版,检索main函数,能看到flag字符串 flag{7631a988259a00816deda84 ...
- js实现数组扁平化
数组扁平化的方式 什么是数组扁平化? 数组扁平化:指将一个多维数组转化为一个一维数组. 例:将下面数组扁平化处理. const arr = [1, [2, 3, [4, 5]]] // ---> ...
- CF60A Where Are My Flakes? 题解
Content 有人发现他的麦片不见了,原来是室友把它藏在了 \(n\) 个盒子中的一个,另外还有 \(m\) 个提示,有两种: \(\texttt{To the left of }x\):麦片在第 ...
- AT4151 [ABC099B] Stone Monument 题解
Content 一个村里有 \(999\) 个房子,第 \(i\) 个房子的高度为 \(1+2+...+i=\sum\limits_{j=1}^ij\).现在下了一场雪,给定相邻两个房子没被雪覆盖的高 ...
