一、HttpRunner学习汇总
HttpRunner是一款面向Http和HTTPS协议的通用测试框架,只需编写维护一份YAML/JSON脚本即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求,是基于关键字驱动的框架,基于Har实现接口录制和用例生成公告
安装命令 pip install httprunner==2.5.7 ,这里安装的是2.5.7版本,安装完毕后 httprunner -V查看当前版本,HttpRunner 2.**分层机制:api testcases testsuite
一、在HttpRunner中,主要存在如下几类文件
1、YAML/JSON(必须):测试用例文件,一个文件对应一条测试用例
2、debugtalk(可选):脚本函数,存储项目中逻辑运算函数,该文件存在时,将作为项目定位标记,其所在目录被视为项目工程的根路径(当前工作目录CWD),该文件不存在是,运行测试的路径讲被视为当前工作目录CWD,测试用例文件中的相对路径,如.csv均需基于当前工作目录CWD,运行测试后,测试报告文件夹reports会生成在当前工作目录
3、.env(可选):存储项目环境变量
4、reports(自动生成):运行后自动生成,无需创建
二、YAML(Yet Another Markup Language)一种基于Unicode容易阅读,容易和脚本语言交互的,用来表达资料序列的编程语言,YAML文件可以创建为.yml文件
1、基本语法:
格式要求:K:(空格) v: 标识一堆键值对,必须要写空格
以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的
属性和值大小写敏感
缩进不能用table键
对于单个YAML/JSON文件来说,数据存储结构为 list of dict的形式,其中可能包含一个全局配置项(config)和若干个测试步骤(test);,HttpRunner划分了两层变量空间作用域(context),config:作为整个测试用例的全局配置项;test:测试步骤的变量空间(context)会继承或覆盖config中定义的内容,若某变量在config中定义了,在某test中没有定义,则该test会集成该变量;若某变量在config和test中定义了,则该test使用config中定义的变量值,哥哥测试步骤的变量空间相互堵路,互不影响,如需在多个测试步骤中传递参数值,则需要使用extract关键字,并且只能从前往后传递
三、利用HttpRunner发送请求
1、发送get请求

执行yml文件,执行yml文件之前需要进入该文件所在的根路径下 hrun ./xxx/yml文件名,也可以用CMD命令运行

2、发送带token(传参的)get请求

3、模拟请求头

4、发送post请求

5、设置变量
原来官方操作手册说明的是config和test中都能定义变量,如果二者同时定义相同的变量则以test为主,但是2.5.7版本来看,二者同时存在读取的config中的变量(从运行结果来看test与config都定义相同的变量时运行正常,test中变量错误,config的变量正常的情况下运行正常,config变量错误,test中正常,运行报错)

四、test中参数应用举例
1、output、export及extract
2.**版本周output参数被export逐渐取代,其作用是输出值,相当于print()函数的输出功能,另一个作用则是可以定义变量时用,经常与extract关键字一起组合使用,
3、extract可以提取的关键字为:status_code, cookies, elapsed, headers, content, text, json, encoding, ok, reason, url,可以根据测试报告提取关键字,extract支持多种提取方式,01、响应结果为json结果,可采用.运算符的方式,例如 headers.Content-Type;
02、也支持响应结果为text/html 结构,可采用正则表达式的方式


通过正则表达式取响应正文中body的值

通过json取值


4、validate关键字
支持两种格式:
{“comparator_name”:[check_itrm,expect_value]} {'check': check_itrm, 'comparator': comparator_name,'expect':expect_value}
validate关键字用于断言,将预期结果与实际结果对比,其中包含的断言方式有

判断 包含的断言方式为 -contains: [content,响应正文中的值],注意是判断响应正文中是否包含了某字符串

{'check': check_itrm, 'comparator': comparator_name,'expect':expect_value} 断言方式举例

五、接口关联操作
1、test中测试步骤之间的关联

2、测通过配置文件进行关联,需要在根路径新建.env文件,该文件存放设置的全局变量参数及参数值,引用环境配置配置文件的方式为 ${ENV(参数名)}


3、也可以通过在debugtalk.py文件中编写辅助函数,然后进行关联;debugtalk是可选文件,引用该文件中的函数的方法为 ${函数名}


4、用例之间的传参,这种方式比较推荐,把需要的值都给参数化,然后进行相互调用,可以提高代码复用率
拿获取token和查看被创建的标签的接口举例,
首先获取token的接口中先把access_token变量值通过json取值方式以extrac关键字提取出来赋值给token_id,config中输出token_id值,其他用例需要引用的情况下,需要先定义该变量然后再引用,注意:四处的变量名必须保持一致


