每天掌握一个软测高级技巧:接口自动化神器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 中目前支持两种断言方式:

断言相等 :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']] 

函数工具的使用

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

1 自定义函数

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

案例:funcTools.py 文件

import hashlib,randomdef md5_encrypt(msg):"""md5加密"""md5 = hashlib.md5()  md5.update(msg.encode("utf8"))  return md5.hexdigest()def rand_phone():"""随机生成手机号的函数"""import randomfor 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": ""
}

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末小卡片领取】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

这篇关于每天掌握一个软测高级技巧:接口自动化神器apin进阶操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1140928

相关文章

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

Python实现自动化接收与处理手机验证码

《Python实现自动化接收与处理手机验证码》在移动互联网时代,短信验证码已成为身份验证、账号注册等环节的重要安全手段,本文将介绍如何利用Python实现验证码的自动接收,识别与转发,需要的可以参考下... 目录引言一、准备工作1.1 硬件与软件需求1.2 环境配置二、核心功能实现2.1 短信监听与获取2.

Python实现Microsoft Office自动化的几种方式及对比详解

《Python实现MicrosoftOffice自动化的几种方式及对比详解》办公自动化是指利用现代化设备和技术,代替办公人员的部分手动或重复性业务活动,优质而高效地处理办公事务,实现对信息的高效利用... 目录一、基于COM接口的自动化(pywin32)二、独立文件操作库1. Word处理(python-d

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Redis中管道操作pipeline的实现

《Redis中管道操作pipeline的实现》RedisPipeline是一种优化客户端与服务器通信的技术,通过批量发送和接收命令减少网络往返次数,提高命令执行效率,本文就来介绍一下Redis中管道操... 目录什么是pipeline场景一:我要向Redis新增大批量的数据分批处理事务( MULTI/EXE

Python实现自动化表单填写功能

《Python实现自动化表单填写功能》在Python中,自动化表单填写可以通过多种库和工具实现,本文将详细介绍常用的自动化表单处理工具,并对它们进行横向比较,可根据需求选择合适的工具,感兴趣的小伙伴跟... 目录1. Selenium简介适用场景示例代码优点缺点2. Playwright简介适用场景示例代码

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解