1. 程式人生 > 其它 >介面測試框架seldom

介面測試框架seldom

先來看看unittest + requests 是如何來做介面自動化的:

匯入unittest和requests包

已經非常簡潔,甚至我覺得這幾行程式碼敲下來,比postman\JMeter之類的工具更加簡單,效率更高。

同樣的用例,用seldom實現

個人使用過程中,覺得seldom強大在於優秀的測試資料和方便的校驗。還有強大的資料驅動,檔案驅動。

json檔案如下:

{
"add_guest": [
["查詢成功", "1","success"],
["查詢成功", "0","success"]
]
}

報告生成也是他的優勢之處,不需要在找額外的htmltestrunner來去生成報告。

更強大的斷言

斷言介面返回的資料是我們在做介面自動化很重要的工作。

  • assertJSON 斷言

例如下面的介面:

payload={'name':'tom','hobby':['basketball','swim']}
r=requests.get("http://httpbin.org/get",params=payload)
print(r.json())
{
"args":{
"hobby":[
"basketball",
"swim"
],
"name":"tom"
},
"headers":{
"Accept":"*/*",
"Accept-Encoding":"gzip,deflate",
"Host":"httpbin.org",
"User-Agent":"python-requests/2.25.0",
"X-Amzn-Trace-Id":"Root=1-605b562f-5746980d5fa5ce5513f20310"
},
"origin":"113.87.13.41",
"url":"http://httpbin.org/get?name=tom&hobby=basketball&hobby=swim"
}

我的目標是斷言namehobby部分的內容。

unittest + requests的寫法。

importunittest
importrequests


classTestAPI(unittest.TestCase):

deftest_get_method(self):
payload={'name':'tom','hobby':['basketball','swim']}
r=requests.get("http://httpbin.org/get",params=payload)
ret=r.json()
self.assertEqual(ret["args"]["hobby"],['basketball','swim'])
self.assertEqual(ret["args"]["name"],'tom')

假設介面返回的basktballswim順序反了,斷言就會失敗,但其實這個列表可以是無序的。

再來看看seldom中的斷言。

importseldom


classTestAPI(seldom.HttpRequest):

deftest_get_method(self):
payload={'name':'tom','hobby':['basketball','swim']}
self.get("http://httpbin.org/get",params=payload)
assert_json={'args':{'hobby':['swim','basketball'],'name':'tom'}}
self.assertJSON(assert_json)

將你要檢查的欄位寫出來,層級關係是正確的即可,上面特意對調了basktballswim的位置。