软件测试 接口测试 接口自动化框架封装 学习Httprunner封装思想

2023-11-06

目标是建立接口测试框架的思想。

1 什么是httprunner?

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

2 httprunner的设计理念

充分复用优秀的开源项目,不追求重复造轮子,而是将强大的轮子组装成战车。
遵循约定大于配置的准则,在框架功能中融入最佳工程实践。
追求投入产出比,一份投入即可实现多种测试需求。

3 安装httprunner

httprunner需要在python环境下才能使用。

3.1 安装python

安装python,查看python的版本,如下图所示:
在这里插入图片描述

3.2 使用pip命令安装httprunner

在命令提示符窗口输入:pip intall httprunner,会出现如下图错误:
在这里插入图片描述
原因:安装微软最新发布AutoML框架NNI出现问题,错误:无法卸载“ PyYAML”。 这是一个distutils安装的项目,因此我们无法准确确定属于该文件的文件,而这只会导致部分卸载。
解决方法:输入命令:pip install --upgrade nni --ignore-installed
在这里插入图片描述
再次输入:pip intall httprunner,成功,如下图所示:
在这里插入图片描述
查看httprunner的版本,如下图所示:
在这里插入图片描述

httprunner的5个基本命令,如下表:

命令 描述
httprunner 主命令,用于所有功能
hrun 用于运行yaml/json/pytest格式的测试用例
hmake 用于将yaml/json测试用例转化成pytest文件
har2case 用于将har文件转化为yaml/json/pytest测试用例
locusts 用于性能测试

4 应用httprunner

通过抓包工具生成har文件,导入Pycharm编辑器,生成yaml/json/pytest文件。

4.1 抓包,生成har文件

使用抓包工具Fiddler,抓包,导出har文件。
以微信公众平台为例子。
在Fiddler的Composer输入url,该url包括账号和密码,如下图所示:
在这里插入图片描述

选中包,File->Export Sessions->selected Sessions…,如下图所示:
在这里插入图片描述

选中HTTParchive v1.2,点击【Next】按钮,如下图所示:
在这里插入图片描述

文件命名为get_token,如下图所示:
在这里插入图片描述

4.2 生成yaml/json/pytest文件

把生成的har文件导入Pycharm,项目结构,如下图所示:
在这里插入图片描述

输入命令har2case .\get_token.har,生成json格式文件,如下图所示:
在这里插入图片描述
删除json文件中的access_token断言,因为token时效为10分钟,保存下来没有意义,删除如下内容:

,
	{
		"eq": [
			"content.access_token",
"45_zo0cI1hRQhNoUKfLxsDAyCw0ozZZB_lc7Gy62bj1H9uRnLlXshYqH_g5FBuWC3VlmNk8enL-hCsbN3qumyyg1mRTjRtuiriApZd6ZKeDxu0oikKn4yF4PgUautvgfciX5O07iIxsWJj7CCVTPQCfAEAZAM"
				]
	},
	{
		"eq": [
			"content.expires_in",
			7200
               ]
	}

删除内容如下图所示:
在这里插入图片描述

输入命令har2case .\get_token.har -2y,生成yml文件,如下图所示:
在这里插入图片描述

,因为token值有实效,此处做断言没有意义,删除断言,如下图所示:在这里插入图片描述

输入命令hmake .\get_token.yml,生成py文件,如下图所示:
在这里插入图片描述

5 yml测试用例结构

HttpRunner 测试用例包括且仅有两部分:
config:测试用例的公共配置部分,包括用例名称、base_url、参数化数据源、是否开启 SSL 校验等。
teststeps:有序步骤的集合。采用了 go interface 的设计理念,支持进行任意协议和测试类型的拓展(甚至包括 UI 自动化)

config: 配置
    name: 用例名称
    variables: 全局变量
teststeps: 步骤
-   name: 步骤名称
    request: 请求
        headers: 请求头
            Postman-Token: 
            User-Agent: PostmanRuntime/7.28.0
        method: 请求方式
        params: 请求参数
        url: 请求地址
    validate: 断言

重点记住!!!

