經過之前的學習鋪墊,我們嘗試著利用pytest框架編寫一條接口自動化測試用例,來厘清接口自動化用例編寫的思路。
我們在百度搜索天氣查詢
,會出現如下圖所示結果:
接下來,我們以該天氣查詢接口為例,編寫接口測試用例腳本。
一,明確測試對象
針對某個功能做接口測試,首先我們需要確定實現這個功能調用的是哪個接口,這個接口的具體信息(如功能、協議、URL、請求方法、請求參數說明、響應參數說明等等)可以通過查看開發提供的接口文檔獲取,也可以通過抓包(在沒有接口文檔的情況下)獲取。找到對應的接口也就是測試對象之后,才能有目的的進行下一步。
1,這里顯然是沒有接口文檔提供接口相關的信息的,我們甚至都不知道請求url,那么先Fiddler抓包獲取接口信息。
通過抓包我們抓取到了該接口的信息如下:
請求url:https://weathernew.pae.baidu.com/weathernew/pc
請求方式:GET
請求參數:
2,抓取到以上這些接口信息后,我們先編寫簡單的腳本請求該接口,如下:
url = "https://weathernew.pae.baidu.com/weathernew/pc"
params = {"query": "浙江杭州天氣","srcid": 4982
}
res = requests.get(url=url, params=params)
print(res.status_code)
print(res.text)
運行代碼,接口調試通過,能獲取到結果,如下:
3,明確需求,確定用例。
我們在針對某個接口做自動化測試時,需要先明確用例需要驗證的測試點。有些接口既要進行正向的校驗,也要進行異常的校驗,而有些接口可能在自動化時只需要進行正向校驗就夠了,無需做異常校驗。
我們來分析一下示例的這個天氣查詢接口,主要有兩個測試點:
-
正向請求:輸入存在的城市,能查找對應城市的天氣
-
異常請求:輸入不存在的城市,提示錯誤
二,編寫測試用例
編寫測試用例時,我們需要將代碼進行封裝,可以封裝成測試類/方法、測試函數。pytest中對用例封裝的命名方式有要求,詳細請參考我之前的文章pytest測試命名規則。
至于封裝成類還是函數,其實沒什么特定的要求,一般同一個場景
或同一個測試點相關的接口
可以定義成一個類。
同時用例還需要設置斷言,用于校驗返回內容是否為期望的內容。測試用例一定要進行斷言,否則毫無意義。
構造請求數據
正向請求,數據如下:
params = {"query": "浙江杭州天氣","srcid": 4982
}
異常請求,數據如下:
params = {"query": "微信公眾號:測試上分之路","srcid": 4982
}
正向請求的結果我們在上面調試請求該接口的時候已經拿到了,如上面的截圖。
我們來看下異常請求的結果,為后續設置斷言做準備,結果如下:
發送異常請求后,返回的code也是200,結果中會出現暫未開通此城市查詢
,且沒有出現正向請求中的window.tplData
內容。
?自動化測試相關教程推薦:
2023最新自動化測試自學教程新手小白26天入門最詳細教程,目前已有300多人通過學習這套教程入職大廠!!_嗶哩嗶哩_bilibili
2023最新合集Python自動化測試開發框架【全棧/實戰/教程】合集精華,學完年薪40W+_嗶哩嗶哩_bilibili
測試開發相關教程推薦
2023全網最牛,字節測試開發大佬現場教學,從零開始教你成為年薪百萬的測試開發工程師_嗶哩嗶哩_bilibili
postman/jmeter/fiddler測試工具類教程推薦
講的最詳細JMeter接口測試/接口自動化測試項目實戰合集教程,學jmeter接口測試一套教程就夠了!!_嗶哩嗶哩_bilibili
2023自學fiddler抓包,請一定要看完【如何1天學會fiddler抓包】的全網最詳細視頻教程!!_嗶哩嗶哩_bilibili
2023全網封神,B站講的最詳細的Postman接口測試實戰教學,小白都能學會_嗶哩嗶哩_bilibili
封裝測試代碼
這里是針對同一個接口的兩條不同的測試用例,我們直接封裝一個測試類,專門用于測試該接口。示例代碼如下:
class TestWeather:'''校驗百度天氣查詢接口:https://weathernew.pae.baidu.com/weathernew/pc'''def test_get_weather_normal(self):'''正向校驗-查詢存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "浙江杭州天氣","srcid": 4982}res = requests.get(url=url, params=params)def test_get_weather_error(self):'''異常校驗-查詢不存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "微信公眾號:測試上分之路","srcid": 4982}res = requests.get(url=url, params=params)
注意,代碼里還沒有進行斷言,不能算是完整的用例。這里我只是為了說明流程而把斷言放到下一步,分析后再寫斷言。
斷言設置
斷言,即校驗結果是否是我們期望的內容。pytest怎么進行斷言請參考文章pytest-斷言。
設置斷言時,我們需要先明確校驗哪些字段。一般而言,接口響應的code都需要斷言,status_code == 200
則說明接口請求通了。然后再去斷言其他必要字段,從而校驗接口功能是否實現。
由上面的結果可知,正向請求可以進行如下斷言:
# 斷言code是否等于200,存在則該斷言通過
assert res.status_code == 200# 斷言結果中是否存在"window.tplData",存在則該斷言通過
assert "window.tplData" in res.text
由上面的結果可知,異常請求可以進行如下斷言:
# 斷言code是否等于200,存在則該斷言通過
assert res.status_code == 200# 斷言結果中是否存在"window.tplData",注意這里是不存在則該斷言通過
assert "window.tplData" not in res.text# 斷言結果中是否存在"暫未開通此城市查詢",存在則該斷言通過
assert "暫未開通此城市查詢" in res.text
三,執行腳本獲取測試結果
使用pytest框架管理執行用例時,需要先安裝pytest,并在模塊中import,不清楚的同學可以查看我的pytest系列文章,這里不做過多說明。
完整示例代碼如下:
# @time: 2022-03-20
# @author: 給你一頁白紙
# 微信公眾號:測試上分之路import requests
import pytestclass TestWeather:'''校驗百度天氣查詢接口:https://weathernew.pae.baidu.com/weathernew/pc'''def test_get_weather_normal(self):'''正向校驗-查詢存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "浙江杭州天氣","srcid": 4982}res = requests.get(url=url, params=params)# print(res.status_code)# print(res.text)assert res.status_code == 200assert "window.tplData" in res.textdef test_get_weather_error(self):'''異常校驗-查詢不存在的城市的天氣'''url = "https://weathernew.pae.baidu.com/weathernew/pc"params = {"query": "微信公眾號:測試上分之路","srcid": 4982}res = requests.get(url=url, params=params)print(res.status_code)print(res.text)assert res.status_code == 200assert "window.tplData" not in res.textassert "暫未開通此城市查詢" in res.textif __name__ == '__main__':# 使用pytest執行用例pytest.main()
當然,這里因為url是共用的,我們最好是將它提取出來,而不是每個測試方法都去定義一次這個變量,如下圖所示:
執行結果如下:
四,總結
單個接口自動化測試用例,我們可以按照上面的步驟來進行,即 明確測試對象-->編寫測試用例-->編寫測試腳本-->執行腳本、獲取測試結果。通過這些步驟,我們便對自動化用例的編寫有了基本的思路(這一點對于我們自動化測試思維的形成很重要),為我們后續的學習實踐打下基礎。
事實上使用編程語言對項目進行自動化測試時,幾乎不可能只存在一條測試用例,那么在有多條測試用例的情況下,需要怎樣管理用例、執行用例、獲取測試結果?這就是單元測試框架需要解決的問題。
??總結:
?光學理論是沒用的,要學會跟著一起敲,要動手實操,才能將自己的所學運用到實際當中去,這時候可以搞點實戰案例來學習。
如果對你有幫助的話,點個贊收個藏,給作者一個鼓勵。也方便你下次能夠快速查找。
如有不懂還要咨詢下方小卡片,博主也希望和志同道合的測試人員一起學習進步
在適當的年齡,選擇適當的崗位,盡量去發揮好自己的優勢。
我的自動化測試開發之路,一路走來都離不每個階段的計劃,因為自己喜歡規劃和總結,
測試開發視頻教程、學習筆記領取傳送門!!