测开学习-进阶函数-装饰器拓展实现 DDT

装饰器扩展练习-实现DDT

题目:自己实现 unittest 中 数据驱动中使用到的 ddt

import unittest
from functools import wraps

def data(*args):
    """
    装饰 方法的
    :param args: 传入的参数
    :return:
    """
    def wrapper(func):
        setattr(func, "PARAMS", args)
        # func.PARAMS = args
        return func
    return wrapper

def add_value(func, new_name, *args):
	""
	对方法进行传参操作
	""
    @wraps(func)
    def wrapper(self):
        return func(self, *args)
    wrapper.__name__ = new_name
    # wrapper.__wrapped__ = func
    return wrapper


def ddt(cls):
    """
    装饰 类的
    :param cls: 类对象
    :return:
    """
    # 获取到 类里 全部的对象 方法以及 属性
    dict_method = cls.__dict__
    for method_name, method_value in list(dict_method.items()):
        # 判断是否有 PARAMS 对应的属性
        if hasattr(method_value, "PARAMS"):
            # 获取 方法里 params 的属性
            params_data = getattr(method_value,"PARAMS")
            for i, value in enumerate(params_data):
                case_name = f'{method_name}_{value}'
                # 给类对象中设置新方法,并且将 参数输入到 方法中
                setattr(cls, case_name, add_value(method_value, case_name, value))
            # 删除类对象中初始方法
            delattr(cls, method_name)
    return cls



@ddt
class Demo(unittest.TestCase):

    @data("1221", "22", 33, 44, 55, 66)
    def test_demo1(self, param):
        print(f"这个是测试用例,用例的参数为:{param}")

执行后的效果是:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值