name//名称
request: //请求
	headers: //请求头
	method: //请求方式
	data: //请求参数
	url: //请求路径
	cookie: //cookie信息
extract: //提取(通过content/body提取,是json提取。也支持正则提取,但是容易报错!)
validate: //断言
	equals: //相等
	str_eq(str(a) = str(b)):  //字符串相等
	contains: //包含

6 测试用例中的接口关联

在request标签下一个标签写extract标签提取返回值,通过content或body提取。
使用$变量名使用该值。
例如:

extract:
	access_token: content.access_token
//通过$变量名使用
	access_token: $access_token

抓包,生成har文件,将select_flat.har导入项目中,如下图所示:
在这里插入图片描述

打开Command Prompt,如下图所示:
在这里插入图片描述

输入命令har2case -2y get_token.har,生成yml文件,在request标签下一个标签写extract标签提取access_token,通过content或body提取,如下图所示:
在这里插入图片描述
在该测试用例第二步,使用该access_token,使用方式:access_token: $access_token,如下图所示:
在这里插入图片描述

7 动态参数

通过debugtalk.py的热加载的方法实现。
创建一个debugtalk.py,写函数,实现功能。然后在yml文件中通过${函数名()}的方式调用。

以微信公众平台编辑标签为例子。
第一,生成har文件。抓包,生成har文件,将select_flat.har导入testcase03中,如下图所示:
在这里插入图片描述
第二,生成yml文件。输入命令har2case -2y edit_flag.har,如下图所示:
在这里插入图片描述

第三,查看yml文件,将第一步的access_token设置为动态获取,供第二步acceess_token使用,如下图所示:
在这里插入图片描述
第二步使用acceess_token,如下图所示:
在这里插入图片描述

第四,如何改变name中的后的数字呢?使用动态参数热加载的方式。
在testcase03下新建debugtalk.py,如下图所示:
在这里插入图片描述
第五,运行yml文件,输入命令hrun edit_flag.yml,查看日志文件,如下图所示:
在这里插入图片描述
最后,使用debugtalk.py实现热加载成功。

8 环境变量

环境变量主要分为测试环境,开发环境,预发布环境和线上环境。不同之处就是url地址的值。
在yml文件中的config添加:

base_url: url

例如:在edit_flag.yml设置base_url,如下图所示:
在这里插入图片描述
即在下面的步骤中不需要写https://api.weixin.qq.com,如下图所示:
在这里插入图片描述
输入命令hrun edit_flag.yml,成功运行结果,如下图所示:
在这里插入图片描述

9 全局变量和局部变量

全局变量在整个yml文件都可以使用,局部变量仅在某一个步骤中使用。
config下的variables是全局变量。
teststeps下的variables是局部变量。

9.1 设置全局变量

例如:在edit_flag.yml文件,把appid,grant_type和secret设置为全局变量,如下图所示:
在这里插入图片描述

不换行的写法,如下:

variables: {appid: xxxxxx,grant_type: client_credential,secret: xxxxxxxxxxxx}

9.2 设置局部变量

例子:以edit_flag.yml例子,teststeps中的id设置为局部变量,如下图所示:
在这里插入图片描述

10 生成HTML格式的报告

格式如下:

hrun 项目名 --html=项目名/输出文件路径/文件名.html

查看项目名称,如下图所示:
在这里插入图片描述
回退到Python_basictrain目录,输入命令
hrun test_httprunner --html=test_httprunner/reports/report.html
查看report.html,如下图所示:
在这里插入图片描述
和pytest里面的pytest-html插件的报告格式一样。

11 httprunner常规关键字

httprunner的yml文件的结构,也是测试用例的文件结构,如下:

config: //配置
	name://测试用例名称
	variables: //全局变量
teststeps://步骤
	name://步骤名
	request://请求
		headers://请求头
		method: //请求方式
		data: //参数
		url: //请求路径
		cookie: //cookie信息
	extract: //提取(通过content或body提取)
	validate: //断言
		equals //相等
		ne //不相等
		str_eq //str(a)=str(b)
		lt //小于
		le //小于或等于
		gt //大于
		ge //大于或等于
		contains //包含

