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

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

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管理
debugtalkpy实现热加载

分层架构,如下表所示:

层数描述
第一层(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(变量名)}

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程介绍你是否在寻找机会进入自动化测试领域? 你是否渴望学习selenium webdriver + Java以及最新的框架和技术进行web自动化测试? 你是否感兴趣学习Selenium如何用在你现有的项目里的? 这门课带你从Selenium搭建环境开始讲起,然后学习selenium,TestNG, logback, maven, jenkins。 我们假设学员没有任何自动化经验,来设计的这套课程。每个课题都从最基础的开始讲起。Selenium相关的该覆盖的课题都覆盖了。 例子都是来自于真实的web应用项目,帮助你理解不同的组件怎么用上自动化,这将展示给你一个行业层面的框架,增加自信心。 全网没有其他课程像这门课涵盖到如此之深的细节。 您将会学到什么 学完课程以后,你将拥有完整的Selenium Webdriver知识 你将具备从头开始设计Page Object、Page Factory、DATADRIVEN等搭建自动化框架的能力 用100多个实例对Selenium现实场景应用进行深入理解 全面了解TestNG, Maven, Jenkins, HTML报告,多浏览器并行测试 了解数据库测试和使用Selenium进行性能测试 你将彻底了解testNG框架 你从网上随便选择一个网站,都可以实现自动化,用所有可能的测试用例进行自动化测试 将提高你的编码技能,以编写最优化的自动化测试用例代码 你基本可以搞定任何Selenium面试,并能从设计阶段开始领导整个Selenium自动化项目 你应该能够使用应用程序的GUI来验证数据完整性 你将能够创建漂亮的报告来打动客户或领导 更深入地理解自动化指南和代码质量标准 会附带一个练习网站,可以用上所有可用的WebDriver功能,实现自动化 【适合人群】 软件手动测试人员想转为自动化测试的人员 自动化软件测试人员想加强专业技能的 刚毕业学生想从事软件行业 QA 组长或项目经理 【课程优势】 学完课程以后,你将拥有完整的Selenium Webdriver知识 【讲师介绍】 资质介绍: 12年以上软件测试工作经验,其中7年以上自动化测试开发经验 新书“Python3+Selenium3自动化测试项目实战”作者

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值