1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # -*- coding: utf-8 -*-
- import copy
- import allure
- from apirun.Log.Log import logger
- from apirun.extend.keywords import KeyWords
- from apirun.utils.VarRender import refresh # 变量渲染方法
- from apirun.utils.DynamicTitle import dynamicTitle # 测试标题生成
- from apirun.core.globalContext import g_context # 全局变量
- class TestRunner:
- # TODO 1: 读取到对应的数据
- # caseinfo = case_parser("excel","./examples") # 参数
- # TODO 2: 生成全量测试数据
- # @pytest.mark.parametrize("caseinfo", caseinfo["case_infos"])
- def test_case_execute(self, caseinfo):
- casename = caseinfo["_case_name"]
- # TODO 2-1 : 调用动态生成标题的方法
- dynamicTitle(caseinfo)
- # TODO 2-2: 基于我们步骤一步步进行执行
- try:
- # 实例化关键字对象
- keywords = KeyWords()
- # 获取当前用例变量,方便后续的渲染
- local_context = caseinfo.get("context",{})
- context = copy.deepcopy(g_context().show_dict())
- context.update(local_context)
- steps = caseinfo.get("steps", None)
- logger.info(f"-----------------开始执行测试用例:{steps}-------------")
- for index,step in enumerate(steps):
- # 提示信息
- step_name = list(step.keys())[0]
- step_value = list(step.values())[0]
- # TODO : 每一个步骤进行变量的渲染
- context = copy.deepcopy(g_context().show_dict())
- context.update(local_context)
- step_value = eval(refresh(step_value, context))
- logger.info(f"测试用例名称:{casename},开始执行步骤{index}:{step_name} - {step_value}")
- # 基于每个步骤的关键字,找到对应的方法,然后把参数给它
- # 通过【反射】的方式去找到对应的方法
- with allure.step(step_name):
- key = step_value["关键字"] # 具体的方法名, 在 keywords 里面找到这个方法
- try:
- key_func = keywords.__getattribute__(key) # 从keywords获取到对应方法
- except AttributeError as e:
- logger.error(f"测试用例名称:{casename},没有这个关键字方法", e)
- key_func(**step_value) # 调用方法
- finally:
- logger.info(f"-------------------测试用例名称:{casename}执行结束----------------------")
|