文章目录
引言
接口自动化测试的实现方案有很多,没有编程基础的可以使用 Postman+Newman 或 Jmeter+Ant 来实现,有编程基础的则可以结合自动化测试框架来实现。基于Python的测试框架有:Unittest、HttpRunner、Robot Framework、Pytest等,本文主要是讲解HttpRunner,是当下比较流行且实用的框架,可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。
注:
本文篇幅较长,主要是展示了HttpRunner的框架特性,流程、结构,用例组织和快速上手教程。如果消化了本文的内容,基本上可以入门了,接下来就是需要不断的大量实践了
一、HttpRunner的介绍
HttpRunner 是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份 YAML/JSON 脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求
二、HttpRunner的设计理念
1、追求不重复造轮子
2、遵循 约定大于配置 的准则
3、追求投入产出比
三、HttpRunner的核心特性
1、继承 Requests 的全部特性
2、采用 YAML/JSON 的形式描述测试场景,保障测试用例描述的统一性和可维护性
3、借助辅助函数(debugtalk.py),在测试脚本中轻松实现复杂的动态计算逻辑
4、支持完善的测试用例分层机制,充分实现测试用例的复用
5、测试前后支持完善的 hook 机制
6、响应结果支持丰富的校验机制
7、基于 HAR 实现接口录制和用例生成功能(har2case)
8、结合 Locust 框架,无需额外的工作即可实现分布式性能测试
9、执行方式采用 CLI 调用,可与 Jenkins 等持续集成工具完美结合
10、测试结果统计报告简洁清晰,附带详尽统计信息和日志记录
11、极强的可扩展性,轻松实现二次开发和 Web 平台化
四、HttpRunner的框架流程
五、HttpRunner快速上手
1、环境准备
(1)、运行环境:建议使用 Python 3.4 及以上版本
(2)、安装方式:pip install httprunner
(3)、安装校验:打开cmd,输入以下命令进行校验,出现版本号则说明安装成功
C:\Users\luoluo>hrun -V
2.5.7
C:\Users\luoluo>har2case -V
0.3.1
2、脚本录制
为了简化测试用例的编写工作,可以通过抓包工具,如Fiddler、Charles 等进行接口录制,然后导出为标准通用的 HAR 格式(HTTP Archive),再通过 HttpRunner 将 HAR 格式的数据包转换为YAML/JSON格式的测试用例文件,对应的转换工具为:har2case
下面以Fiddler为例,进行脚本录制和导出
操作步骤:
选中需要转换的接口(可多选或全选),点击菜单中的Flie->Export Sessions->Selected session(选择HTTP Archive v1.1类型)保存至本地即可
用Charles录制的方法大致相同,操作步骤为:选中需要转换的接口(可多选或全选),点击右键,在悬浮的菜单目录中点击【Export…】,格式选择HTTP Archive(.har)后保存即可
3、脚本生成
(1)、将HAR转换为默认的JSON脚本,转换命令为:har2case filename.har
C:\Users\luoluo\Desktop>har2case test1.har
INFO:root:Start to generate testcase.
INFO:root:dump testcase to JSON format.
INFO:root:Generate JSON testcase successfully: test1.json
(2)、将HAR转换为YAML脚本,转换命令为:har2case -2y filename.har
C:\Users\luoluo\Desktop>har2case -2y test1.har
INFO:root:Start to generate testcase.
INFO:root:dump testcase to YAML format.
INFO:root:Generate YAML testcase successfully: test1.yml
此时可以看到本地已经生成了对应格式的文件
我们分别来打开看一下里面的内容,由于隐私问题,暂时把实际域名做了修改:
下面代码是.json格式的,
{
"config": {
"name": "testcase description",
"variables": {
}
},
"teststeps": [
{
"name": "/api/trend/webinfo/getnavs",
"request": {
"url": "{
{HOST}}/api/trend/webinfo/getnavs",
"params": {
"gender_id": "72105",
"no_cache": "1"
},
"method": "GET",
"headers": {
"Sec-Fetch-Dest": "empty",
"Authorization": "",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36",
"Content-Type": "application/json;charset=utf-8;",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-Mode": "cors",
"If-None-Match": "W/\"9b200f8fd6b4e23ffd2c77a44e50ba275fdb123c\""
}
},
"validate": [
{
"eq": [
"status_code",
200
]
},
{
"eq": [
"headers.Content-Type",
"application/json"
]
},
{
"eq": [
"content.status_code",
200
]
},
{
"eq": [
"content.message",