我们在接口自动化测试时,每个接口传参都不止一个情况,以登录接口为例。一般情况下会考虑正向、逆向组合,所以,一个登录接口就会有很多例,这些用例除了参数以后没什么区别,这个时候就我们就可以利用DDT来管理我们的测试数据。excel.xlsx中最好将一个接口的测试用例放到一个表单中
""" @Title --- selenium +pytest @Autgor --- fang @Aphorism --- 白天撸代码 ,晚上洗霸王 !!! """ import unittest from common.excel_handler import ExcelHandler from config.setting import config from libs import ddt from common.requests_handler import RequestsHandler import json from middleware.log_logger import logger from middleware.helper import replace_label @ddt.ddt class TestLogin(unittest.TestCase): #从xlsx中获取数据 excel_handler = ExcelHandler(config.data_path) data = excel_handler.read("login") def setUp(self) -> None: """ 前置条件 :return: """ self.req =RequestsHandler() def tearDown(self) -> None: """ 后置条件 :return: """ self.req.close_session() @ddt.data(*data) def test_login(self,test_data): """ DDT获取excel数据 :return: test_data 通过包含去断言是否正确,需要将预期结果进行转换 TOOD:通过replace_lable替换动态参数时,context类里面的属性名称必须与excel里面的一致。切记 """ test_data['json']= replace_label(test_data['json']) res = self.req.visit(config.base_path + test_data['url'], method=test_data['method'], json=json.loads(test_data['json']) ) case_expect = eval(test_data['expect']) try: self.assert_dict_item(case_expect,res) logger.info('{}-----> 执行通过'.format(test_data['case_name'])) self.excel_handler.write(config.data_path, 'login', test_data['case_id'] + 1, 8, 'PASS') except AssertionError as e: logger.info('{}-----> 执行失败{}'.format(test_data['case_name'],e)) self.excel_handler.write(config.data_path,'login',test_data['case_id']+1,8,'FAIL') raise e def assert_dict_item(self, dict1, dict2): """ 断言dic1中的所有元素都是diac2中的成员,成立返回True,不成立引发断言错误 :param dic1: 字典 :param dic2: 字典 :return: """ for item in dict1.items(): if item not in dict2.items(): raise AssertionError("{} items not in {}".format(dict1, dict2))
这样,就可以实现以个批量数据读取,解决了代码的复用性问题。
--------持续学习,最怕本可以--------
*****尊重原创,转载注明出处*****
浙公网安备 33010602011771号