Httprunner(24)_知识点总结

Httprunner_知识点总结

 

 

环境安装:
通过pycharm中安装httprunner,或者通过pip命令(pip install httprunner==2.5.7)直接下载;建议下载httprunner 2.5.7版本
常用关键字:
config: 用例基本配置信息
name:测试用例名称配置
base_url:测试主机地址
test:测试步骤
request:请求信息配置
url:请求地址
method:请求方式
params:url参数
headers: 请求头部
extract: 提取 # headers的头提取通过headers.Content-Type;响应正文的提取通过content.id,或者通过正则提取
validate: 断言 # 引用变量 $变量名
export/output: 输出,可跨文件传输
variables: 变量
=============================================================================
1,yaml文件示例:
1.1,对象类型:
使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map
1.2,数组:
使用(-) 表示数组,同一缩进的所有项属于一个数组
1.3,纯量:
根据纯量的例子,由上往下,纯量包含:字符串整数浮点数布尔值Null(用~表示) 时间日期
其中:用~表示null ;时间、日期采用IS08601格式
1.4,对象、数组嵌套:
- id: 1
name: xiaoming
- id: 2
name: xiaoli
=============================================================================
2,httprunner的yaml文件的格式:
2.1,api层的yml格式如下:
# api下面的yml文件都是顶格写的,没有- config - test
name: 百度
base_url: https://www.baidu.com
request:
url: /s
method: GET
params:
wd: $word # 有testcase 传递给api
headers:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
validate: # 简单的断言
- eq: [status_code,200]
2.2,testcases用例层格式如下:
- config: # 配置信息
name: 测试湖南新梦想官网 # 测试用例名称
base_url: http://www.hnxmxit.com # 主机地址

- test: # 测试步骤
name: 接口名称 湖南新梦想主页接口 # 测试步骤名称
request: # 请求
url: /
method: GET
validate: # 断言
- eq: [status_code,200]
2.3,testsuites套件层格式如下:
# 套件层
config:
name: access_token_suite

# 写法1
#testcases:
# get_token: # 自定义编写测试的名称
# testcase: testcases/demo17_token_case.yml
# get_tag:
# testcase: testcases/demo18_get_tag_case.yml

# 写法2
testcases:
- name: 获取token
testcase: testcases/demo17_token_case.yml
- name: 获取tag
testcase: testcases/demo18_get_tag_case.yml
==============================================================================
==============================================================================
==============================================================================
1,环境变量:.env 变量名=变量值;在项目的根目录下添加 .env
引用:${ENV(base_url)} ; 作用:用来做固定配置信息(如:主机地址、端口等)

2,辅助函数debugtalk.py 在项目的根目录下添加 debugtalk.py
引用: ${函数名} ; 作用:复杂的逻辑可以编写代码用来调用

3,发送GET请求可通过params添加参数
4,发送POST请求可通过发送的数据选择json/data/body/添加数据
5,可通过headers 添加头部信息
6,完成初始化和清理工作(hook: ): setup_hooks: teardown_hooks: (可放用例层级或者用例步骤层级)

