一、简介

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

核心特性:

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

二、安装

1. 首次安装:pip install httprunner

2. 升级到最新:pip install -U HttpRunner

三、命令

  • hrun:核心命令
  • locusts:基于Locust实现性能测试
  • har2case:辅助工具,将har格式地文档转换为yml/json格式的测试用例

四、用例简述

  • 测试用例集:单个测试用例或多个测试用例的集合,表现形式为一个json文件
  • 测试用例:单次http请求和响应过程,表现形式为json文件中的一个test
  • config:全局配置项,作用于整个测试用例集,一个测试用例集中只有一个config
  • test:作用于单个测试用例,包含单个请求、响应、校验过程,作用域仅限于单个接口,一个测试用例集中可以有多个test
  • 如果一个变量在config中定义了,在test中没有定义,则test会继承该变量
  • 如果一个变量在config和test中都定义了,则test会使用自己定义的变量值
  • 各个test的空间相互独立,互不影响

五、结果校验器

1. 结果校验器功能:主要辅助测试人员执行测试用例时判断系统的功能是否正常。对于每一个test,可以指定0个或多个校验项,放置在validate中。在自动化测试执行的时候,会在发起HTTP请求、解析结果响应之后,逐个检查各个校验项,若存在任意校验项不通过的情况,则该test将终止并被标记为失败。

例:

- test:
name: get token
request:
url: https://ape-api.yuanfudao.ws/win/login
method: GET
extract:
- token: content.token
validate:
- {"check": "status_code", "comparator": "eq", "expect": 200}
- {"check": "content.token", "comparator": "len_eq", "expect": 16}

2. 如上例所示,每一个校验项均为一个json结构,里面包含checkexpectcomparator三个属性字段。其中,check对应着要检查的字段,expect对应着检查字段预期的值,这两项是必须指定的;comparator字段对应着比较方法,若不指定,则默认采用eq,即检查字段与预期值相等。

3. 其他检查方法:

HttpRunner除了eq,还内置了大量的检查方法。例如,我们可以通过gtgeltle等比较数值大小,通过len_eqlen_gtlen_lt等比较长度是否相等(列表、字典、字符串均适用),通过containscontained_by来判断包含关系,通过startswithendswith判断字符串的开头结尾,甚至通过regex_match来判断是否满足正则匹配等。

详细的比较方式还有许多,需要时可查看comparator表格。

六、运行

1. Charles抓包,导出.har格式文件

2. 转换格式:

har2case xxx.har xxx.json

3. 运行:

4. 查看报告:

5. 其他:

  • 日志级别:需要查看到更详尽的信息,例如请求的参数和响应的详细内容,可以将日志级别设置为DEBUG,即在命令中添加--log-level debug。
  • failfast:若希望测试用例集在运行过程中,遇到失败时不再继续运行后续用例,则可通过在命令中添加--failfast实现。

  • 指定报告名称:如需指定生成报告的名称,可以使用 --html-report-name 参数。(会在reports目录下生成相应名称的文件夹,里面包含相同名称的报告)

Httprunner学习的更多相关文章

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

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

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

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

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

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

  4. HttpRunner学习6--使用parameters参数化

    前言 在使用HttpRunner测试过程中,我们可能会遇到这种场景: 账号登录功能,需要输入用户名和密码,设计测试用例后有 N 种组合情况 如果测试组合比较少,比如只有2个,那我们直接在YAML脚本中 ...

  5. HttpRunner学习5--使用variables声明变量

    前言 在HttpRunner中,如果需要声明变量,可以通过关键字 variables 来完成,要引用声明的变量,则是通过 $+变量名 (如 $token )来实现.variables 可以在 conf ...

  6. HttpRunner学习2--用例格式和简单使用

    前言 HttpRunner中,测试用例支持两种文件格式:YAML 和 JSON.两种格式的用例是完全等价的,对于相同的信息内容,使用 YAML /JSON 得到的测试结果和报告也是一致的. 本人环境: ...

  7. HttpRunner学习1--Windows&Linux安装httprunner

    最近在学习HttpRunner,这是一款开源的接口测试框架,可用于HTTP(S)协议的接口测试.通过该框架,我们只需维护一份 YAML/JSON 脚本,即可轻松的进行接口自动化. 更多的介绍,大家可以 ...

  8. httprunner学习1-环境与登录接口案例

    前言 HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试. 具有以下优点: 继承 Requests 的全部特性,轻松实 ...

  9. HttpRunner学习11--指定用例运行次数

    前言 在HttpRunner中,一般情况下,我们写的用例脚本都是每次运行一次,如果我们想要指定用例运行的次数,可以通过 times 关键字来实现. 测试场景 在这里,我们以访问 TesterHome ...

随机推荐

  1. 02-03:springboot 整合listener

    1.通过注解扫描完成Listener组件的注册 1.1 编写listener /** * Springboot 整合listener */ import javax.servlet.ServletCo ...

  2. Docker概念学习系列之Docker与传统虚拟机差异(4)

    不多说,直接上干货! 见[博主]撰写的https://mp.weixin.qq.com/s/YihjPONUcUi4b_7RC8oLYw   传统虚拟化是在硬件层面实现虚拟化,需要有额外的虚拟机管理应 ...

  3. Silverlight中使用MVVM(3)—进阶

    这篇主要引申出Command结合MVVM模式在应用程序中的使用 我们要做出的效果是这样的 就是提供了一个简单的查询功能将结果绑定到DataGrid中,在前面的基础上,这个部分相对比较容易实现了 我们在 ...

  4. Vue笔记:VS Code 常用快捷键

    VS Code 常用快捷键 1.注释: 单行注释:ctrl+/, 注释后再按取消 取消单行注释:alt+shift+A 注释后再按取消 2.移动行 向上移动一行:alt+up 向下移动一行:alt+d ...

  5. 百度&高德地图小区景点边界轮廓实现

    经常的我们在使用地图功能时,会发现在选择一个小区或者一个热门景点的时候,地图上面会给出其边界轮廓,能够方便我们知道其范围大小,有时候在我们使用地图组件的时候,也会面临着类似的需求.比如在地图上面标识出 ...

  6. Solidity字符串类型

    字符串可以通过""或者''来表示字符串的值,Solidity中的string字符串不像C语言一样以\0结束,比如abcd这个字符串的长度就为我们所看见的字母的个数,它的长度为4. ...

  7. Leetcode 763. Partition Labels

    思路:动态规划.对于属于coins的coin,只要知道amount-coin至少需要多少个货币就能表示,那么amount需要的货币数目=amount-coin需要的货币数目+1:如果amount-co ...

  8. 【IT笔试面试题整理】字符串的组合

    [试题描述]输入一个字符串,输出该字符串中字符的所有组合.举个例子,如果输入abc,它的组合有a.b.c.ab.ac.bc.abc. 分析:这是一道很好的考查对递归理解的编程题,因此在过去一年中频繁出 ...

  9. java arrayList vector 区别

    1. 关系图 List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList 2. ArrayList.Vector和LinkedList区别 ArrayList是最常用的 ...

  10. PHP strlen()函数和strpos()函数

    strlen()  函数返回字符串的长度(字符数) 代码:   <?php echo strlen("Hello world!"); ?> 上面的代码将输出:12   ...