Debugtalk的使用场景及特点
- 在做接口的时候会有功能无法实现,就需要开发对应功能
- 创建简单功能实现系统需要完成的功能操作
- 将全局变量或者自定义变量放在里面
来源网路.png
使用debugtalk内置函数
- 内置函数sleep
import time
def sleep(n_secs):
time.sleep(n_secs)
- 在login请求中添加等待时间,使用sleep方法
直接使用debugtalk里面的函数,不需要在需要的yaml文件中引用,因为每次执行前会自动到debugtalk文件中搜索对应函数
request:
headers:
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
method: GET
url: https://mubu.com/
teardown_hooks:
- ${sleep(5)}
测试报告.png
debugtalk创建函数并使用
- 创建一个函数,生成随机数
def get_timestamp():
return str(int(time.time()*1000))
- 在编辑title的请求中添加一个时间随机数
variables:
documentId: 28nRA1U6DVz
memberId: "1576021112575"
userId: "3878131"
new_title: "New_title_Sam${get_timestamp()}"
data:
message:
content:
- name: nameChanged
original: test123
title: ${new_title}
documentId: ${documentId}
type: CHANGE
version: 3
viewType: OUTLINE
- 执行以后就能在title的后面生成一个以日期字符串的随机数
hrun testcases/change_title.yml
报告样式.png
网站样式.png
创建一个函数打印请求参数值
- 创建打印函数
def print_parameter(doc_id):
print("the paramter is: {}".format(doc_id))
- 在请求中使用
request:
headers:
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: same-origin
Sec-Fetch-User: ?1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36
method: GET
url: https://mubu.com/doc${documentId}
setup_hooks:
- ${print_parameter($documentId)}
extract:
memberId: "memberId: '(.*)'"
- 执行请求并显示结果
hrun testcases/create_doc.yml
log.png
debugtalk使用总结:
可以实现如下的功能
1.数据初始化
2.数据库连接
3.函数的创建
使用环境变量ENV保存参数
官方文档介绍
https://cn.httprunner.org/prepare/dot-env/
-`将常用的参数比如环境信息放在ENV文件中
USERNAME=**
PASSWORD=**
image.png
- 在请求体的前面创建参数并引用环境变量值
这里使用ENV关键字表示参数是从ENV文件夹的环境变量中取值
config:
name: testcase login the mubu
variables:
password: ${ENV(PASSWORD)}
phone: ${ENV(USERNAME)}
verify: False
- 将我们使用的参数进行替换
- name: /api/login/submit
request:
data:
password: ${password}
phone: ${phone}
- 执行并查看结果是生效的
hrun testcases/login.yml
log.png
测试报告.png
报告详情.png
参数化的实现
官方文档的介绍
1.官方介绍使用3中形式
2.第1种是直接将参数按照集合形式写出来,这种主要用于参数少,使用参数比较容易修改
3.第2种是将参数写到csv文件中,按照字典形式存放
4.第3种是通过函数的形式,不固定的参数通过函数计算实现,比如时间形式,随机数形式等
https://cn.httprunner.org/prepare/parameters/
- 示例如果我们有多组的用户登录,就需要将测试的时候参数化
- 下面会将所有的参数放进csv文件中进行保存
- 数据从csv文件中读取并发送请求
创建csv文件
- 在根目录创建一个文件夹data存放csv
-
创建csv文件
image.png
添加账户信息
- 添加是按照key,value形式创建
- 数据由逗号(,)分隔
屏幕截图.png
在testsuites创建用例集
image.png
创建suite脚本信息
- config信息主要描述用例集信息
- testcases下面可以创建多个用例集合,每个测试用例-分隔
- testcase标记需要执行的测试用例名称,这里login.yml
- parameters下面就是包含的测试数量实现方式,这里使用的是读取csv文件
- 格式是需要大写字母P,然后圆括号(),包含csv文件的相对路径
- 重点是参数名:phone-password这2个参数是需要跟csv文件表头一致,顺序也需要一致。然后每个参数
中间是使用中杠(-)进行分隔。比如csv文件中是按照phone,password的表头,那这里就按照phone-
password的形式表示
config:
name: login with different user
verify: False
testcases:
-
name: login system wit user
testcase: testcases/login.yml
parameters:
phone-password: ${P(data/account.csv)}
执行test suite的脚本
hrun testsuites/login_multipulte_user.yml
查看报告
-
报告中会显示多个登陆信息
报告截图.png -
查看失败报告详细信息
报告详情.png 因为2组登陆的信息是含有1组错误的账号密码,所以会有错误的内容。