From: http://www.testclass.net/pytest/test_api/
背景
我們現在需要測試v2ex網站的查看論壇節點信息的api。具體如下:
節點信息
獲得指定節點的名字,簡介,URL 及頭像圖片的地址。
https://www.v2ex.com/api/nodes/show.json
Method: GET Authentication: None 接受參數: name: 節點名(V2EX 的節點名全是半角英文或者數字) 例如: https://www.v2ex.com/api/nodes/show.json?name=python 接口返回 { "id" : 90, "name" : "python", "url" : "http://www.v2ex.com/go/python", "title" : "Python", "title_alternative" : "Python", "topics" : 7963, "stars" : 5138, "header" : "這里討論各種 Python 語言編程話題,也包括 Django,Tornado 等框架的討論。這里是一個能夠幫助你解決實際問題的地方。", "footer" : null, "created" : 1278683336, "avatar_mini" : "//v2ex.assets.uxengine.net/navatar/8613/985e/90_mini.png?m=1509941286", "avatar_normal" : "//v2ex.assets.uxengine.net/navatar/8613/985e/90_normal.png?m=1509941286", "avatar_large" : "//v2ex.assets.uxengine.net/navatar/8613/985e/90_large.png?m=1509941286" }
需求分析
該接口是獲取數據的接口,一般來說,這種接口我們的測試重點是驗證數據的准確性。
- 測試數據: 節點的名稱:python
- 接口地址: https://www.v2ex.com/api/nodes/show.json
- 斷言: 返回的結果里,id必須是90,name必須等於python,大家想一想為什么?
代碼
新建名為v2ex_api_test.py的文件,鍵入如下內容
import requests class TestV2exApi(object): domain = 'https://www.v2ex.com/' def test_node(self): path = 'api/nodes/show.json?name=python' url = self.domain + path res = requests.get(url).json() assert res['id'] == 90 assert res['name'] == 'python'
需要注意的點
- 使用requests庫來簡化發送get請求並將返回值的json字符串轉換成python字典
- 使用domain變量來參數化測試的地址,因為不同環境的地址可能不一樣,使用domain變量之后只需要改動這個變量就可以切換測試環境了
- 斷言id為90是因為測試數據是靜態的,id不會發生變化
運行
$ pytest v2ex_api_test.py
======================================================================== test session starts ======================================================================== platform darwin -- Python 2.7.12, pytest-3.2.3, py-1.4.34, pluggy-0.4.0 rootdir: /Users/easonhan/code/testclass.net/src/pytest, inifile: collected 1 item v2ex_api_test.py . ===================================================================== 1 passed in 1.39 seconds ======================================================================
用例執行成功,我們實現了最簡單的接口測試場景。
