开始接触接口测试的时候,使用的jmeter,当时还是一个同事给分享了jmeter的基本操作功能。
后来研究接口自动化,想要利用jmeter来做这个,逐渐用上了数据库连接,前置,后置等略微高级一些的功能。
但jmeter在接口测试的过程中的方便是不言而喻的,但是总给人一种以呆板的感觉。
于是在接口自动化探索的道路上摸摸索索。
混迹testerhome开源版块也有不少的接口自动化开源项目,最有名的应该是httprunner,试了下不是我的菜。
还有其他几个开源平台也试用了下,个人感觉跟我的思想不是很契合。
直到利用pytest +allure 来做的时候,觉得还不错,但是要写代码,对有些同学来说门槛略高,如果想写代码搞接口自动化,强推pytest+allure。为啥我放弃了呢,因为在这个时候我发现了一个更好用的开源接口自动化平台sosotest。
安装,部署我就不说了,官方使用手册很清楚。
sosotest在testerhome上页面,官方群284333313 (我不是托) 我现在是sosotest的小迷妹了。
https://testerhome.com/opensource_projects/sosotest
碰到的一个坑:所有的服务部署在windows本机上貌似有点问题,部署到服务器上去之后就木有问题了 。
主要来说说,这个开源的平台是如何与我思想的契合,其实我也只发现了其冰山的一脚。
1.重要的断言
sosotest中叫断言恢复,为啥叫断言恢复呢?
因为这个断言中不仅仅可以写断言哦,还可以恢复。
啥叫恢复?
比如你的接口是添加某个数据,里面有个标题是‘aaaa’,且这个标题是不能重复的。那你在执行这个接口后,数据库里有了一条‘aaa’的数据,当你下次再执行这个接口的时候,就不能添加成功了。
恢复的妙用就是在这里。
有两种方法:
1.直接执行sql语句,将这条数据删除
2.执行与此添加接口相反的删除接口
以上两种方法都可以直接写到断言恢复中,相当于对此接口产生新数据的清理工作,这点在自动化测试中很有用。
如上图所示:在断言恢复中的几个步骤
1.断言
2.数据库查询(经测试貌似不支持连表查询)
3.通过json提取message_id,这个提取出来的值可以给下一个接口使用哦,后面讲准备的时候讲。这些方法在其平台上都有详细说明
4.执行清理接口
2.重要的准备
准备相当于jmeter里的前置条件,jmeter如果加前置可能会需要好几个步骤,这里也是几个步骤,但是操作十分方便。
准备中有很多事情可以操作。
比如执行接口,查询数据取值,引用组合文本,大可以发挥你的想象。
且在准备中执行的接口,如果该接口有断言恢复中有取出变量,那么在当前的接口可以直接使用这个变量哦,妥妥的好用。
值得一说便是这个组合文本。可以看到创建一个组合文本之后,他可以统一或单独设置不同环境的文本值。
划重点,这个很有用!如下面的两个图所示。
你可以将测试环境,线上环境单独设置文本值,然后在执行接口的时候,选择相应的环境,就可以使用相应环境的变量,这样做到数据,业务分离,同一套脚本只要选择不同的环境就可以分别执行相应环境的数据了。
亮点:
可以在你编写接口的时候直接调试,错误信息,返回啥的也非常详细,这点和jmter是差不多的,多了的内容就是选择环境,完全展示准备和断言恢复中的内容。
支持python模式和数据关键字模式。用起来贼溜。
对于那种一个接口多个用例的情况有以下两种思路:
1.写多个接口(反正可以复制)然后将这些接口添加到业务流中
2.用python实现,官方也有详细说明大致如下(抄官方代码)
写在准备里面,大致试验了下,下面是一个登录的接口。
# python
userlist = [
{"account":"18668219620","pwd":"111111"},
{"account":"18668219620","pwd":"1111123"}]
totalcount, passcount, failcount = 0,0,0
expected = '"errorCode":"0"'
for user in userlist:
execute_current() # 执行当前接口的执行信息,使用变量user
# 输出执行后的输入和输出信息
log("processedHeader: %s" % context.processedHeader)
log("processedUrl: %s" % context.processedUrl)
log("processedParams: %s" % context.processedParams)
log("processedBodyContent: %s" % context.processedBodyContent)
retContent = const("RESP_TEXT")
log("retContent: %s" % retContent)
# 对返回结果进行判断。
if expected in retContent:
passcount += 1
log("PASS")
else:
failcount += 1
log("FAIL")
# 开始设置测试结果,如果有失败则失败,否则全部成功。
if failcount > 0:
set_result("FAIL","测试未通过,失败%d次。" % failcount)
else:
set_result("PASS","测试通过.")
后续就是将你的接口脚本添加到业务流,再将业务流添加到任务,就可以美美的执行了,执行完了还有美美的报告。
这些就不细说了,使用手册里面都有。