前言:
之前写了一篇关于接口自动化框架apin入门使用是文章,主要介绍了apin的安装以及用例编写的方法,今天这篇文章来给大家聊聊,apin中的一些高级使用技巧。比如依赖接口的变量提取和引用,用例断言,以及函数工具的使用。如果没看过上一篇的小伙伴请点击链接 接口自动化神器 apin(一), 快速入门篇
一、变量提取和引用
变量提取和引用主要是为了解决接口之间的参数依赖问题
使用场景:接口A的参数中需要使用接口B返回的某个数据,那么就要在请求B接口之后,提取数据保存,给请求A接口时使用。
1、变量提取
在用例集或用例数据中,通过extract字段指定要提取的变量。
-
语法
"extract": { "变量名": ("变量保存的级别", "提取方式", "提取表达式"), }
-
变量名:保存数据的变量名
-
变量保存的级别:
-
EVN: 全局变量,settings文件中的EVN
-
env : 为局部变量(只对当前用例集有效):用例集的env字段
-
-
提取方式
-
re: 正则表达式提取
-
jsonpath: 通过jsonpath提取
-
-
-
案例
"extract": { # 通过jsonpath提取 "token": ("env", "jsonpath", "$..token"), # 通过正则表达式提取 'member_id': ("env", "re", r'"id":(.+?),') }
2、变量引用
-
变量引用表达式:$}
-
引用优先级
优先引用该用例的局部变量(用例的env中的变量),如果局部变量不存在,则会引用全局变量(setting.py中ENV中保存的变量)。
二、用例断言
关于测试用例预期结果和实际结果的比对的,apin中封装了一个verification字段,只需要在verification中定义预期结果,实际结果提取表达式,和断言的方法,即可实现用例的断言!
1、基本语法
verification = [
[断言方式, 预期结果, 实际结果]
]
2、断言方式
apin中目前支持两种断言方式:
-
1、断言相等 :eq
预期结果和实际结果相等
verification = [ ['eq', 预期结果, 实际结果] ]
-
2、断言包含:contians
实际结果中包含预期结果的内容
verification = [ ['contians', 预期结果, 实际结果] ]
3、实际结果获取
关于断言的实际结果提取,需要使用
V{{表达式}}
来进行提取,表达式支持jsonpath和正则表达式两种提取方式方式。
-
1、正则表达式提取
# 通过正则表达式来提取实际结果中的msg字段。 verification = [ ['contians', {'msg':"OK"}, {"msg": "V{{msg:'(.+?)'}}"}] ]
-
2、通过jsonpath提取
# 通过jsonpath来提取实际结果中的msg字段。 verification = [ ['contians', {'msg':"OK"}, {"msg": 'V{{$..msg}}'] ]
4、HTTP状态码的断言
上述两种方式,以可提取结果返回的数据,那如果要断言接口http请求的状态码呢?apin中也提供了一个内置的字段名,来表示http状态码
# 断言接口请求的http状态码是否等于200
verification = [
['eq', 200, 'status_code']
]
三、函数工具的使用
apin支持在测试用例中调用自定义的函数来处理数据,如对数据进行加密处理、随机生成数据等等。
1、自定义函数
apin创建的项目中有一个funcTools.py,在该文件中可以自己定义函数,然后在用例中通过F{xxx()}来调用。
-
案例:funcTools.py文件
import hashlib,random
def md5_encrypt(msg):
"""md5加密"""
md5 = hashlib.md5()
md5.update(msg.encode("utf8"))
return md5.hexdigest()
def rand_phone():
"""随机生成手机号的函数"""
import random
for i in range(8):
phone += str(random.randint(0, 9))
return str(phone)
def get_timestamp():
"""获取时间戳"""
return time.time()
-
注意点:函数处理完的数据需要return返回哦
2、用例中引用函数
-
引用表达式:F
-
demo1:用例数据中的user,引用前面定义的rand_phone函数
{
'title': "普通用户注册",
'interface': "member/register",
"method": "post",
'json': {"user": "F{rand_phone()}", "pwd": "lemon123"},
}
-
demo2:用例数据中的pwd,引用前面定义的md5_encrypt函数对密码进行md加密
- 注意点:引用的函数,传递的参数如果是变量,则不需要在变量应用表达式外加引号
{
'title': "普通用户登录",
'interface': "member/login",
"method": "post",
'json': {"user": "13109877890", "pwd": "F{md5_encrypt('lemon123')}"},
}
# 引用函数,变量作为参数传递
{
'title': "普通用户登录",
'interface': "member/login",
"method": "post",
'json': {"user": "${{user}}", "pwd": "F{md5_encrypt(${{pwd}})}"},
}
四、项目全局配置
项目中的setting.py文件,是整个项目的配置文件,接下来详细介绍一下项目的配置选项。
1、debug模式运行
项目创建之后,默认运行是开启了debug模式,运行过程中会输出详细的debug级别日志。如果不像看运行日志,则将settings中的DEBUG设置为Flase即可。
# 是否开启debug模式:True为debug模式,False为关闭debug模式
DEBUG = False
2、ENV全局的变量
将settings.py中的ENV可以设置项目全局配置,
-
全局的域名
推荐在ENV中设置全局的host,不建议在每一个测试用例中去设置host,切换测试环境切换也更方便(如果用例数据中没有自己定义host,会自动引用全局的host地址)
ENV = { "host":"http://WWW.XXX.com/", }
-
全局的请求头
如果项目接口有必传的请求头数据,也可以直接在ENV中设置(如果用例数据中没有定义时,也会自动引用全局的headers)。
ENV = { "host":"http://WWW.XXX.com/", "headers": {"UserAgent": "apin-test01"} }
-
全局的测试数据
如果用例中需要引用事先准备好的一些测试数据,如测试账号、密码之类的
如:定义一个测试账号、测试密码、用户id
ENV = { "host":"http://WWW.XXX.com/", "headers": {"UserAgent": "apin-test01"}, "user":"musen@qq.com", "pwd":"lemon123", "user_id":111 }
测试用例中直接使用${{}}即可引用,
# 引用user和pwd { 'title': "登录", 'interface': "member/register", "method": "post", 'json': {"mobile_phone": "${{user}}", "pwd": "${{pwd}}"}, }
-
注意点:如果局部环境和全局变量重名,优先引用局部变量。
-
3、测试报告
通过setting中的TEST_RESULT,可以配置测试报告的输出信息。
TEST_RESULT = {
# 测试报告文件名
"filename": "report.html",
# 测试人员
"tester": "测试员",
# 报告标题
"title": "测试报告",
# 报告样式 :有1,2,三个样式
"templates": 1,
# 报告描述信息
"desc": "XX项目测试生成的报告"
}
4、邮件推送测试结果
如果要将测试结果发送到指定的邮箱中,则在settings.py添加EMAIL配置即可
EMAIL = {
# smtp服务器地址
"host": 'smtp.qq.com',
# smtp服务器端口
"port": 465,
# 邮箱账号
"user": "xxxx@qq.com",
# smtps授权码
"password": "xxxx",
# 收件人列表
"to_addrs": ['xxx@qq.com','xxx@qq.com'],
# 是否发送附件
"is_file": True
}
5、测试结果推送到钉钉群
如果要将测试结果推送到钉钉群,则在settings.py添加DINGTALK配置即可。
DINGTALK = {
# 钉钉机器人的Webhook地址
"url": "",
# 如果钉钉机器人安全设置了关键字,则需要传入对应的关键字
"key": None,
# 如果钉钉机器人安全设置了签名,则需要传入对应的密钥
"secret": None,
# 钉钉群中要@人的手机号列表,如:[137xxx,188xxx]
"atMobiles": [],
# 是否@所有人
"isatall": False
}
6、测试结果推送企业微信群
如果要将测试结果推送到企业微信群,则在settings.py添加WECHAT配置即可。
WECHAT = {
# 企业微信群ID
"chatid": "",
# 调用企业微信API接口的凭证
"access_token": ""
}
欢迎来到testingpai.com!
注册 关于