如下图所示:
在这里插入图片描述

12 httprunner项目架构

重新构建项目结构,如下图所示:
在这里插入图片描述

项目结构分析,如下表:

文件 描述
har 存放har文件
reports 存放报告
testcases 存放测试用例
api 存放yml文件,定义接口
data 数据驱动
testsuites 测试套件
.env 存放环境变量
.gitgnore 使用git做版本控制时,添加在此文件中的文件不会被git管理
debugtalk py实现热加载

分层架构,如下表所示:

层数 描述
第一层(api) 接口定义层。管理接口,每一个接口定义尽量能够单独运行。
第二层(testcases) 测试用例层。测试用例由一个或多个接口构成。
第三层(testsuites) 测试套件层。由一条或多条用例组成。

testcases层调用api层,使用api关键字。testsuites调用testcases层,使用testcase关键字。

12.1 har文件夹

通过抓包工具Fiddler,在Composer地址栏输入请求地址,如下图所示:
在这里插入图片描述

将抓到的三个包导入项目的har文件夹,如下图所示:
在这里插入图片描述

12.2 api文件夹

api文件存放yml格式文件。
进入har文件夹目录下,输入命令:har2case get_token.har -2y,转换为yml文件,如下图所示:
在这里插入图片描述
再将yml文件存放在api文件夹下,如下图所示:
在这里插入图片描述
将teststeps中的数据参数化,设置为全局变量,如下图所示:
在这里插入图片描述

提取access_token值,供其他接口使用,如下图所示:
在这里插入图片描述

12.3 testcases文件夹

testcases文件夹存放测试用例。
设置get_token_case.yml测试用例,将获取token值设置为一条测试用例,写上teststeps的name,如下图所示:
在这里插入图片描述

在httprunner_demo目录下,即项目的根目录,输入hrun testcases/get_token_case.yml,如下图所示:
在这里插入图片描述
编写查询标签的测试用例,查询标签之前必须要有access_token值,所以该测试用例分两步。第一步,查询access_token;第二步,查询标签,需要export引入access_token。编写测试用例yml文件,如下图所示:
在这里插入图片描述

12.4 testsuites文件夹

testsuites文件夹存放夹具,即多条测试用例。
testsuites文件存放测试用例,将testcases中的get_token_case.yml和select_flag_case.yml放到同一夹具test_suites.yml中,如下图所示:
在这里插入图片描述

在httprunner_demo目录下,输入hrun testsuites/test_suites.yml,如下图所示:
在这里插入图片描述
运行结果,如下图所示:
在这里插入图片描述

12.5 .env文件

在.env文件中可以写开发环境,测试环境,生产环境和线上环境等等。不同之处就是url不同,.env文件内容,如下图所示:
在这里插入图片描述
注意:.env文件是在跟目录下的。
调用.env文件中的变量格式如下:

${ENV(变量名)}

在api文件夹下的get_token.yml调用product_env变量,如下图所示:
在这里插入图片描述

在项目根目录httprunner_demo下,直接使用夹具,输入命令hrun testsuites/test_suites.yml,如下图所示:
在这里插入图片描述

运行结果,如下图所示:
在这里插入图片描述
问题:每次运行都要输入命令,不够快捷。
办法:在根目录新建all.py文件,代码如下:

import os

if __name__ == '__main__':
    os.system("hrun testsuites/test_suites.yml")

运行结果,如下图所示:
在这里插入图片描述

小结

hrun用于运行yaml/json/pytest格式的测试用例。
har2case用于将har文件转化为yaml/json/pytest测试用例。

yml测试用例结构重点记住

name//名称
request: //请求
	headers: //请求头
	method: //请求方式
	data: //请求参数
	url: //请求路径
	cookie: //cookie信息
extract: //提取(通过content/body提取,是json提取。也支持正则提取,但是容易报错!)
validate: //断言
	equals: //相等
	str_eq(str(a) = str(b)):  //字符串相等
	contains: //包含

