import os import unittest from library.ddt import ddt,data # ddt数据驱动 from com.doexcel import DoExcel # 操作excel数据 from com.contants import DATA_DIR # 测试用例模块所在目录 from com.myconf import conf #读取配置文件 from com.log import my_log # 日志处理对象 from com.handle_data import Header,replace_data,TestData # 数据处理 from com.handle_request import HandleRequest # http请求方法 from com.mysql import MySql # 导入数据库 excel_path = os.path.join(DATA_DIR,"testexcel.xlsx") # excel路径 @ddt class TestClassName(unittest.TestCase): excel = DoExcel(excel_path, "register") cases = excel.read_data() # 读取excel数据 http = HandleRequest() # 创建http请求对象 mysql = MySql() # 创建数据库对象 @classmethod def setUpClass(cls): my_log.info("---------------开始执行TestClassName类测试用例---------") def setUp(self): pass # 每条用例执行之前都会执行 @data(*cases) def test_methodName(self,case): # -----------------------第一步:准备用例数据------------------------------------- # 用例方法参数 # 请求url url = conf.get('url_info', 'url_base')+ case["url"] # 请求方法 method = case["method"] # 数据替换 case['data'] = replace_data(case['data']) # excel中读的数据类型str转为json data = eval(case["data"]) # 请求头 headers = getattr(Header, 'headers') # 将token加到请求头中 headers['Authorization'] = getattr(TestData, 'token') # 预期结果 expected = eval(case['expected']) # 该用例在表单中所在行 row = int(case['case_id']) + 1 #-----------------------第二步:发送请求到接口,获取实际结果------------------------------------- result = self.http.send(url = url,method = method,json = data,headers = headers).json() TestResult = 'FAIL' # 测试对比结果:默认为失败 try: self.assertEqual(expected ['code'], result['code']) TestResult = 'PASS' my_log.info("执行用例:{0}--->执行通过".format(case["title"])) # 将测试结果写入日志文件 except AssertionError as e: my_log.info("执行用例:{0}--->未执行通过,出错位置为:{1}".format(case["title"], e)) # 将测试报错结果写入日志文件 raise e finally: self.excel.write_data(row = row, column = 9,value = str(result)) # 回写执行结果 self.excel.write_data(row = row,column = 9,value = TestResult) # 回写比对结果 def tearDown(self): pass # 每条用例执行之后都会执行 @classmethod def tearDownClass(cls): my_log.info("---------------结束执行TestClassName类测试用例---------") if __name__ == '__main__': unittest.main() |