【HttpRunner】接口自动化测试框架

2023-12-16

简介

2018年python开发者大会上,了解到HttpRuuner开源自动化测试框架,采用YAML/JSON格式管理用例,能录制和转换生成用例功能,充分做到用例与测试代码分离,相比excel维护测试场景数据更加简洁。在此,利用业余时间研究这个框架去实现接口自动化测试。

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

主流接口自动化工具框架:

从上图可知,技术选型一般会优先考虑Requests+Python和HttpRunner,Requests+Python在自动化测试总结分类里面有文章讲过,这里我们针对HttpRunner进行探索。

框架流程

主要特性:

继承 Requests 的全部特性,轻松实现 HTTP(S) 的各种测试需求
采用 YAML/JSON 的形式描述测试场景,保障测试用例描述的统一性和可维护性
借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑
支持完善的测试用例分层机制,充分实现测试用例的复用
测试前后支持完善的 hook 机制
响应结果支持丰富的校验机制
基于 HAR 实现接口录制和用例生成功能(har2case)
结合 Locust 框架,无需额外的工作即可实现分布式性能测试
执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
极强的可扩展性,轻松实现二次开发和 Web 平台化

环境安装:

HttpRunner 是一个基于 Python 开发的测试框架,可以运行在 macOS、Linux、Windows 系统平台上。HttpRunner 支持 Python 3.4 及以上的所有版本,推荐建议使用 Python 3.4 及以上版本。

使用pip命令安装:pip3 install httprunner  【因本人环境装有python两个版本,这里使用是python3.6版本,就使用pip3命令,如是python2.7版本的话,就用pip命令安装】

安装完成后校验:

如版本号正常显示,则说明安装正常。

基础功能

1、 录制生成用例

在转换生成测试用例之前,需要先将抓取得到的数据包导出为 HAR 格式的文件。使用Charles抓包工具 Proxy中的操作方式为,选中需要转换的接口(可多选或全选),点击右键,在悬浮的菜单目录中点击【Export...】,格式选择HTTP Archive(.har)后保存即可;假设我们保存的文件名称为test.har

转换测试用例

在命令行终端中运行 har2case 命令,即可将 test.har 转换为 HttpRunner 的测试用例文件。 使用 har2case 转换脚本时默认转换为 JSON 格式

加上 -2y / --to-yml 参数后转换为 YAML 格式

两种格式完全等价,YAML 格式更简洁,JSON 格式支持的工具更丰富,大家可根据个人喜好进行选择。

生成后的用例如下图所示:

json格式:

YAML格式:

config:作为整个测试用例集的全局配置项
test:对应单个测试用例
name 这个test的名字
request 这个test具体发送http请求的各种信息, 如下:
url 请求的路径 (若config中有定义base_url, 则完整路径是用 base_url + url )
method 请求方法 POST, GET等等
data 传入参数值
validate 完成请求后, 所要进行的验证内容. 所有验证内容均通过该test才算通过,否则失败.

2、运行测试

若希望测试用例在运行过程中,遇到失败时不再继续运行后续用例,则可通过在命令中添加--failfast实现。如:hrun test.yaml --failfast

若需要查看到更详尽的信息,例如请求的参数和响应的详细内容,可以将日志级别设置为DEBUG,即在命令中添加--log-level debug。如:hrun test.yaml --log-level debug

为了方便定位问题,运行测试时可指定 --save-tests 参数,即可将运行过程的中间数据保存为日志文件。

日志文件将保存在项目根目录的 logs 文件夹中,生成的文件有如下三个(XXX为测试用例名称):

XXX.loaded.json:测试用例加载后的数据结构内容,加载包括测试用例文件(YAML/JSON)、debugtalk.py、.env 等所有项目文件,例如 test-quickstart-6.loaded.json
XXX.parsed.json:测试用例解析后的数据结构内容,解析内容包括测试用例引用(API/testcase)、变量计算和替换、base_url 拼接等,例如 test-quickstart-6.parsed.json
XXX.summary.json:测试报告生成前的数据结构内容,例如 test-quickstart-6.summary.json

3、测试报告

默认情况下,生成的测试报告文件会位于项目根目录的 reports 文件夹中,文件名称为测试开始的时间戳。HttpRunner 中自带了一个 Jinja2 格式的默认报告模版

测试报告形式如下:

在 Summary 中,会罗列本次测试的整体信息,包括测试开始时间、总运行时长、运行的Python版本和系统环境、运行结果统计数据。

在 Details 中,会详细展示每一条测试用例的运行结果。

点击测试用例对应的 log 按钮,会在弹出框中展示该用例执行的详细数据,包括请求的 headers 和 body、响应的 headers 和 body、校验结果、响应、响应耗时(elapsed)等信息。

