開始接觸接口測試的時候,使用的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","測試通過.")
後續就是將你的接口腳本添加到業務流,再將業務流添加到任務,就可以美美的執行了,執行完了還有美美的報告。
這些就不細說了,使用手冊裏面都有。