通过装饰器实现获取当前执行的用例名称

Posted jiyanjiao-702521

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过装饰器实现获取当前执行的用例名称相关的知识,希望对你有一定的参考价值。

import inspect
"""
动态获取用例名称,并赋值给用例调用类中的某个固定参数pvid
通过装饰器的调用,可以在用例执行时将用例名称动态传给pvid,同时,如果用例名称不满足要求,pvid保持默认值pvid_test
"""


def get_current_function_name():
    """
    inspect.stack():动态获取运行的函数名
    """
    return inspect.stack()


def wrap_class(cls):
    """
    函数装饰类装饰器
    :param cls:
    :return:
    """
    def inner(**kwargs):
        res = get_current_function_name()
        func_names = [res[2][3], res[1][3], res[0][3]]
        print(func_names)
        
        case_name = ‘‘
        for func_name in func_names:
            if func_name.startswith(test_):
                case_name = func_name
                break
        if case_name.startswith(test_):
            return cls(pvid=case_name)
        else:
            return cls(**kwargs)
    return inner


@wrap_class
class ModuleProto:
    """
    测试用例中调用的类
    """
    def __init__(self, **kwargs):
        self.proto = {
            "pvid": "pvid_test"
        }
        if "pvid" in kwargs.keys():
            self.proto["pvid"] = kwargs["pvid"]
            
            
def test_case_1():
    """
    测试用例
    :return:
    """
    module_proto = ModuleProto()
    print("pvid: ", module_proto.proto[pvid])
  
  
if __name__ == __main__:
    test_case_1()

 

以上是关于通过装饰器实现获取当前执行的用例名称的主要内容,如果未能解决你的问题,请参考以下文章

pytest运行方式及装饰器的使用

用例之间如何建立依赖关系?需要这个工具

pytest接口自动化测试框架 | 使用装饰器修饰需要运行的用例

python自动测试Pytest中Fixture装饰器

Selenium2+python自动化70-unittest之跳过用例(skip)转载

实现类似的用例看起来像代码重复