福永镇网站建设,在家做的打字兼职的网站,没有网站服务器空间如何用ftp,网站风格指的是什么之前写了一篇关于接口自动化框架 apin 入门使用是文章#xff0c;主要介绍了 apin 的安装以及用例编写的方法。
今天这篇文章来给大家聊聊#xff0c;apin 中的一些高级使用技巧。比如依赖接口的变量提取和引用#xff0c;用例断言#xff0c;以及函数工具的使用。 01 变…之前写了一篇关于接口自动化框架 apin 入门使用是文章主要介绍了 apin 的安装以及用例编写的方法。
今天这篇文章来给大家聊聊apin 中的一些高级使用技巧。比如依赖接口的变量提取和引用用例断言以及函数工具的使用。 01 变量提取和引用 变量提取和引用主要是为了解决接口之间的参数依赖问题。
使用场景接口 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, rid:(.?),) } 2 变量引用 变量引用表达式
$}
引用优先级
优先引用该用例的局部变量(用例的 env 中的变量)如果局部变量不存在则会引用全局变量(setting.py 中 ENV 中保存的变量)。 02 用例断言 关于测试用例预期结果和实际结果的比对的apin 中封装了一个 verification 字段只需要在 verification 中定义预期结果实际结果提取表达式和断言的方法即可实现用例的断言 1 基本语法 verification [ [断言方式, 预期结果, 实际结果] ] 2 断言方式 apin 中目前支持两种断言方式
断言相等 eq
预期结果和实际结果相等
verification [ [eq, 预期结果, 实际结果] ] 断言包含contains
实际结果中包含预期结果的内容
verification [ [contains, 预期结果, 实际结果] ] 3 实际结果获取 关于断言的实际结果提取需要使用V{{表达式}} 来进行提取表达式支持 jsonpath 和正则表达式两种提取方式方式。
正则表达式提取
# 通过正则表达式来提取实际结果中的msg字段。 verification [ [eq, {msg:OK}, {msg: V{{msg:(.?)}}}] ] 通过 jsonpath 提取
# 通过jsonpath来提取实际结果中的msg字段。 verification [ [eq, {msg:OK}, {msg: V{{$..msg}}] ] 4 HTTP 状态码的断言 上述两种方式已可提取结果返回的数据那如果要断言接口http请求的状态码呢
apin中也提供了一个内置的字段名来表示http状态码。
# 断言接口请求的http状态码是否等于200 verification [ [eq, 200, status_code] ] 03 函数工具的使用 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 用例中引用函数 引用表达式Fdemo1:用例数据中的 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}})}}, } 04 项目全局配置 项目中的 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:musenqq.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: 测试报告, # 报告样式 有12三个样式 templates: 1, # 报告描述信息 desc: XX项目测试生成的报告 } 4 邮件推送测试结果 如果要将测试结果发送到指定的邮箱中则在 settings.py 添加 EMAIL 配置即可。
EMAIL { # smtp服务器地址 host: smtp.qq.com, # smtp服务器端口 port: 465, # 邮箱账号 user: xxxxqq.com, # smtps授权码 password: xxxx, # 收件人列表 to_addrs: [xxxqq.com,xxxqq.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: }