HttpRunner完整笔记(从搭建到应用)
一.安装
(1) 直接python2 –m pip install HttpRunner,安装完成后,可使用hrun –V 来查看安装版本;python2 pip install -U HttpRunner可进行版本升级;
(2) 配置环境变量,生成脚本和运行脚本时需要使用har2case和hrun;
(3) 新建测试项目:cd到项目要放置的路径,执行hrun --startproject BaseAccApiTest,即可在该路径下创建新项目BaseAccApiTest;
二.录制脚本
(1) 录制脚本过程,借用charles来进行抓包,抓取具体接口后,导出为.har格式后保存到本地
(2) Cmd进入到导出文件路径,执行har2case $name.har $name.yml/name.json
三.执行脚本
(1) hrun $name.har
(2) 执行完成后,会在report下生成html报告,基本操作过程就这些;
四.脚本格式
(1) 此处只介绍下yml格式的脚本,如需添加多个接口,则只需继续添加test即可;
-config:
name: report
request:
base_url: ''
headers:
'Authorization': 'Bearer eyJhbGciOiJIUzUoKQ'
User-Agent: 'Mozilla/5.0 (Windows NT 10.0; Win64;
x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.12
Safari/537.36'
variables: []
- test:
name: '用户登录接口(login)'
request:
headers:
'Content-Type': 'application/json;charset=UTF-8'
json:
'name': 'root@aoneai.com'
'password': '63a9f0ea7bb98050796b649e85481845'
method: 'POST'
url: 'http://xxx.xxx.xxx.xxx:8001/gw/aone-rbac/rbac/auth/login'
validate:
- eq:
- status_code
- 200
- eq:
-
headers.Content-Type
- 'application/json;charset=UTF-8'
- eq:
- content.code
- 0
说明:
name 这个test的名字
variables 定义变量名和值, 这里定义的变量名和值只可以在当前test中引用. 引用方法跟上面一样: $变量名
request 这个test具体发送http请求的各种信息, 如下:
url 请求的路径 (若config中有定义base_url,
则完整路径是用 base_url + url )
method 请求方法 POST, GET等等
headers 请求所带的头部信息 (config中request下面的headers中的值会被隐含地加入)
data /
json / param 请求所带内容 对POST方法,
data 是指消息体是键值对表单, json 是指消息体是json串, params 是指用GET方法时带在url后的参数
extract 完成请求后, 从返回内容中抽取数据存入变量, 在后面的请求中, 可以通过引用该变量来获取该值.
validate 完成请求后, 所要进行的验证内容. 所有验证内容均通过该test才算通过,否则失败.
五.缓存参数
(1) 测试过程中经常会需要将上一接口的返回值作为当前接口的请求值,基于这种场景,Httprunner提供了缓存参数机制(extract),具体操作如下:
场景一:
“获取指定定时报告”接口需要“定时报告列表”返回参数中的id来作为参数进行获取报告。
“定时报告列表”接口响应参数如下:
{
"code": 0,
"page": {
"page": 1,
"count": 17,
"size": 20
},
"data": [
{
"startTime":
"",
"email": "624@qq.com",
"cycleUnit":
"month",
"createTime":
"2018-08-09 14:58:08",
"description":
"",
"endTime": "",
"id": 7,
"jobID": 12,
"status": 0,
"scheduleType":
"plan",
"cycleSubParamDay": 9,
"uid": 1,
"cycleSubParamHour": 16,
"title": "月",
"jobGroup": 1,
"updateTime":
"2018-08-09 15:08:54",
"userName":
"root",
"dashboardId": 1
},
{
"startTime":
"",
"email": "624@qq.com",
"cycleUnit":
"week",
"createTime":
"2018-08-09 14:58:40",
"description":
"",
"endTime": "",
"id": 8,
"jobID": 13,
"status": 0,
"scheduleType":
"plan",
"cycleSubParamDay": 4,
"uid": 1,
"cycleSubParamHour": 16,
"title": "周",
"jobGroup": 1,
"updateTime":
"2018-08-09 15:09:07",
"userName":
"root",
"dashboardId": 1
},
…….
}
当需要提取上述返回结果中的id作为下个接口的请求值,则可在“定时报告列表”接口的test下添加:
extract:
- id: content.data.0.id
然后在“获取指定定时报告”test下请求参数下直接引用;
params:
'id': '$id'
六.数据驱动
三种数据源:直接在yaml/json中定义、调用csv文件、调用函数。
1. 直接在yaml或json中引用
定义:
parameters:
- page-size-title-uid:
- ["1","11","3","1"]
- ["0","10","2","1"]
- ["0","12","2","1"]
引用:
request:
method: 'GET'
params:
'page': '$page'
'size': '$size'
'title': '$title'
'uid': '$uid'
注意:网上说parameters可分别加在config或test里,但是实际测试时,发现yaml中只能加在config中,加在test里感觉取不到值。此外,加在config中跑用例集感觉不太合适,比如有三个接口,其中一个接口参数定义了三组,那么跑脚本时,就会执行三次用例集,暂时还没测试多个接口多组变量。
2. 调用csv文件
目前测试是添加在config中,在test中加,一直报VariableNotFound,后续在研究研究。
定义:
parameters:
- page-size-title-uid: ${P(page-size-title-uid.csv)}
其中${P(page-size-title-uid.csv)}可替换为${parameterize(page-size-title-uid.csv)}
引用:
params:
'page': '$page'
'size': '$size'
'title': '$title'
'uid': '$uid'
page-size-title-uid.csv)文件格式:
注意:有时读取文件出错时,可能是文件格式错误,需为utf-8;
3. 调用函数
支持热加载的插件机制debugtalk.py中自定义函数get_size(),然后在config中声名,最后在test中引用。
自定义函数:
def getsize():
return [{"size":10},{"size":15},{"size":20}]
声名:
parameters:
- size: ${getsize()}
引用:
params:
'page': '0'
'size': '$size'
七.断言
Httprunner中,validate来进行对结果进行校验。
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- 'application/json;charset=UTF-8'
- eq:
- content.code
- 0
如content.code来校验code是否为0;
八.问题点收集:
1. variables: [{size: 8},{size: 9}]添加到config或test中,参数只能取值size:9,之前是parameters出现过次问题,但由版本1.5.12升级到1.5.13后,parameters问题解决,但variable仍存在此问题!
HttpRunner完整笔记(从搭建到应用)的更多相关文章
- 虚拟机搭建Zookeeper服务器集群完整笔记
虚拟机搭建Zookeeper服务器集群完整笔记 本笔记主要记录自己搭建Zookeeper服务器的全过程,默认已经安装部署好Centos7. 一.虚拟机下Centos无法联网解决方案 1.首先调整虚拟机 ...
- Hadoop学习笔记(10) ——搭建源码学习环境
Hadoop学习笔记(10) ——搭建源码学习环境 上一章中,我们对整个hadoop的目录及源码目录有了一个初步的了解,接下来计划深入学习一下这头神象作品了.但是看代码用什么,难不成gedit?,单步 ...
- Hadoop学习笔记(4) ——搭建开发环境及编写Hello World
Hadoop学习笔记(4) ——搭建开发环境及编写Hello World 整个Hadoop是基于Java开发的,所以要开发Hadoop相应的程序就得用JAVA.在linux下开发JAVA还数eclip ...
- Spring学习笔记--环境搭建和初步理解IOC
Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...
- struts2学习笔记--动手搭建环境+第一个helloworld项目
在Myeclipse中已经内置好了struts2的环境,但是为了更好的理解,这里自己从头搭建一下: 前期准备:下载struts2的完整包,下载地址:https://struts.apache.org/ ...
- NuGet学习笔记3——搭建属于自己的NuGet服务器
文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...
- NuGet学习笔记(3) 搭建属于自己的NuGet服务器
文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...
- angularJS学习笔记之——搭建学习环境
学习AngularJS已经好几天了,从今天开始学习AngularJS环境搭建. 无论是Mac.Linux或Windows环境中,您均可遵循本教程学习编程. 第一步:安装Git Git是什么呢? Git ...
- NuGet学习笔记(3)——搭建属于自己的NuGet服务器(转)
在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重要的一步,从零开始搭建属于自己的NuGet服务器,诚然园子里及其它很多地方已经有完全写好的Nu ...
随机推荐
- 【miscellaneous】多播的实现和需要注意的问题
多播的实现和需要注意的问题 前段时间研究了一小段时间的网络多播问题,自己很有感触,把自己的经历写出来,希望有需要的可以少走一些弯路. 先说一下原理,我觉得这个还是需 ...
- 【JAVA开发】eclipse最新版本Eclipse Neon
这个版本的IDE支持Java.JavaScript.C/C++.PHP和Fortran等多种编程语言: 这个版本首次鼓励用户使用Eclipse Installer来做安装,这是一种由Eclipse O ...
- lua程序设计(第4版)第二章习题
练习2.1:修改八皇后问题的程序,使其在输出第一个解后即停止运行. 解法:要使得有一个解就返回,首先要获得一个解,然后再返回或停止运行 练习2.2:解决八皇后问题的另一种方式是,先生成1-8之间的所有 ...
- eval 命令
eval命令用于重新运算求出参数的内容. eval可读取一连串的参数,然后再依参数本身的特性来执行. 语法: eval [参数]示例:eval echo 123
- Oracle系统权限与对象权限
oracle权限分为: 系统权限: 允许用户执行特定的数据库动作,如创建表.创建索引.连接实例等. 对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列.执行存储过程等. 系统权限 超过一 ...
- 啃掉Hadoop系列笔记(04)-Hadoop运行模式之伪分布式模式
伪分布式模式等同于完全分布式,只是她只有一个节点. 一) HDFS上运行MapReduce 程序 (1)配置集群 (a)配置:hadoop-env.sh Linux系统中获取jdk的安装路径:
- 剑指offer10:2*1的小矩形横着或者竖着去覆盖2*n的大矩形,总共有多少种方法?
1. 题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 2.思路和方法 思路:(下面说到的x*y的矩形,x是宽 ...
- spark内核篇-任务调度机制
在生产环境中,spark 部署方式一般都是 yarn-cluster 模式,本文针对该模式进行讲解,当然大体思路也适用于其他模式 基础概念 一个 spark 应用包含 job.stage.task 三 ...
- Spring实战(九)AOP概念以及Spring AOP
1.横切关注点(cross-cutting concern) 软件开发中,散布于应用中多处的功能被称为横切关注点,如事务.日志.安全. 横切关注点从概念上是与应用的业务逻辑相分离的(但是往往会直接嵌入 ...
- Java 时间不一致
1.new Date() 得到的时间?和系统相差 相差8个小时 2.eclipse控制台打印的时间与系统相差 相差8个小时 3.log4j日志的时间与与系统相差 相差8个小时 上述问题其实是同一个问题 ...