簡介
上一篇通過簡單的案例給小伙伴們介紹了一下unittest斷言,這篇我們將通過結合和圍繞實際的工作來進行unittest的斷言。這里以獲取城市天氣預報的接口為例,設計了 2 個用例,一個是查詢北京的天氣,一個是查詢
南京為例,你也可以查詢別的城市的天氣預報。
接口文檔
1、在實際工作中,開發人員都會給你接口文檔方便QA測試,和其他系統的開發人員對接。接口文檔如下:
天氣預報
獲取實時天氣
請求方式:POST
請求地址:https://www.apiopen.top/weatherApi
Query參數名 | 類型 | 必需 | 描述 | 示例 e.g. |
---|---|---|---|---|
city | string | 是 | 城市名稱 | 成都 |
返回示例:
{
"code": 200,
"msg": "成功!",
"data": {
"yesterday": {
"date": "14日星期五",
"high": "高溫 7℃",
"fx": "無持續風向",
"low": "低溫 4℃",
"fl": "",
"type": "陰"
},
"city": "成都",
"aqi": "89",
"forecast": [
{
"date": "15日星期六",
"high": "高溫 10℃",
"fengli": "",
"low": "低溫 2℃",
"fengxiang": "無持續風向",
"type": "多雲"
},
{
"date": "16日星期天",
"high": "高溫 15℃",
"fengli": "",
"low": "低溫 3℃",
"fengxiang": "無持續風向",
"type": "晴"
},
{
"date": "17日星期一",
"high": "高溫 14℃",
"fengli": "",
"low": "低溫 5℃",
"fengxiang": "無持續風向",
"type": "晴"
},
{
"date": "18日星期二",
"high": "高溫 11℃",
"fengli": "",
"low": "低溫 6℃",
"fengxiang": "無持續風向",
"type": "多雲"
},
{
"date": "19日星期三",
"high": "高溫 12℃",
"fengli": "",
"low": "低溫 6℃",
"fengxiang": "無持續風向",
"type": "多雲"
}
],
"ganmao": "晝夜溫差較大,較易發生感冒,請適當增減衣服。體質較弱的朋友請注意防護。",
"wendu": "9"
}
}
2、如果沒有你可以自己通過fiddler抓包獲取參數和接口URL,以及請求方式 。
設計測試用例
1、針對以上接口,設計兩個城市接口測試用例
2、運行接口用例結果
3、參考代碼
1 # coding=utf-8 2 #1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行 3 4 #2.注釋:包括記錄創建時間,創建人,項目名稱。 5 ''' 6 Created on 2019-4-26 7 @author: 北京-宏哥 8 Project:學習和使用unittest框架編寫斷言-中篇 9 ''' 10 #3.導入requests和unittest模塊 11 import requests 12 import unittest 13 #4.編寫測試用例和斷言 14 class TestWeather(unittest.TestCase): 15 '''測試天氣預報接口''' # 此注釋將展示到測試報告的測試組類 16 def test_beijin_weather(self): 17 '''查詢北京天氣預報''' # 此注釋將展示到測試報告的用例標題 18 url = "https://www.apiopen.top/weatherApi" 19 20 par = { 21 "city": "北京", # 城市名 22 } 23 r = requests.post(url, params=par) 24 print(r.text) # 獲取返回的結果 25 result = r.json()['code'] #獲取狀態碼 26 print(result) 27 # 斷言 28 self.assertEqual(200, result) 29 self.assertIn('msg', r.text) 30 self.assertTrue('北京'in r.text) 31 def test_nanjin_weather(self): 32 '''查詢南京天氣預報''' # 此注釋將展示到測試報告的用例標題 33 url = "https://www.apiopen.top/weatherApi" 34 par = { 35 "city": "南京", # 城市名 36 } 37 r = requests.post(url, params=par) 38 print(r.text) # 獲取返回的結果 39 result = r.json()['code']#獲取狀態碼 40 print(result) 41 # 斷言 42 self.assertEqual(200, result) 43 self.assertIn('msg', r.text) 44 self.assertTrue('南京' in r.text) 45 46 if __name__ == "__main__": 47 unittest.main()
小結
1、實際中的接口和這個也差不多,你可以增加沒有這個城市的等等測試用例,可根據實際需要增加多個測試用例全面的斷言。
2、實際開發或者測試工作中經常用到json數據,那么就會有這樣一個需求:在谷歌瀏覽器中訪問URL地址返回的json數據能否按照json格式展現出來。
比如,在谷歌瀏覽器中訪問:http://jsonview.com/example.json
展現效果如下:
那么安裝了JsonView擴展程序后的展現效果如下:
很明顯,后者的效果更好。實現步驟如下:
1、下載JsonView擴展程序壓縮包
下載地址:https://github.com/gildas-lormeau/JSONView-for-Chrome
點擊【Clone or download】——【Download Zip】
2、解壓這個壓縮包
3、打開谷歌瀏覽器的擴展程序界面
方式一:在谷歌瀏覽器地址欄中輸入:chrome://extensions/
方式二:
4、加載JsonView擴展程序
選中開發者模式,點擊【加載正在開發的擴展程序…】,選擇插件目錄(D:\JSONView-for-Chrome-master\WebContent)
點擊確定后,就安裝上了。安裝后界面如下:
安裝完成,重新加載 (Ctrl+R)。