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学习汇总的更多相关文章

  1. ABP 学习汇总

    本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所用到的一些新技 ...

  2. JS object(对象)的学习汇总

    Object(对象)是在所有的编程语言中都十分重要的一个概念,对于事物我们可以把他们看作是一个对象,而每一个事物都有自己的表示的属性和对于某一信息作出的相应的操作.而这些东西就变成了事物的属性和方法. ...

  3. MINA学习汇总

    MINA学习汇总 Apache Mina Server 是一个网络通信应用框架,用于开发高性能和高可用性的网络应用程序.它主要是对基于TCP/IP.UDP/IP协议栈的通信框架(然,也可以提供JAVA ...

  4. HttpRunner学习8--使用debugtalk.py辅助函数

    前言 在HttpRunner中,我们的测试用例都是写在 YAML/JSON 文件中,有时候我们想借助代码来实现某些较复杂的功能,但在 YAML/JSON 中是无法直接写代码来处理的,这个时候,我们可以 ...

  5. httprunner学习15-运行用例命令行参数详解

    前言 HttpRunner 在命令行中启动测试时,通过指定参数,可实现丰富的测试特性控制. 命令行参数CLI 使用 -h 查看相关命令行参数 hrun -h 参数名称 参数值 参数说明 -h, --h ...

  6. HTTP头学习汇总

    在开发http请求的时候,对HTTP头部信息一知半解,各种百度谷歌汇总一下学习到的资料.   http简介 HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于 ...

  7. sencha touch 学习汇总(转)

    1.官方网站:http://www.sencha.com/products/touch/ 2.在线文档:http://docs.sencha.com/touch/2.2.1/ 3.在线翻译文档:htt ...

  8. Eucalyptus学习汇总

    Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems (Eucalyptus) 是一种开 ...

  9. HttpRunner学习7--引用CSV文件数据

    前言 在之前的文章中,我们已经学习了 parameters 参数化,是在测试脚本中直接指定参数列表.这种方法简单易用,但如果我们的参数列表数据比较多,这种方法可能就不太适合了. 当数据量比较大的时候, ...

随机推荐

  1. uniCloud的简单使用 增删改查

    新建一个uni-app 项目 启动云开发 选择想要的云服务 在次之前先完成uniCloud 的实名认证 https://unicloud.dcloud.net.cn 有在Web控制台创建过云服务空间就 ...

  2. Python基础(1)——变量和数据类型[xiaoshun]

    目录 一.变量 1.概述 Variables are used to store information to be referenced(引用)and manipulated(操作) in a co ...

  3. 十分钟学会Scratch图形化编程

    一.概要 Scratch是麻省理工学院开发的供儿童或者初学者学习编程的开发平台.其通过点击并拖拽的方式,完成编程,可以使儿童或者成人编程初学者学习编程基础概念等.Scratch是一款积木式图形编程软件 ...

  4. Poj3660(floyd)

    题目传送门 题意:编号为1-N的奶牛参加比赛,告诉我们m场比赛结果试问有几头奶牛的排名可以确定. 题解:其实就是一个传递闭包的模板题,用Floyd把所有有联系的比赛结果串在一起. Ac 代码: #in ...

  5. LinkedList类详解

    LinkedList类中的方法与实现原理 目录 一.数据结构 二.类标题 三.字段 四.构造函数 五.方法分析 5.1 共有方法 public boolean add(Object o) public ...

  6. 用jar命令打包war远程部署

    最近在看jboss的相关漏洞,用jmx-console进行war远程部署的时候碰到一个jsp转war的问题,研究了半天,记录一下免得搞忘了. 一开始网上是说的直接把jsp文件压缩成zip,再把后缀名改 ...

  7. Elasticsearch优化 & filebeat配置文件优化 & logstash格式配置 & grok实践

    Elasticsearch优化 & filebeat配置文件优化 & logstash格式配置 & grok实践 编码转换问题(主要就是中文乱码) (1)input 中的cod ...

  8. Swagger3注解使用

    这里只简单的说一下swagger的传值,返回值时注解的使用演示.相关注解及说明见其他文章 接收参数方式1 我们常规接收参数,可以使用一个类,类里面把属性作为接收的参数,使用注解对属性进行说明.但是这种 ...

  9. 五年了,你还在用Junit4吗?

    junit5 JUnit5在2017年就发布了,你还在用junit4吗? 什么是junit5 与以前的JUnit版本不同,JUnit 5由三个不同子项目的多个不同模块组成. JUnit 5 = JUn ...

  10. Java【File类、递归】

    File 1.在io包中 操作电脑中的文件和文件夹 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 我们可以使用File类的方法     创建一 ...