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()