六、参数化的方式(三种)
方式一、通过testsuite中编写parameter关键字参数,testcases引用的方法:
从2.0.0版本开始,HttpRunner不再支持在测试文件中进行参数化配置,参数化的功能需要在testsuite中实现,实现的方式为paraneters下面写参数;testcases中的yml文件如下,testsuite中执行的时候需要引用testcases中的用例,,参数化后需要在testsuite中运行yml文件,


testsuite传递多个参数的方式



笛卡尔积的运用:比如测试账号有四种["test1", "test2", "test3", "test4"],密码也有四种 ["123456", "123456", "123456", "123456"],用笛卡尔积组合的话,就是4*4=16种组合

方式二、利用csv文件进行参数化
根据经下新建data文件夹--新建info.csv文件,通过P()函数进行引用,文件中的参数用 - 符号分隔,需要csv文件中的参数则通过 - 参数名的方法调用,与csv中的参数排列顺序无关,
此种方式单独在testcases中调用也是失败的,此种方法区别上面的是可以吧预期结果写进文件中用于断言,参数名称必须与csv表头保持一致,这也遵循了约定大于配置的思想



方式三、通过debugtalk实现参数化(相当于jmeter中的函数助手的功能),与parameters\csv一样,debugtalk参数化的数据也是一个列表,以下是随机在某最小值和某最大值的范围内生成多少个整数组成的列表的函数


七、跳过用例的执行,只能在testcases中设置,testsuite中暂时没有找到方法跳过执行
Unitest中可以通过@skip 无条件跳过和@kipif 条件为真时跳过及@skipunless 不满足条件时跳过用例
跳过用例的场景适合开发代码没完成,测试代码已完成、用例脚本没写完、依赖测试场景:A接口完成B接口才完成,A接口失败B接口不执行等等
1、无条件跳过


2、skipIf 条件为真是跳过,返回值为True,遵循python中if语句为真的判断:非空 非0 True

3、skipUnless 条件为假时跳过,与skipIf相反

八、用例重复执行 times 参数,用例中可以设置用例运行的次数;测试套件中设置同理运行次数的方法暂时还没有找到

九、form-data传输格式的请求运行失败时的处理,头部中content-type不写可以执行成功,写了就会失败

十、httprunner录制工具使用(录制成功后yml文件使用的是老版本的写法)
为了简化测试用例的编写工作,HttpRunner实现了测试用例生成的功能,对应的转换为一个独立的项目 har2case
首先,通过抓包工具fiddler随便抓取一些请求,导出会话,导出的格式为 .har格式


转成json格式的httprunner项目 har2case +.har文件绝对路径


转成yml文件 har2case +.har文件绝对路径 -2y 生成yml文件

编译器中打开文件


十一、用例分层
分成思想:Httprunner项目分层为 api接口层,testcases用例层,testsuite测试套件层
api定一层:不用在里面加特殊细节的断言,断言接口能否请求通即可
中间层为testcases用例层:调用api层的接口定义yml文件即可,细节断言可在这里编写,同时也可以调用其他用例或者其他用例的参数执行
最上层为测试套件层testsuite: 最好整合一起执行,目前没有找到方法控制测试套件中用例的执行顺序

1、api接口编写举例,新建api文件夹,下面新建一个yml文件进行接口api的编写

2、接口层写好后编写用例层,用例层直接调用接口中的yml文件执行,

3、测试套件层:测试套件吧测试用例整合起来执行

十二、用例之间的相互调用
用例之间调用的方法可以通过调取用例和调取用例之中的参数进行调用
1、简单的调用


2、用例之间传参的调用,可以实现用例的复用 思路:被调取用例:现有extrac提取被调用的参数值,export输出该参数,调用的用例:variables该参数值后把该参数传入接口请求参数中



十三、脚手架工具使用介绍
一个HttpRunner项目中必须要有的文件:api(定义接口) reports(自动生成的,存储测试报告) testcases (存放测试用例) testsuites(存放测试套件) .env (存放环境配置参数) debugtalk (编写脚本函数),与其自己动手新建这么多文件夹和文件,还不如利用脚手架快速构建项目,只需要一个命令即可: hrun --startproject +项目名称


十四、生成2.4.3版本测试报告的方法
先把HttpRunner版本降级到2.4.3版本 pip install httprunner==2.4.3 --index-url https://pypi.douban.com/simple
新建一个HttpRunner项目,在reports文件夹下新建template文件夹,把2.4.3版本的测试报告放进去命名为extent_report_template2.4.3.html