在request标签下一个标签写extract标签提取返回值,通过content或body提取,实现接口关联。
通过debugtalk.py的热加载的方法实现动态参数。
环境变量是为了切换url地址。
全局变量在整个yml文件都可以使用,局部变量仅在某一个步骤中使用。
config下的variables是全局变量。
teststeps下的variables是局部变量。
har文件由抓包工具获得。
api文件夹存放yml文件,yml文件由har文件转换过来的,命令har2case xxx.har。
testcases文件夹存放测试用例。测试用例是yml文件。
testsuites文件夹存放夹具,即多条测试用例。testcases下存放testcases,testcases的值为参数用例yml文件。
.env文件存放环境变量。调用.env文件中的变量格式:${ENV(变量名)}

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

软件测试 接口测试 接口自动化框架封装 学习Httprunner封装思想 的相关文章

  • 2021年第十二届蓝桥杯javaA组国赛

    文章目录 试题 A 纯质数 试题 B 完全日期 试题 C 最小权值 试题 D 覆盖 试题 E 123 试题 F 二进制问题 试题 G 冰山 试题 H 和与乘积 试题 I 异或三角 试题 J 积木 以下均为个人想法和解题思路 如有错误或不足
  • openGL之API学习(五十二)透视分割 透视除法的执行位置

    根据文章https blog csdn net hankern article details 89220736 的分析 透视分割 又叫透视除法 执行的位置在栅格化阶段
  • Integer类型和int类型比较是否相等 == equals - Java

    非常经典的一个面试题 先说清楚一个 再来说另一个 用来判断两个变量之间的的值是否相等 变量就可以分为 基本数据类型变量 引用类型 1 基本数据类型的变量直接比较值 2 引用类型比较对应的引用指向的内存的首地址 equals只有引用数据类型有

