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对象提取出来 """ '''