第一、API自动化测试框架目录结构介绍
第二、代码展现
- api/api_json.py
import requests
class Api_json(object):
def api_dev_part_ver(self, url, DeviceID, Info):
headers = {"Content-Type": "application/json"}
data = {"DeviceID": DeviceID, "Info": Info}
# 调用post并返回响应对象
return requests.post(url, headers=headers, json=data)
def api_post_stock(self, url, DevID, Info):
headers = {"Content-Type": "application/json"}
data = {"DevID": DevID, "Info": Info}
# 调用post并返回响应对象
return requests.post(url, headers=headers, json=data)
def api_data_upload(self, url, ReportDeviceID, DeviceID,StationCode,ListNum,List):
headers = {"Content-Type": "application/json"}
data = {"ReportDeviceID": ReportDeviceID, "DeviceID":DeviceID, "StationCode":StationCode,"ListNum":ListNum,"List":List}
# 调用post并返回响应对象
return requests.post(url, headers=headers, json=data)
def api_tpu_param(self, url, DeviceID, Info):
headers = {"Content-Type": "application/json"}
data = {"DeviceID": DeviceID, "Info": Info}
# 调用post并返回响应对象
return requests.post(url, headers=headers, json=data)
def api_sam_info(self, url, NodeID, Info):
headers = {"Content-Type": "application/json"}
data = {"NodeID": NodeID, "Info": Info}
# 调用post并返回响应对象
return requests.post(url, headers=headers, json=data)
2、case/test_more_json.py
import unittest
from parameterized import parameterized
from test_api_case.api.api_json import Api_json
from test_api_case.tools.read_more_json import ReadJson
datas = ReadJson("api_case_more.json").read_json()
def get_data_Devpart():
arrs = []
tmp = datas['case_001']
arrs.append((tmp['url'], tmp['DeviceID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
# for data in datas.values():
# arrs.append((data.get("url"),
# data.get("Info"),
# data.get("code"),
# data.get("req"),
# data.get("msg")))
return arrs
def get_ticket_stock():
# 新建空列表,添加读取json数据
arrs = []
tmp = datas['case_002']
arrs.append((tmp['url'], tmp['DevID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
return arrs
def get_cash_stock():
# 新建空列表,添加读取json数据
arrs = []
tmp = datas['case_003']
arrs.append((tmp['url'], tmp['DevID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
return arrs
# print(get_cash_stock())
def get_data_upload():
# 新建空列表,添加读取json数据
arrs = []
tmp = datas['case_004']
arrs.append((tmp['url'],tmp['ReportDeviceID'],tmp['DeviceID'], tmp['StationCode'],tmp['ListNum'],tmp['List'],tmp['code'], tmp['req'], tmp['msg']))
return arrs
print(tmp['msg'])
def get_tpu_param():
# 新建空列表,添加读取json数据
arrs = []
tmp = datas['case_005']
arrs.append((tmp['url'], tmp['DeviceID'], tmp['Info'], tmp['code'], tmp['req'], tmp['msg']))
return arrs
def get_sam_info():
# 新建空列表,添加读取json数据
arrs = []
tmp = datas['case_006']
arrs.append((tmp['url'], tmp['NodeID'], tmp['Info'],tmp['code'],tmp['req'],tmp['msg']))
return arrs
print(tmp['NodeID'])
class TestJson(unittest.TestCase):
@parameterized.expand(get_data_Devpart())
def test_dev_part_ver(self,url, DeviceID, info, code ,req, msg):
s = Api_json().api_dev_part_ver(url, DeviceID, info)
self.assertEqual(0,s.json()['code'])
self.assertEqual("part.report",s.json()["req"])
self.assertEqual("server ok",s.json()['msg'])
@parameterized.expand(get_ticket_stock())
def test_ticket_stock(self, url, DevID, info, code, req, msg):
# print(url, DevID, info, code, req, msg)
s = Api_json().api_post_stock(url, DevID, info)
self.assertEqual(0, s.json()['code'])
self.assertEqual("ticket_storage", s.json()["req"])
self.assertEqual("server ok", s.json()['msg'])
@parameterized.expand(get_cash_stock())
def test_cash_stock(self, url, DevID, info, code, req, msg):
# print(url, DevID, info, code, req, msg)
s = Api_json().api_post_stock(url, DevID, info)
self.assertEqual(0, s.json()['code'])
self.assertEqual("cash_storage", s.json()["req"])
self.assertEqual("server ok", s.json()['msg'])
@parameterized.expand(get_tpu_param())
def test_tpu_param(self,url, DeviceID, info, code ,req, msg):
s = Api_json().api_tpu_param(url, DeviceID, info)
self.assertEqual(0,s.json()['code'])
self.assertEqual("tpu_report",s.json()["req"])
self.assertEqual("server ok",s.json()['msg'])
@parameterized.expand(get_data_upload())
def test_dataupload_json(self, url,ReportDeviceID,DeviceID, StationCode, ListNum,List, code, req, msg):
# print(url)
# print(List)
s = Api_json().api_data_upload(url, ReportDeviceID,DeviceID, StationCode,ListNum,List)
self.assertEqual(0, s.json()['code'])
self.assertEqual("DataUploadStatus", s.json()["req"])
self.assertEqual("server ok", s.json()['msg'])
@parameterized.expand(get_sam_info())
def test_dataupload_json(self, url, NodeID, Info, code, req, msg):
s = Api_json().api_sam_info(url, NodeID,Info)
self.assertEqual(0, s.json()['code'])
self.assertEqual("api_v42_dev_sam", s.json()["req"])
self.assertEqual("server ok", s.json()['msg'])
if __name__=="__main__":
unittest.main()
3、data/api_case_more.json
{
"case_001":{
"url": "http://10.15.122.23:11418/api/v42/para/part/report",
"DeviceID":"09212011",
"Info":
[
{"ID":"D1","MajorVersion":"0046","SubVersion":"0"},
{"ID":"D3","MajorVersion":"0046","SubVersion":"0"},
{"ID":"D2","MajorVersion":"0046","SubVersion":"0"}
],
"code": 0,
"req": "part.report",
"msg": "server ok"},
"case_002": {
"url": "http://10.15.122.23:11418/api/v42/ticket/storage",
"DevID":"09212211",
"Info":
[
{"Type":1,"Location":1,"BoxID":"00000000","Currency":1,"Quantity":88,"Amt":0},
{"Type":1,"Location":2,"BoxID":"00000000","Currency":1,"Quantity":100,"Amt":0},
{"Type":2,"Location":1,"BoxID":"00000000","Currency":1,"Quantity":3,"Amt":0}
],
"code": 0,
"req": "ticket_storage",
"msg": "server ok"},
"case_003":{
"url": "http://10.15.122.23:11418//api/v42/cash/storage",
"DevID":"09212211",
"Info":
[
{"Type":17,"Location":1,"BoxID":"12000001","Currency":100,"Quantity":0,"Amt":0},
{"Type":18,"Location":1,"BoxID":"13210111","Currency":100,"Quantity":0,"Amt":0},
{"Type":19,"Location":1,"BoxID":"12000003","Currency":100,"Quantity":0,"Amt":0},
{"Type":19,"Location":2,"BoxID":"12000004","Currency":100,"Quantity":0,"Amt":0},
{"Type":34,"Location":2,"BoxID":"12000005","Currency":500,"Quantity":0,"Amt":0},
{"Type":34,"Location":1,"BoxID":"12000006","Currency":100,"Quantity":0,"Amt":0},
{"Type":34,"Location":3,"BoxID":"00000000","Currency":1000,"Quantity":1,"Amt":1000},
{"Type":33,"Location":1,"BoxID":"00000000","Currency":100,"Quantity":0,"Amt":0},
{"Type":33,"Location":1,"BoxID":"00000000","Currency":500,"Quantity":0,"Amt":0},
{"Type":33,"Location":1,"BoxID":"00000000","Currency":1000,"Quantity":0,"Amt":0},
{"Type":33,"Location":1,"BoxID":"00000000","Currency":2000,"Quantity":0,"Amt":0},
{"Type":33,"Location":1,"BoxID":"00000000","Currency":5000,"Quantity":0,"Amt":0},
{"Type":33,"Location":1,"BoxID":"00000000","Currency":10000,"Quantity":0,"Amt":0},
{"Type":36,"Location":1,"BoxID":"00000000","Currency":100,"Quantity":0,"Amt":0},
{"Type":36,"Location":1,"BoxID":"00000000","Currency":500,"Quantity":0,"Amt":0}
],
"code": 0,
"req": "cash_storage",
"msg": "server ok"
},
"case_004": {
"url": "http://10.15.122.23:11418/api/v42/dev/DataUploadStatus",
"ReportDeviceID":"09212011",
"DeviceID":"09212011",
"StationCode":"0921",
"ListNum":1,
"List":
[
{"Date":"20220208","TranNum":400,"BusiNum":400}
],
"code": 0,
"req": "DataUploadStatus",
"msg": "server ok"},
"case_005": {
"url": "http://10.15.122.23:11418/api/v42/para/tpu/report",
"DeviceID":"09212011",
"Info":
[
{"CardReaderID":209,
"Info":
[
{"Type":"3082","Version":"000245"},
{"Type":"3083","Version":"000119"},
{"Type":"4002","Version":"000260"},
{"Type":"4007","Version":"000224"},
{"Type":"4008","Version":"000209"},
{"Type":"4009","Version":"000211"},
{"Type":"4020","Version":"003535"},
{"Type":"4021","Version":"210419"},
{"Type":"3008","Version":"000273"},
{"Type":"4003","Version":"000244"},
{"Type":"4004","Version":"000244"},
{"Type":"4010","Version":"000235"}
]
},
{"CardReaderID":211,
"Info":
[
{"Type":"3082","Version":"000245"},
{"Type":"3083","Version":"000119"},
{"Type":"4002","Version":"000260"},
{"Type":"4007","Version":"000224"},
{"Type":"4008","Version":"000209"},
{"Type":"4009","Version":"000211"},
{"Type":"4020","Version":"003535"},
{"Type":"4021","Version":"210419"},
{"Type":"3008","Version":"000273"},
{"Type":"4003","Version":"000245"},
{"Type":"4004","Version":"000245"},
{"Type":"4010","Version":"000236"}
]
}
],
"code": 0,
"req": "tpu_report",
"msg": "server ok"
},
"case_006": {
"url": "http://10.15.122.23:11418/api/v42/dev/sam",
"NodeID":"09212011",
"Info":
[
{"Position":"209","OldNo":"0","NewNo":"0",
"Info":
[
{"SlotNo":"0","OldNo":"0","OldType":"0","NewNo":"20180009000000000000","NewType":"96"},
{"SlotNo":"3","OldNo":"0","OldType":"0","NewNo":"40002020061800000424","NewType":"165"},
{"SlotNo":"1","OldNo":"0","OldType":"0","NewNo":"40000001000000010447","NewType":"64"},
{"SlotNo":"2","OldNo":"0","OldType":"0","NewNo":"40001303004100000000","NewType":"96"}
]
},
{"Position":"211","OldNo":"0","NewNo":"0",
"Info":
[
{"SlotNo":"0","OldNo":"20000050000000000000","OldType":"96","NewNo":"00000000000000000000","NewType":"96"},
{"SlotNo":"1","OldNo":"0","OldType":"0","NewNo":"40000001000000010449","NewType":"64"}
]
}
],
"code": 0,
"req": "api_v42_dev_sam",
"msg": "server ok"
}
}
4、tools/read_more_json.py
import json
#打开json文件并获取文件流
class ReadJson(object):
def __init__(self,filename):
self.filepath="E:/python_code/test_api_case/data/" + filename
def read_json(self):
with open(self.filepath,"r", encoding="utf-8") as f:
#调用load方法加载文件流
return json.load(f)
5、run_suite.py
import time
import unittest
from test_oracle_14.tools.HTMLTestRunner import HTMLTestRunner
suite = unittest.defaultTestLoader.discover('./case_unit', pattern="test_*")
file_path="./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))
# file_path ="./report/{}.html".format(time.strftime("%Y_%m_%d %H_%M_%S"))# 文件名给了{},我们用format进行格式化
with open(file_path,'wb') as f:
HTMLTestRunner(stream=f).run(suite)



