参数化有三种,代码驱动,数据驱动,关键字驱动
代码驱动,测试数据写在代码中 如下:
import requests,json
import unittest
import BeautifulReport
fido_url = 'http://192.168.6.162:8080/uaf/reg/receive'
'''代码驱动,代码实现做参数化的例子'''
reg_receive_data1 = {
"context": {
"appID":"1103",
"transNo":"1234567890",
"userName":"mh",
"transType":"00",
"authType":"01",
"opType":"00",
"devices":{"deviceName": "HUA WEI", "deviceType": "iPhone 7", "deviceID": "0987654321"}
}
}
reg_receive_data2 = {
"context": {
"appID":"",
"transNo":"1234567890",
"userName":"mh",
"transType":"00",
"authType":"01",
"opType":"00",
"devices":{"deviceName": "HUA WEI", "deviceType": "iPhone 7", "deviceID": "0987654321"}
}
}
headers = {
"Connection": "keep-alive",
"Content-Type": "application/json",
"Content-Length": "369",
"Host": "192.168.6.162:8080",
"User-Agent": "Apache-HttpClient/4.2.6 (java 1.5)"
}
def fido_reg(url,data,headers):
r = requests.post(url=url,data=json.dumps(data),headers=headers).json()
return r
print(fido_reg(fido_url,reg_receive_data1,headers))#正常的返回
class Reg_receive(unittest.TestCase):
def test(self):
'''请求正常'''
result = fido_reg(fido_url,reg_receive_data1,headers)
self.assertEqual(1200,result.get('statusCode'))
self.assertEqual('OK',result.get('description'))
def test_02(self):
'''appid为空'''
result = fido_reg(fido_url,reg_receive_data2,headers)
self.assertEqual(1401,result.get('statusCode'))
self.assertEqual('Parameter- appID is EMPTY',result.get('description'))
bf = BeautifulReport.BeautifulReport(unittest.makeSuite(Reg_receive))
bf.report(filename='测试报告1',description='接口测试报告')
数据驱动,代码读取excel,或txt
import xlrd
import requests
import unittest
import BeautifulReport as bf
import time
import parameterized
import json
path = 'testcase_adapter.xlsx'#定义测试用例名字
testreport = time.strftime('%Y%m%d',time.localtime())#定义测试报告名字
class Op_excel:
def r_excel(self,path):
r_workbook = xlrd.open_workbook(path)
r_sheet = r_workbook.sheets()[0]
return r_sheet,r_workbook
#读excel
def get_nrows(self,r_sheet):
nrows = r_sheet.nrows
return nrows
e = Op_excel()#实例化一个操作excel的类的对象
newsheet = e.r_excel(path)[0]#对象调用类的操作读excel方法返回操作的sheet给newsheet
newnrows = e.get_nrows(newsheet)#对象调用类返回行数nrow给newrows
testdata = []
for i in range(1,newnrows):#循环读取excel中的测试用例,把用例加到testdata中生成二维数组
testdata.append(newsheet.row_values(i))
def reg_receive(url,data,headers):#定义发送的post请求
r = requests.post(url=url,data=json.dumps(data),headers=headers).json()
return r
class Test_case(unittest.TestCase):
@classmethod #类函数,执行测试用例开始前执行
def setUpClass(cls):
print('接口测试开始')
@classmethod #类函数,执行测试用例结束后候执行
def tearDownClass(cls):
print('接口测试结束')
@parameterized.parameterized.expand(testdata)#testdata是存的excel中的测试case
def test_reg_receive(self,url,data,headers,expect,desc):
'''测试用例'''
self._testMethodName=desc#desc是对用例的描述
result = reg_receive(url,json.loads(data),json.loads(headers))
statuscode = result['statusCode']#返回状态码
self.assertEqual(int(expect),statuscode)#与测试用例中的状态码进行比对
# unittest.main()
bf = bf.BeautifulReport(unittest.makeSuite(Test_case))
bf.report(filename=testreport,description='接口测试报告')