默认情况下,生成的测试报告文件会位于项目根目录的 reports 文件夹中。如需指定生成报告的路径,可以使用 --report-dir 参数。

如: hrun test.yaml --dirreport-name g:\home

其它高级特性如数据参数化、用例分层、环境变量等用法请参考官网中文手册详细介绍。

4、创建项目

使用方式也与 Django 类似,只需要通过 --startproject 指定新项目的名称即可。如:hrun --startproject httpapidemo

运行后,就会在指定的目录中生成新项目的目录结构,接下来,我们就可以按照测试用例的接口-模块-场景分层原则往里面添加用例描述信息了。

需要注意的是,我们在组织测试用例描述的文件目录结构时,遵循约定大于配置的原则:

API接口定义必须放置在api目录下
模块定义必须放置在suite目录下
测试场景文件必须放置在testcases目录下
相关的函数定义放置在debugtalk.py中
具体新增用例目录结构例子如下:

具体新增用例目录结构例子如下:


【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通


二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【HttpRunner】接口自动化测试框架 的相关文章

  • 软件测试|web自动化测试神器playwright教程(三十八)

    简介 在我们使用selenium时 我们可以获取元素的属性 元素的文本值 以及输入框的内容等 作为比selenium更为强大的web自动化测试神器 playwright也可以实现对元素属性 文本值和输入框内容的抓取 并且实现比seleniu
  • Docker 安全必知:最佳实践、漏洞管理与监控策略

    容器安全是实施和管理像 Docker 这样的容器技术的关键方面 它包括一组实践 工具和技术 旨在保护容器化应用程序及其运行的基础架构 在本节中 我们将讨论一些关键的容器安全考虑因素 最佳实践和建议 容器隔离 隔离对于确保容器化环境的强大性和
  • C++ 中 const 和 constexpr 关键字解析:常量、函数和指针

    很多 C 的初学者看到 const 这个关键字的第一反应都是一头雾水 主要是因为 const 可 以出现在很多的位置 以及后面加入的 constexpr 更是常常感到困惑 今天就为大家一一解释出现它们的含义和以及作用 const 关键字 c
  • Go 语言运算符详解:加法、算术、赋值、比较、逻辑和位运算符全面解析

    运算符用于对变量和值执行操作 加号运算符 将两个值相加 如下面的示例所示 示例代码 package main import fmt func main var a 15 25 fmt Println a 尽管加号运算符通常用于将两个值相加
  • 软件测试|使用Python读写yaml文件,你会了吗?

    简介 YAML YAML Ain t Markup Language 是一种可读的数据序列化格式 它常用于配置文件和数据交换 Python 提供了许多库来处理 YAML 文件 在本文中 我们将探讨如何使用 PyYAML 库来读取和写入 YA
  • 《Spring 测试指南》:JPA、MockMvc 和 @SpringBootTest 详解

    测试 Spring 提供了一组测试工具 可以轻松地测试 Spring 应用程序的各个组件 包括控制器 服务 存储库和其他组件 它具有丰富的测试注释 实用程序类和其他功能 以帮助进行单元测试 集成测试等 JPA 测试 Spring JPA J
  • 软件测试|教你如何使用Python绘制出奥运五环旗

    简介 我们之前介绍过使用turtle来绘制正多边形 但是绘制正多边形只是turtle模块最基础的使用 我们可以使用turtle模块绘制出更多不一样的精彩图形 本文就来给大家介绍一个比较简单的turtle绘图实例 绘制奥运五环旗 初始化参数
  • Python 中多态性的示例和类的继承多态性

    单词 多态 意味着 多种形式 在编程中 它指的是具有相同名称的方法 函数 操作符 可以在许多不同的对象或类上执行 函数多态性 一个示例是 Python 中的 len 函数 它可以用于不同的对象 字符串 对于字符串 len 返回字符的数量 示
  • 软件测试|教你使用Python下载图片

    前言 我一直觉得Windows系统默认的桌面背景不好看 但是自己又没有好的资源可以进行替换 突然我一个朋友提醒了我 网络上的图片这么多 你甚至可以每天换很多个好看的背景 但是如果让我手动去设置的话 我觉得太麻烦了 我不如使用技术手段将图片下
  • 掌握 C# 变量:在代码中声明、初始化和使用不同类型的综合指南

    C 变量 变量是用于存储数据值的容器 在 C 中 有不同类型的变量 用不同的关键字定义 例如 int 存储整数 没有小数点的整数 如 123 或 123 double 存储浮点数 有小数点 如 19 99 或 19 99 char 存储单个
  • 测开和测试平台是否有存在的必要?

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 如何写好一个错误报告

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 摸爬滚打多年的打工人,总结了三条职场真理,绝不假大空!

    2024软件测试面试刷题 这个小程序 永久刷题 靠它快速找到工作了 刷题APP的天花板 CSDN博客 文章浏览阅读2 3k次 点赞85次 收藏11次 你知不知道有这么一个软件测试面试的刷题小程序 里面包含了面试常问的软件测试基础题 web自
  • 新手也能看懂的【前端自动化测试入门】!

    前言 最近在网上搜索前端自动化测试相关的文档 但是发现网上的文章都是偏使用 没有把一些基础概念说清楚 导致后续一口气遇到一些 karma Jasmine jest Mocha Chai BDD 等词汇的时候很容易一头雾水 这次一方面整理一下
  • 探索自动化测试断言:提升测试效率与质量的关键!

    前言 断言在自动化测试中起着关键的作用 它是验证测试结果是否符合预期的重要手段 如果在自动化测试过程中忽视了断言 那么这个测试就失去了其本质的意义 因为我们无法得知测试结果是否达到了预期的效果 因此 断言在自动化测试中的重要性不言而喻 那么
  • 做测试不会 SQL?超详细的 SQL 查询语法教程来啦!

    前言 作为一名测试工程师 工作中在对测试结果进行数据比对的时候 或多或少要和数据库打交道的 要和数据库打交道 那么一些常用的sql查询语法必须要掌握 最近有部分做测试小伙伴表示sql查询不太会 问我有没有sql查询语法这一块的文档可以学习
  • 程序员找工作难!拿到外包公司的 offer 我应该去么?

    引言 前一阵子有一个帖子引起了非常广泛的讨论 描述的就是一个公司的外包工作人员 加班的时候因为吃了公司给员工准备的零食 被公司的HR当场批评 这个帖子一发出来 让现在测试行业日益新增的外包公司备受关注 那么外包公司和非外包公司有什么样的不一
  • 外包干了2个月,技术倒退2年。。。

    先说一下自己的情况 本科生 20年通过校招进入深圳某软件公司 干了接近4年的 功能测试 今年国庆 感觉自己不能够在这样下去了 长时间呆在一个舒适的环境会让一个人堕落 而我已经在一个企业干了四年的功能测试 已经让我变得不思进取 谈了3年的女朋
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关
  • Airtest自动化测试工具

    一开始知道Airtest大概是在年初的时候 当时 看了一下官方的文档 大概是类似Sikuli的一个工具 主要用来做游戏自动化的 通过截图的方式用来解决游戏自动化测试的难题 最近 移动端测试的同事尝试用它的poco库来做自动化 看样子还不错

