当前位置:   article > 正文

每天掌握一个软测高级技巧:接口自动化神器apin进阶操作

每天掌握一个软测高级技巧:接口自动化神器apin进阶操作

之前写了一篇关于接口自动化框架 apin 入门使用是文章,主要介绍了 apin 的安装以及用例编写的方法。

今天这篇文章来给大家聊聊,apin 中的一些高级使用技巧。比如依赖接口的变量提取和引用,用例断言,以及函数工具的使用。

01、变量提取和引用

变量提取和引用主要是为了解决接口之间的参数依赖问题

使用场景:接口 A 的参数中需要使用接口 B 返回的某个数据,那么就要在请求 B 接口之后,提取数据保存,给请求 A 接口时使用。

1、变量提取

在用例集或用例数据中,通过 extract 字段指定要提取的变量。

语法:

  1. "extract": {
  2. "变量名": ("变量保存的级别", "提取方式", "提取表达式"),
  3. }

 如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

  • 变量名

保存数据的变量名

  • 变量保存的级别

EVN: 全局变量,settings 文件中的 EVN
env : 为局部变量(只对当前用例集有效):用例集的 env 字段

  • 提取方式

re: 正则表达式提取
jsonpath: 通过 jsonpath 提取

案例:

  1. "extract": {
  2. # 通过jsonpath提取
  3. "token": ("env", "jsonpath", "$..token"),
  4. # 通过正则表达式提取
  5. 'member_id': ("env", "re", r'"id":(.+?),')
  6. }

2、变量引用

变量引用表达式:

$}

引用优先级:

优先引用该用例的局部变量(用例的 env 中的变量),如果局部变量不存在,则会引用全局变量(setting.py 中 ENV 中保存的变量)。

02、用例断言

关于测试用例预期结果和实际结果的比对的,apin 中封装了一个 verification 字段,只需要在 verification 中定义预期结果,实际结果提取表达式,和断言的方法,即可实现用例的断言!

1、基本语法

  1. verification = [
  2. [断言方式, 预期结果, 实际结果]
  3. ]

2、断言方式

apin 中目前支持两种断言方式:

断言相等 :eq

预期结果和实际结果相等

  1. verification = [
  2. ['eq', 预期结果, 实际结果]
  3. ]

断言包含:contains

实际结果中包含预期结果的内容

  1. verification = [
  2. ['contains', 预期结果, 实际结果]
  3. ]

3、实际结果获取

关于断言的实际结果提取,需要使用V{{表达式}} 来进行提取,表达式支持 jsonpath 正则表达式两种提取方式方式。

正则表达式提取

  1. # 通过正则表达式来提取实际结果中的msg字段。
  2. verification = [
  3. ['eq', {'msg':"OK"}, {"msg": "V{{msg:'(.+?)'}}"}]
  4. ]