7,获取响应
7.1,获取响应行,响应头
extract: # 提取值存储到变量
- code: status_code
- info: reason
- header_Content: headers.Content-Type
7.2,获取响应正文
extract:
- title: <title>(.+?)</title> # 可以使用正则表达式提取
- hao123: https://www.(.+?)23.com
validate:
# - str_eq: [$title,"百度一下,你就知道"] # 断言会乱码需要加上headers头部信息可解决
- str_eq: [$hao123,"hao1"] # 比较两个字符串
7.3,获取响应正文 json格式
extract:
- id: content.tags.0.id # 通过jsonpath提取
- name: content.tags.1.name
validate:
- eq: [$id,2]
- eq: [$name,newdream]
注: content:表示响应正文;可通过content.tags.1.name 取响应正文的值
============================================================================
8,关联的实现
可通过extract提取值(比如:- token),然后再下一个接口中引用该变量 $token
============================================================================
9,常用断言:validate: 可以对响应数据做多个断言验证 # 引用变量 $变量名
方法一:# 引用变量 $变量名 做断言
validate:
- eq: [$id,2]
- eq: [$name,newdream]
方法二: 多种断言的写法
validate:
- eq: [status_code,200] # 断言相等的4种写法
- equals: [status_code,200]
- is: [status_code,200]
- ==: [status_code,200]
注: 断言一般用在测试用例步骤层里面
============================================================================
10,export/output: 可以输出变量的值 ;可跨文件传输
在config下面添加 export/output: - 变量名
============================================================================
11,hook机制:完成初始化和清理工作 (相当于unittest框架中的setup,teardown函数)
使用步骤:
1.一般在debugtalk.py中编写相应的初始化及环境清理函数
2.在测试用例文件中的config 及test 中根据需要加入setup_hooks、teardown_hooks
setup_hooks:
- ${setup_start(我是传入的参数)}
teardown_hooks:
- ${teardown_close(我是传入的参数)}
注:可放在用例层级或者步骤层级
============================================================================
12,忽略跳过用例:
skip: 无条件跳过
skipIf: True 判断条件成立时跳过
skipUnless: False 判断条件失败时跳过 (可通过写py文件引用函数)
注:上述关键字只能在test 测试步骤中使用
============================================================================
13,调用api模块中的接口:
api下面的yml文件都是顶格写的没有- config - test;
在测试步骤层级中引用api文件使用:api: api路径下的yml文件
============================================================================
14,编码 转成中文
方法一:
添加headers头部信息
# User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) me/90.0.4430.212 Safari/537.36
# Accept: text/html,application/xhtml+xml,application/xml/signed-exchange;v=b3;q=0.9
# Accept-Encoding: gzip, deflate, br
# Accept-Language: zh-CN,zh;q=0.9
方法二:
1,先通过py函数进行编码转换
def to_utf8(str):
return str.encode("iso8859-1").decode("utf-8")
def to_iso8859(str):
return str.encode("utf-8").decode("iso8859-1")
2,通过在yml文件中调用函数进行转码
# 1,将预期结果转换成8859编码
variables:
- title_1: 百度一下,你就知道 # 注意不能直接调用函数转码
- title_8859: ${to_iso8859($title_1)}
extract:
- title: <title>(.+?)</title>
# 2,将提取的内容转成utf-8
validate:
- eq: [status_code,200]
- eq: ["${to_utf8($title)}","百度一下,你就知道"] # 断言 以utf-8编码
# - eq: [$title,$title_8859] # 断言 以8859编码
============================================================================
15,httprunner分层:api层<testcases层<testsuites层
接口定义(单个接口):api层 可以编写多个yml文件的接口
测试用例(用例层):testcases层 可以调用api层的多个yml文件接口;也可以引用testcases层的别的yml文件(通过用例层调用用例层,需要使用output/export进行返回,在使用extract进行提取)
测试套件(套件层):testsuites层 可以调用testcases层的多个yml文件

测试用例层引用api层:
# 调用api模块中的接口
- config:
name: 验证百度接口

- test:
name: 执行百度搜索接口
api: api/baidu.yml

测试套件层引用testcases层:
config:
name: access_token_suite

testcases:
- name: 获取token
testcase: testcases/demo17_token_case.yml
- name: 获取tag
testcase: testcases/demo18_get_tag_case.yml

注:可以在testcases层调用多个api层的接口,可以做成几个子套件
在testsuites层做个主套件,可以调用多个testcases层的用例;
============================================================================
16,参数化传递:
第一种:通过 variables 变量传递参数;套件层 传给 用例层 再传给 api层 (但每次只能传递一个参数)
第二种:通过parameters 传递参数;search_word-result: 通过 - 可以分割成两个变量(result可用于做断言);(可以同时传递多组参数)如:[ ['猫','猫_百度搜索'],['老虎','老虎_百度搜索'] ]
第三种:通过debugtalk.py文件写函数返回参数,然后在测试套件中调用 py函数
第四种:通过csv文件传递参数,在csv文件中第一行写列名,下面写参数;引用方式:${P(csv文件路径)}
第五种:通过Faker库写py函数,返回值,然后在测试套件中调用 py函数
def get_random_name(num=5):
f = Faker(locale='zh_CN')
name_list=[]
for i in range(0,num):
name_list.append(f.phone_number())
return name_list
第六种:通过py文件库连接mysql,然后查出数据(查出的数据为tuple),在转成 list;
============================================================================
17,times:参数化及重复执行
times: 5 在用例步骤层加上times参数 可以实现重复执行5次
============================================================================
18,录制工具:
通过抓包工具抓取请求并保存成 .har文件,然后通过命令 har2case 路径 -2y,转成yml文件
============================================================================
19,脚手架:一键搭建 命令:hrun --startproject 项目名称
============================================================================
20,设置代理
在debugtalk.py文件中设置代理,如下;
# os.environ["http_proxy"] = "http://127.0.0.1:8888"
# os.environ["https_proxy"] = "https://127.0.0.1:8888"

============================================================================
21,证书认证
在用例层的config下面添加如下信息
verify: False 跳过证书验证
============================================================================
22,运行方式:
方法一:
通过命令行运行:httprunner 根目录下的路径 ./name/name.yml
方法二:
作为软件包集成到自己的项目中,通过类名.方法调用,这种方式同样支持参数化
from httprunner.api import HttpRunner
runner = HttpRunner(failfast=False)
runner.run("XX.yml")
23,logs日志(json)
运行后输出json格式的日志信息--日志保存在logs目录下
hrun ./name/name.yml --save-tests

posted @ 2023-10-16 22:22  奔跑在路上you  阅读(142)  评论(0编辑  收藏  举报