随机推荐

  • C++牛客知识点2

    提示 接上文 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 提示 这里可以添加本文要记录的大概内容 例如 随着人工智能的不断发展 机器学习这门技术也越来越重要 很多人都开启了学习机器学习 本文就
  • Appium 自动化自学篇 —— 初识Appium自动化!

    Appium 简介 随着移动终端的普及 手机应用越来越多 也越来越重要 而作为测试 的我们也要与时俱进 努力学习手机 App 的相关测试 文章将介绍手机自动化测试框架 Appium 那究竟什么是 Appium 呢 接下来我们一起来学习Pyt
  • 探索性能测试的奥秘:流程与工具大揭秘!

    一 性能测试 性能测试是通过自动化的测试工具模拟多种正常 峰值以及异常负载条件来对系统的各项性能指标进行测试 1 1 类别 性能测试包括负载测试 压力测试 基准测试等 1 1 1 负载测试 通过测试系统在资源超负荷情况下的表现 以发现设计上
  • Python接口测试框架选择之pytest+yaml+Allure!

    一 为什么选择pytest pytest完全兼容python自带的unittest pytest让单元测试更简单 能很好的管理测试用例 对于实现接口测试的复杂场景 pytest的fixture PDB等高阶用法都能实现需求 入门简单 对于代
  • 软件测试入门:静态测试

    什么是静态测试 顾名思义 这里的静态是指程序的状态 即在不执行代码的情况下检查软件应用程序中的缺陷 进行静态测试是为了仅早在开发的早期阶段发现程序缺陷 因为这样可以更快速地识别缺陷并低成本解决缺陷 它还有助于查找动态测试过程找不到的缺陷 与
  • 记一次性能优化,单台4核8G机器支撑5万QPS!

    前言 这篇文章的主题是记录一次Python程序的性能优化 在优化的过程中遇到的问题 以及如何去解决的 为大家提供一个优化的思路 首先要声明的一点是 我的方式不是唯一的 大家在性能优化之路上遇到的问题都绝对不止一个解决方案 如何优化 首先大家
  • 十几个软件测试实战项目【外卖/医药/银行/电商/金融】

    项目一 ShopNC商城 项目概况 ShopNC商城是一个电子商务B2C电商平台系统 功能强大 安全便捷 适合企业及个人快速构建个性化网上商城 包含PC IOS客户端 Adroid客户端 微商城 系统PC 后台是基于ThinkPHP MVC
  • 接口测试和功能测试的区别

    接口测试和功能测试的区别 本文主要分为两个部分 第一部分 主要从问题出发 引入接口测试的相关内容并与前端测试进行简单对比 总结两者之前的区别与联系 但该部分只交代了怎么做和如何做 并没有解释为什么要做 第二部分 主要介绍为什么要做接口测试
  • Jmeter执行接口自动化测试-如何初始化清空旧数据

    需求分析 每次执行完自动化测试 我们不会执行删除接口把数据删除 而需要留着手工测试 此时会导致下次执行测试有旧数据 我们手工可能也会新增数据 导致下次执行自动化测试有旧数据 下面介绍两种清空数据的方法 一 通过获取total数值进行清空 1
  • 通过Jmeter压测存储过程

    一 存储过程准备 1 建立一个空表 1 CREATE TABLE test data id NUMBER name VARCHAR2 50 age NUMBER 2 建立一个存储过程 CREATE OR REPLACE PROCEDURE
  • 15:00面试,15:06就出来了,问的问题有点变态。。。

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到8月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • 自动化测试、压力测试、持续集成

    因为项目的原因 前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api 下面将研究的成果展示给大家 希望对需要的人有所帮助 SoapUI 是什么 SoapUI 是一个开源测试工具 通过 soap http 来检查 调用 实现 W
  • Selenium4+python被单独定义<div>的动态输入框和二级下拉框要怎么定位?

    今天在做练习题的时候 发现几个问题捣鼓了好久 写下这篇来记录 问题一 有层级的复选框无法定位到二级目录 对于这种拥有二级框的选项无法定位 也不是 lt select gt 属性 我们查看下HTML 发现它是被单独封装在body内拥有 动态属
  • Newman+Jenkins实现接口自动化测试

    一 是什么Newman Newman就是纽曼手机这个经典牌子 哈哈 开玩笑啦 别当真 简单地说Newman就是命令行版的Postman 查看官网地址 Newman可以使用Postman导出的collection文件直接在命令行运行 把Pos
  • 分享十几个适合新手练习的软件测试项目

    说实话 在找项目的过程中 我下载过 甚至付费下载过 N多个项目 联系过很多项目的作者 但是绝大部分项目 在我看来 并不适合你拿来练习 它们或多或少都存在着 问题 比如 大部分项目是web项目 很难找到app项目 特别是有app安装包的项目
  • python+requests接口自动化测试框架实例详解教程

    1 首先 我们先来理一下思路 正常的接口测试流程是什么 脑海里的反应是不是这样的 确定测试接口的工具 gt 配置需要的接口参数 gt 进行测试 gt 检查测试结果 有的需要数据库辅助 gt 生成测试报告 html报告 那么 我们就根据这样的
  • 微服务测试是什么?

    微服务测试是一种特殊的 测试类型 因为它涉及到多个独立的服务 以下是进行微服务测试的一般性步骤 1 确定系统架构 了解微服务架构对成功测试至关重要 确定每个微服务的职责 接口 依赖项和通信方式 了解这些信息可以帮助您更好地规划测试用例和测试
  • 如何处理PHP开发中的单元测试和自动化测试?

    如何处理PHP开发中的单元测试和自动化测试 需要具体代码示例 随着软件开发行业的日益发展 单元测试和自动化测试成为了开发者们重视的环节 PHP作为一种广泛应用于Web开发的脚本语言 单元测试和自动化测试同样也在PHP开发中扮演着重要的角色
  • 【性能测试】Jenkins+Ant+Jmeter自动化框架的搭建思路

    前言 前面讲了Jmeter在性能测试中的应用及扩展 随着测试的深入 我们发现在性能测试中也会遇到不少的重复工作 比如某新兴业务处于上升阶段 需要在每个版本中 对某些新增接口进行性能测试 有时还需要在一天中的不同时段分别进行性能测试 如果一味
  • 【HttpRunner】接口自动化测试框架

    简介 2018年python开发者大会上 了解到HttpRuuner开源自动化测试框架 采用YAML JSON格式管理用例 能录制和转换生成用例功能 充分做到用例与测试代码分离 相比excel维护测试场景数据更加简洁 在此 利用业余时间研究