接口自动化神器 apin,进阶使用篇(第二讲)


前言:

之前写了一篇关于接口自动化框架 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": "131****7890", "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":"host":"http://WWW.XXX.com/", "headers": {"UserAgent": "apin-test01"} }
  • 全局的测试数据
  • 如果用例中需要引用事先准备好的一些测试数据,如测试账号、密码之类的
  • 如:定义一个测试账号、测试密码、用户 id
  • ENV = { "host":"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": "" }
今天就给大家介绍到这里了,感谢您的认真阅读,我也会写出更优质的文章的,敬请期待哦!

写在最后

最后再唠唠一句,如果想以测试为长期发展职业目标,是需要时刻保持学习的,要使自己具备竞争力,无论你现在工作几年,只要行动起来,你就已经占优势了,好啦就到这里了,祝大家2022年能升职加薪,没入职的就早日拿到心仪公司的offer,事事顺遂。

编写文章不易,希望大家帮忙给「点赞」「收藏」,咱不做白嫖党!!

#软件测试##测试##测试工程师##Python##笔记##技术栈#
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
10-05 23:02
东北大学 Java
我说句实话啊:那时候看三个月培训班视频,随便做个项目背点八股,都能说3 40w是侮辱价
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务