介面測試框架seldom
阿新 • • 發佈:2021-09-03
先來看看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"
}
我的目標是斷言name
和hobby
部分的內容。
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')
假設介面返回的basktball
、swim
順序反了,斷言就會失敗,但其實這個列表可以是無序的。
再來看看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)
將你要檢查的欄位寫出來,層級關係是正確的即可,上面特意對調了basktball
、swim
的位置。