通过 jsonpath 提取

  1. # 通过jsonpath来提取实际结果中的msg字段。
  2. verification = [
  3. ['eq', {'msg':"OK"}, {"msg": 'V{{$..msg}}']
  4. ]

4、HTTP 状态码的断言

上述两种方式,已可提取结果返回的数据,那如果要断言接口http请求的状态码呢?

apin中也提供了一个内置的字段名,来表示http状态码。

  1. # 断言接口请求的http状态码是否等于200
  2. verification = [
  3. ['eq', 200, 'status_code']
  4. ]

03、函数工具的使用

apin 支持在测试用例中调用自定义的函数来处理数据,如对数据进行加密处理、随机生成数据等等。

1、自定义函数

apin 创建的项目中有一个 funcTools.py,在该文件中可以自己定义函数,然后在用例中通过 F{xxx()}来调用。

  • 案例:funcTools.py 文件

  1. import hashlib,random
  2. def md5_encrypt(msg):
  3. """md5加密"""
  4. md5 = hashlib.md5()
  5. md5.update(msg.encode("utf8"))
  6. return md5.hexdigest()
  7. def rand_phone():
  8. """随机生成手机号的函数"""
  9. import random
  10. for i in range(8):
  11. phone += str(random.randint(0, 9))
  12. return str(phone)
  13. def get_timestamp():
  14. """获取时间戳"""
  15. return time.time()
  • 注意点:函数处理完的数据需要 return 返回哦

2、用例中引用函数

  • 引用表达式:F

  • demo1:用例数据中的 user,引用前面定义的 rand_phone 函数

  1. {
  2. 'title': "普通用户注册",
  3. 'interface': "member/register",
  4. "method": "post",
  5. 'json': {"user": "F{rand_phone()}", "pwd": "lemon123"},
  6. }
  • demo2:用例数据中的 pwd,引用前面定义的 md5_encrypt 函数对密码进行 md 加密

注意点:引用的函数,传递的参数如果是变量,则不需要在变量应用表达式外加引号

  1. {
  2. 'title': "普通用户登录",
  3. 'interface': "member/login",
  4. "method": "post",
  5. 'json': {"user": "13109877890", "pwd": "F{md5_encrypt('lemon123')}"},
  6. }
  7. # 引用函数,变量作为参数传递
  8. {
  9. 'title': "普通用户登录",
  10. 'interface': "member/login",
  11. "method": "post",
  12. 'json': {"user": "${{user}}", "pwd": "F{md5_encrypt(${{pwd}})}"},
  13. }

04、项目全局配置

项目中的 setting.py 文件,是整个项目的配置文件,接下来详细介绍一下项目的配置选项。

1、debug 模式运行

项目创建之后,默认运行是开启了 debug 模式,运行过程中会输出详细的 debug 级别日志。

如果不像看运行日志,则将 settings 中的 DEBUG 设置为 Flase 即可。

  1. # 是否开启debug模式:True为debug模式,False为关闭debug模式
  2. DEBUG = False

2、ENV 全局的变量

将 settings.py 中的 ENV 可以设置项目全局配置

全局的域名

推荐在 ENV 中设置全局的 host,不建议在每一个测试用例中去设置 host,切换测试环境切换也更方便(如果用例数据中没有自己定义 host,会自动引用全局的 host 地址)。

  1. ENV = {
  2. "host":"http://WWW.XXX.com/",
  3. }

全局的请求头

如果项目接口有必传的请求头数据,也可以直接在 ENV 中设置(如果用例数据中没有定义时,也会自动引用全局的 headers)。

  1. ENV = {
  2. "host":"http://WWW.XXX.com/",
  3. "headers": {"UserAgent": "apin-test01"}
  4. }

全局的测试数据

如果用例中需要引用事先准备好的一些测试数据,如测试账号、密码之类的

如:定义一个测试账号、测试密码、用户 id

  1. ENV = {
  2. "host":"http://WWW.XXX.com/",
  3. "headers": {"UserAgent": "apin-test01"},
  4. "user":"musen@qq.com",
  5. "pwd":"lemon123",
  6. "user_id":111
  7. }

测试用例中直接使用 ${{}} 即可引用,

  1. # 引用user和pwd
  2. {
  3. 'title': "登录",
  4. 'interface': "member/register",
  5. "method": "post",
  6. 'json': {"mobile_phone": "${{user}}", "pwd": "${{pwd}}"},
  7. }

注意点:如果局部环境和全局变量重名,优先引用局部变量。

3、测试报告

通过setting中的TEST_RESULT,可以配置测试报告的输出信息。

  1. TEST_RESULT = {
  2. # 测试报告文件名
  3. "filename": "report.html",
  4. # 测试人员
  5. "tester": "测试员",
  6. # 报告标题
  7. "title": "测试报告",
  8. # 报告样式 :有1,2,三个样式
  9. "templates": 1,
  10. # 报告描述信息
  11. "desc": "XX项目测试生成的报告"
  12. }

4、邮件推送测试结果

如果要将测试结果发送到指定的邮箱中,则在 settings.py 添加 EMAIL 配置即可。

  1. EMAIL = {
  2. # smtp服务器地址
  3. "host": 'smtp.qq.com',
  4. # smtp服务器端口
  5. "port": 465,
  6. # 邮箱账号
  7. "user": "xxxx@qq.com",
  8. # smtps授权码
  9. "password": "xxxx",
  10. # 收件人列表
  11. "to_addrs": ['xxx@qq.com','xxx@qq.com'],
  12. # 是否发送附件
  13. "is_file": True
  14. }

5、测试结果推送到钉钉群

如果要将测试结果推送到钉钉群,则在 settings.py 添加 DINGTALK 配置即可。

  1. DINGTALK = {
  2. # 钉钉机器人的Webhook地址
  3. "url": "",
  4. # 如果钉钉机器人安全设置了关键字,则需要传入对应的关键字
  5. "key": None,
  6. # 如果钉钉机器人安全设置了签名,则需要传入对应的密钥
  7. "secret": None,
  8. # 钉钉群中要@人的手机号列表,如:[137xxx,188xxx]
  9. "atMobiles": [],
  10. # 是否@所有人
  11. "isatall": False
  12. }

6、测试结果推送到企业微信群

如果要将测试结果推送到企业微信群,则在 settings.py 添加 WECHAT 配置即可。

  1. WECHAT = {
  2. # 企业微信群ID
  3. "chatid": "",
  4. # 调用企业微信API接口的凭证
  5. "access_token": ""
  6. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/505375
推荐阅读
相关标签
  

闽ICP备14008679号