login.json文件
''' { "item": [ { "requests": { "url": "http://******/loginByPwd", "body": { "token": "", "mobile": "******", "pwd": "******" } }, "response": [ {"code":"1000"} ] }, { "requests": { "url": "http://******/loginByPwd", "body": { "token": "f6720748de8f498db37507eabc4bca8d", "mobile": "", "pwd": "******" } }, "response": [ {"code":"1001"} ] }, { "requests": { "url": "http://******/loginByPwd", "body": { "token": "f6720748de8f498db37507eabc4bca8d", "mobile": "******", "pwd": "" } }, "response": [ {"code":"1001"} ] } ] } '''
json_read.py文件
''' import json def read_json(): return json.load(open('login.json','r'))['item'] # 對文件的處理,load不能加s # 返回的是數據是列表,里面套字典,每個字典有請求參數和響應數據 '''
test_json_login.py
''' import pytest import requests from pytest_study.json_read import * # 和json_read.py文件在同一目錄下 @pytest.mark.parametrize('data', read_json()) def test_json_login_01(data): r = requests.post(url=data['requests']['url'], data=data['requests']['body']) # 參數data和json代表意義不一樣 assert r.json()['code']==data['response'][0]['code'] if __name__ == '__main__': pytest.main(['-s', '-v', 'test_json_login.py']) """ 1 先有一個json文件寫好的用例數據(格式為一個大字典,里面套列表,列表套字典(這個字典為各用例數據)) 2 取到json文件中數據,並返回列表格式 3 利用pytest中的parametrize參數化,對列表中的每個字典進行循環取值 4 利用requests庫對獲取到的接口進行請求 5 判斷用例是否與接口返回數據一致 6 執行 總結:把用例都寫在了一個文件中,數據進行了分離;然后利用pytest中的parametrize參數化對整個文件的用例進行循環並執行 """ """ 1 json庫的操作 json.dumps() 將python對象編碼成Json字符串 json.loads() 將Json字符串解碼成python對象 json.dump() 將python中的對象轉化成json儲存到文件中 json.load() 將文件中的json的格式轉化成python對象提取出來 """ '''