目录
1.用例准备
1.1生成用例
1.通过fiddler捕捉get_token并转换文件格式为.yml。操作方法见HttpRunner使用文档案例录制并转换生成测试用例过程出现的问题及解决办法
2.将用例放到已生成好的测试用例结构目录中,目录的生成见:Httprunner项目文件和测试用例组织
3.为了阅读方便,可以使用Notepad++或者PyCharm来打开此用例文件。
4.打开后的原始文件如下所示,并在脚本中加了一些注释:
config:
name: testcase description #必填,测试用例名称,测试报告以此作为标题
variables: {} #非必填,全局变量,作用域为整个testcase
teststeps:
- name: /api/get-token #必填,测试步骤名称
request: #必填,测试步骤请求信息
headers: #请求头中的信息
Content-Type: application/json
Postman-Token: cc0a84c0-7c4c-4634-8d36-7bd58563045a
User-Agent: PostmanRuntime/7.24.0
app_version: 2.8.6
device_sn: FwgRiO7CNA50DSU
os_platform: ios
user_agent: iOS/10.3
json: #请求体body中的信息
sign: 9c0c7e51c91ae963c833a4ccbab8d683c4a90c98
method: POST #请求类型
url: http://127.0.0.1:5000/api/get-token #请求地址
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- content.success
- true
- eq:
- content.token
- dKbNLKokkvNkq8hj
1.2用例参数化
1.现在我们需要将device_sn、app_version 和 os_platform 这三个参数和请求体中的sign来进行参数化
首先,在config中的variables模块申明变量、并赋值;
其次,在用例部分引用变量($var)或调用函数赋值(${func($var)});
再次,将自定义函数写在debugtalk.py中。
最后
debugtalk.py函数中定义相关变量和参数,详细内容参见httprunner中文使用手册的hook机制
此文件在自动生成的结果目录的根目录中:
参数化后的用例如下所示:
config:
name: 获得 token with $os_platform, $app_version #必填,测试用例名称,测试报告以此作为标题
variables: #非必填,声明全局变量,并赋值,作用域为整个testcase
device_sn: ${gen_random_string(15)} #生成 15 位长度的随机字符串并赋值给 device_sn,函数在debugtalk.py中定义
os_platform: 'ios'
app_version: '2.8.6'
teststeps:
- name: /api/get-token #必填,测试步骤名称
request: #必填,测试步骤请求信息
headers: #请求头中的信息
Content-Type: application/json
Postman-Token: cc0a84c0-7c4c-4634-8d36-7bd58563045a
User-Agent: PostmanRuntime/7.24.0
app_version: $app_version
device_sn: $device_sn
os_platform: $os_platform
user_agent: iOS/10.3
json: #请求体body中的信息
sign: ${get_sign($device_sn, $os_platform, $app_version)} #根据签名算法生成 sign 值,函数在debugtalk.py中定义
method: POST #请求类型
url: http://127.0.0.1:5000/api/get-token #请求地址
validate:
- eq:
- status_code
- 200
- eq:
- headers.Content-Type
- application/json
- eq:
- content.success
- true
1.3自定义函数
加入自定义函数后的debugtalk.py文件如下所示:
import os
import random
import string
import time
import hmac
import hashlib
SECRET_KEY = "DebugTalk"
def sleep(n_secs):
time.sleep(n_secs)
def gen_random_string(str_len): #生成 15 位长度的随机字符串并赋值给 device_sn
random_char_list = []
for _ in range(str_len):
random_char = random.choice(string.ascii_letters + string.digits)
random_char_list.append(random_char)
random_string = ''.join(random_char_list)
return random_string
def get_sign(*args): #根据签名算法生成 sign 值
content = ''.join(args).encode('ascii')
sign_key = SECRET_KEY.encode('ascii')
sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest()
return sign
2.执行用例
执行hrun D:\httprunner\Api_api\testcases\get_token_new.yml,执行此单个用例查看结果
执行完成后,到reports目录下可查看输出的报告文件
打开报告文件查看到的内容如下: