#str--->dict eval json loads #接口自动化的流程 写用例---执行用例---报告 #unittest #case 测试用例 #suite 测试套件 #loader 加载测试用例 #run 执行测试用例 #result 测试结果 测试报告 #main(程序的入口) 收集当前模块的unittest的用例 #mock 模拟测试 #TestCase setUP tearDown run assertEqual #TestLoader loadTestFromModule loadTestFromName #TestSuite addTest addTests run #HTMLTestRunnerNew do_excel = DoExcel(contants.case_file) rest = do_excel.get_data('login') request = Request() # 实例化对象 for item in rest: print("开始执行第{}用例".format(item.id)) # 从excel里面读出来的数据是一个个的字符串,所以需要转换 #使用封装好的request 来完成请求 resp = request.request(item.method, item.url, item.data) #将返回结果和期望结果进行匹配 if resp.text == item.expected: #一致就写入excel的结果为PASS, do_excel.write_result('login', item.id + 1, resp.text, 'PASS') # item.id+1是当前的row,resp.text真实值 print("第{}用例执行结果:PASS".format(item.id)) else: do_excel.write_result('login', item.id + 1, resp.text, 'FAIL') print("第{}用例执行结果:FAIL".format(item.id))
import unittest from common.do_excel import DoExcel from common import contants from libext.ddt import ddt, data from common.request import Request from common.logger import get_logger request = Request() do_excel = DoExcel(contants.data_file) cases = do_excel.get_data('login') logger = get_logger('login') @ddt class LoginTest(unittest.TestCase): def setUp(self): pass @data(*cases) def test_login(self, case): logger.info('开始执行第{}条用例'.format(case.case_id)) res = request.request(case.method, case.url, case.data) logger.info(res.text) try: self.assertEqual(case.expected, res.text, 'login error') do_excel.write_back(case.case_id + 1, res.text, 'PASS') except AssertionError as e: logger.error('断言错误:{}'.format(e)) do_excel.write_back(case.case_id + 1, res.text, 'Failed') raise e
import unittest from libext.ddt import ddt, data from common.do_excel import DoExcel from common.request import Request from common import contants from common.read_config import ReadConfig from common.logger import get_logger from common.connect_mysql import MysqlUtil import json from common import context do_excel = DoExcel(contants.case_dir, 'login') cases = do_excel.get_data() readconfig = ReadConfig() path_url = readconfig.get_value('url', 'path_url') #这些放到类里面也可以,用self调用 logger = get_logger('login') @ddt class TestLogin(unittest.TestCase): # 继承TestCase类 @classmethod def setUpClass(cls): # TestRecharge类执行前执行一次 类方法 cls.request = Request( ) # 实例化对象 Request() 实例化为了传递cookies,Request初始化的时候有session的对象 cls.mysql = MysqlUtil() # 实例化一个对象 def setUp(self): pass @data(*cases) def test_login(self, case):
import unittest from common.read_path import * from common.http_request import HttpRequest from common.do_excel import DoExcel from common.get_data import GetData from ddt import ddt, data from common.do_mysql import DoMysql testdata = DoExcel.get_data(testcase_path) @ddt class TestHttpRequest(unittest.TestCase): def setUp(self): pass @data(*testdata) def test_api(self, item): passorfail = None #请求之前完成loanid的替换 if item['data'].find('${loanid}') != -1: if getattr(GetData, 'loanid') == None: id = DoMysql.cnn_db( 'select max(id) from loan where memberid=82')[0] item['data'] = str(item['data']).replace('${loanid}', str(id)) setattr(GetData, 'loanId', id) #利用反射去存储结果 else: item['data'] = str(item['data']).replace( '${loanid}', str(getattr(GetData, 'LoanId'))) #判断sql语句 if item['sql'] == None: #没有sql语句时 print('正在执行的用例是:第{}条用例'.format(item['case_id']))