随机推荐

  • docker的运行原理

    Docker 是一个开源的容器化技术 它能够让开发者将应用及其依赖打包到一个轻量级的 可移植的容器中 这个容器可以在几乎任何机器上一致地运行 要了解 Docker 的运行原理 我们首先要理解以下几个核心概念 容器 Container 容器是
  • android自定义控件onclick,android – 如何在ImageButton中设置onClick事件?

    我在 android中创建了一个图像按钮 但是当我点击该按钮时没有发生任何事情 我已经设置了所有属性 但仍然没有发生任何事情 所以 在我错的地方 你能帮助我吗 xml文件 android id id widget39 android lay
  • 产品数据管理系统框架与信息安全

    2 1引言 产品数据管理 Product Data Management PDM 以产品为中心 通过计算机网络和数据库技术 把企业生产过程中所有与产品相关的信息和过程集成起来 统一管理 使产品数据在其生命周期内保持一致 最新和安全 为工程技
  • Vue中如何进行数据缓存

    Vue中如何进行数据缓存 Vue是一款流行的前端框架 它提供了许多方便的功能来处理数据 其中一个非常有用的功能是数据缓存 数据缓存可以提高应用程序的性能 减少网络请求 提高用户体验 在本文中 我们将介绍Vue中如何进行数据缓存 并提供一些示
  • 用html实现一个静态登陆页面-可根据需求更改样式

    一 创建html文件 vscode下载相关插件 我们先选择一个文件夹创建login html 之前的文件命无所谓 之后就必须为html或者htm 在编辑改文件输入 且出现提示后按回车或按tab快捷生成基础代码 然后我们下载一个可以方便我们开
  • 解决数据库连接池连接mysql时,每隔8小时mysql自动断开连接的问题

    解决数据库连接池连接mysql时 每隔8小时mysql自动断开所有连接的问题 最近有个问题非常讨厌 我们的工程中使用自己的连接池连接mysql数据库 可mysql数据库每隔8小时就会自动断开所有链接 连接池就失效 需要重新启动tomcat才
  • 组合类、派生类 拷贝构造函数

    在派生类中如何写拷贝构造函数 一种形式 派生类拷贝构造函数名 对象p的引用 基类构造函数名 参数列表 如 student student student p stud p num p name p sex 注意 参数形式 是对象的引用 我们
  • java基础题实现猴子吃桃的问题

    一只猴子一天摘了许多桃子 第一天吃了一半 然后忍不住又吃了一个 第二天又吃了一半 再加上一个 后面每天都是这样吃 到第10天的时候 小猴子发现只有一个桃子了 问小猴子第一天共摘了多少个桃子 问题分析 第十天时只剩下一个桃子 又知道猴子每次吃
  • 【VB技巧】VB静态调用与动态调用dll详解

    摘 自 http lcx cc i 489 请注意 在以下语法格式中 请注意 函数名 的 大小写 静态与动态比较 静态调用简单 动态调用麻烦 静态调用占用资源多 动态调用占用资源少 正所谓鱼和熊掌不可兼得 静态调用定义 就是常用的申明API
  • Smart-tools 免费的开发工具箱

    Smart tools 免费的开发工具箱 背景介绍 作为一名开发人员 我希望有一款轻便且简洁的工具能够帮助自己快速解决一些日常开发的麻烦 因此 我创建了此网站 Smart tools 其目标是帮助开发人员提高工作效率 目前 本网站已支持20
  • FPGA--synplify+vivado综合 时钟路径优化Error

    项目场景 目前在做FPGA验证 使用到了synplify vivado的流程 rtl使用了synopsys的ip vivado似乎不能直接使用 而且vivado读取rtl文件时间也很长 需要3 4个小时才能读取完 主要是工程有点大 源文件比
  • 地址栏从输入url到页面展示经历了什么过程

    URL解析 浏览器会解析URL 确定其协议 例如HTTP或HTTPS 主机名和路径 如果主机名是一个域名 经过DNS服务器转换成对应的IP地址 建立连接 浏览器使用TCP协议通过IP地址建立到Web服务器的连接 在此过程中经历三次握手四次挥
  • 【C语言三种自定义类型】

    目录 前言 一 结构体 struct 一 结构体的声明 1 结构的声明 2 特殊的声明 不完全声明 3 结构体的自引用 4 结构体的初始化与赋值 5 结构体内存对齐 内存对齐规则 6 修改默认对齐数 7 结构体传参 二 位段 1 位段的声明
  • 关于js的多种去重方法

    js的多种去重方式 包括ES5 ES6去重 在JavaScript中 我们可以在很多场景下使用到去重功能 比如说在数组中 去掉数组中重复的数据 这是最常见的 以下是实现JavaScript数组去重的几种方式 利用双重for循环去重 第一种方
  • android window类

    Android的Window类 一 Android的GUI层并不复杂 它的复杂度类似于WGUI这类基于布局和对话框的GUI 与MFC QT等大型框架没有可比性 甚至飞漫魏永明的MiniGUI都比它复杂许多 您也许会问 这样简单的GUI如何实
  • AJAX与jQuery

    1 AJAX 1 1什么是AJAX 异步刷新技术 无刷新技术 刷新页面不跳转 在当前页面刷新 是局部的刷新 例如 地图的缩放和移动都是在当前页面完成的 没有刷新整个页面 无刷新的好处 只更新部分页面 有效利用带宽 提供连续的用户体验 提供类
  • kali安装中文输入法

    先输入一下命令 apt get install ibus 在输入 apt get install ibus pinyin 搜索ibus打开 然后就能看到了 win键 空格 可以切换输入法
  • oracle/mysql习题和答案(员工部门46道)

    Oracle基本操作练习题 使用表 员工表 emp create table emp empno number 4 not null 员工编号 表示唯一 ename VARCHAR2 10 员工姓名 job VARCHAR2 9 员工工作职
  • 基于LBPH算法进行人脸识别的毕设项目(一)

    摘要 在完成本科毕业设计时期 选题使关于人脸识别的一个题目 主要内容是通过海康威视的网络摄像头让视频数据在上传到笔记本电脑端进行实时的人脸检测与识别 识别出人脸则显示信息 应用场景为针对斑马线行人闯红灯的行为 通过对下位机实时视频数据的处理
  • 软件测试 接口测试 接口自动化框架封装 学习Httprunner封装思想

    文章目录 1 什么是httprunner 2 httprunner的设计理念 3 安装httprunner 3 1 安装python 3 2 使用pip命令安装httprunner 4 应用httprunner 4 1 抓包 生成har文件