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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章