参数化单元测试
步骤1:编写测试方法
例如:http_request.py
import requests class HttpRequest: """requests请求需要转入的参数""" def http_request(self,method, url, data,auth = None,headers =None ): '''url:请求地址 http://xxxx:port param:传递的参数 非必填参数 字典的格式传递参数 method:请求方式 支持get,post,put... get:获取信息,post:添加信息,put:修改更新信息 ''' if method.lower() in ('get','post','put','patch'): if method.lower() == 'get': res = requests.get(url, data, auth = auth, headers= headers) elif method.lower() == 'post': res = requests.post(url, data, headers = headers) elif method.lower() == 'put': res = requests.put(url, data, headers = headers) else: res = requests.patch(url, data, headers = headers) return res else: raise Exception('暂不支持的请求方式')
步骤2:测试用例执行的方法
初始化headers(get_data.py)--->该步骤还有其他很多种方法实现
class GetData: headers = {'X-Lemonban-Media-Type': 'lemonban.v2', 'Content-Type': 'application/json; charset=UTF-8','Authorization':None}
测试用例执行的方法:test_http.py
class TestHttp(unittest.TestCase): def setUp(self): pass def __init__(self,methodName,url,data,method,expected,...): # 通过初始化函数来传参数 super(TestHttp,self).__init__(methodName) # 保留父类的方法 self.url = url self.data = data self.method = method self.expected = expected def test_apiName1(self): # 调用步骤1中的方法,实现测试用例的执行方法 ... res = HttpRequest().http_request(self.url, json.dumps(self.data), self.method,getattr(GetData,'headers')) # 处理测试结果 try: self.assertEqual(self.expected,res.json()['code']) except AssertionError as e: print("test_login_api error is {}".format(e)) raise e print(res.json()) def test_apiName2(self): # 同test_apiName1 def tearDown(self): pass
步骤3:用例参数及执行用例,生成测试报告test_suite.py
import unittest import time from test_http import TestHttp # 类名 import HTMLTestRunner url1 =url1_value url2= url2_value test_data1 = [{'url':url1 ,'data':{'xxx': 'xxxx'},'method':'xxx','expected':'xxx',...},{第2条用例参数}...] test_data2 = [{'url':url1 ,'data':{'xxx': 'xxxx'},'method':'xxx','expected':'xxx',...},{第2条用例参数}...] suite = unittest.TestSuite() for item in test_data1 : # 创建实例 suite.addTest(TestHttp("test_apiName1",item['url'],item['data'],item['method'],item['expected']...)) # 实例的方式加载用例 for item in test_data2 : suite.addTest(TestHttp("test_apiName2",item['url'],item['data'],item['method'],item['expected']...)) with open(str(time.strftime('%Y-%m-%d',time.localtime(time.time())))+'test_report_Parameterization.html','wb') as file: runner = HTMLTestRunner.HTMLTestRunner(stream=file, verbosity=2, title= time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) +'测试报告标题', description='测试报告描述' ) runner.run(suite) if __name__== '__main__': unittest.TestCase()