然后再运行命令: hrun ./testcases/demo_testcase.yml --report-template reports/template/extent_report_template2.4.3.html,生成的测试报告就是2.4.3的版本了

一、HttpRunner学习汇总的更多相关文章
- ABP 学习汇总
		
本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所用到的一些新技 ...
 - JS object(对象)的学习汇总
		
Object(对象)是在所有的编程语言中都十分重要的一个概念,对于事物我们可以把他们看作是一个对象,而每一个事物都有自己的表示的属性和对于某一信息作出的相应的操作.而这些东西就变成了事物的属性和方法. ...
 - MINA学习汇总
		
MINA学习汇总 Apache Mina Server 是一个网络通信应用框架,用于开发高性能和高可用性的网络应用程序.它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(然,也可以提供JAVA ...
 - HttpRunner学习8--使用debugtalk.py辅助函数
		
前言 在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以 ...
 - httprunner学习15-运行用例命令行参数详解
		
前言 HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制. 命令行参数CLI 使用 -h 查看相关命令行参数 hrun -h 参数名称 参数值 参数说明 -h, --h ...
 - HTTP头学习汇总
		
在开发http请求的时候,对HTTP头部信息一知半解,各种百度谷歌汇总一下学习到的资料. http简介 HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于 ...
 - sencha touch 学习汇总(转)
		
1.官方网站:http://www.sencha.com/products/touch/ 2.在线文档:http://docs.sencha.com/touch/2.2.1/ 3.在线翻译文档:htt ...
 - Eucalyptus学习汇总
		
Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是一种开 ...
 - HttpRunner学习7--引用CSV文件数据
		
前言 在之前的文章中,我们已经学习了 parameters 参数化,是在测试脚本中直接指定参数列表.这种方法简单易用,但如果我们的参数列表数据比较多,这种方法可能就不太适合了. 当数据量比较大的时候, ...
 
随机推荐
- C语言编程 菜鸟练习100题(21-30)
			
[练习21]计算自然数的和 0. 题目: 计算自然数的和 1. 分析: 练习使用 for 循环结构.for 循环允许一个执行指定次数的循环控制结构. 2. 程序: #include <stdio ...
 - slickgrid ( nsunleo-slickgrid ) 5 增加子件
			
slickgrid ( nsunleo-slickgrid ) 5 增加子件 上次把单元格切换的问题解决了,这次要最做的事情就是给slickgrid的treegird增加子件,我们先选中某一条记录,然 ...
 - CodeForces - 1360C
			
C. Similar Pairs time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
 - 201871030139-于泽浩 实验二 个人项目D{0-1} KP
			
201871030139-于泽浩 实验二 个人项目D{0-1} KP 项目 内容 课程班级博客连接 2018级卓越班 这个作业要求连接 软件工程个人项目 我的课程学习目标 (1)掌握软件项目个人开发流 ...
 - Sql Server存储过程和游标的配合操作
			
本段代码主要为了记录存储过程以及游标的使用,防止以后自己忘记 知识点:1.存储过程书写 2.游标书写 3.游标循环更新记录 create proc saletargetas declare @ower ...
 - Python 高级特性(4)- 生成器
			
列表生成式 通过上一篇介绍 列表生成式文章可以知道,它可以快速创建我们需要的列表 局限性 受内存限制,列表生成式创建的列表的容量肯定有限的 不仅占用很大的存储空间,如果我们仅仅需要访问前几个元素,那后 ...
 - C语言-字符串函数的实现(一)之strlen
			
C语言中的字符串函数有如下这些 获取字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp ...
 - BBR拥塞算法的简单解释
			
TCP BBR的ACM论文中,开篇就引入了图1,以此来说明BBR算法的切入点: 为何当前基于丢包探测的TCP拥塞控制算法还有优化空间? BBR算法的优化极限在哪儿? 图1 为了理解这张图花了我整整一个 ...
 - css详解background八大属性及其含义
			
background(背景) 以前笔者在css盒模型以及如何计算盒子的宽度一文中提到过盒模型可以看成由 元素外边距(margin).元素边框(border).元素内边距(padding)和元素内容(c ...
 - 浅入Kubernetes(6):CKAD认证中的部署教程
			
目录 预设网络 kubeadm 安装 k8s 配置 calico 自动补全工具 状态描述 目前为止,笔者已经写了 5 篇关于 k8s 的文章,这一篇笔者将介绍 CKAD 认证官方课程中,如何部署 k8 ...