开源接口自动化平台sosotest的使用心得

    技术2023-10-07  107

    开始接触接口测试的时候,使用的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","测试通过.")

    后续就是将你的接口脚本添加到业务流,再将业务流添加到任务,就可以美美的执行了,执行完了还有美美的报告。

    这些就不细说了,使用手册里面都有。

    Processed: 0.010, SQL: 9