首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >allure.step的装饰器

allure.step的装饰器
EN

Stack Overflow用户
提问于 2020-12-27 01:15:36
回答 1查看 155关注 0票数 0

我想为allure.step编写装饰器,将返回值添加到诱人步骤中。

第一种方式:

代码语言:javascript
复制
import allure

def allure_step(step):
    def wrap(*args, **kwargs):
        def wrap_func(*args, **kwargs):
            result = step(*args, **kwargs)
            with allure.step("Return: {}".format(result)):
                pass
            return result
        result = allure.step(step.__name__)(wrap_func)(*args, **kwargs)
        return result
    return wrap


@allure_step
def my_sum(a, b):
    return a + b

日志:

返回值已添加,但参数被合并到一个元组中。我可以通过添加更多的内部步骤来修复它:

代码语言:javascript
复制
import allure

def allure_step(step):
    def wrap(*args, **kwargs):
        with allure.step(step.__name__):
            result = allure.step("internal step")(step)(*args, **kwargs)
            with allure.step("Return: {}".format(result)):
                pass
        return result
    return wrap

@allure_step
def my_sum(a, b):
    return a + b

日志:

但我不喜欢这个解决方案,因为我需要在检查日志时再点击一次:)

有没有可能用正确的参数编写装饰器,而不需要额外的内部步骤?或任何其他方式来实现所需的结果。

EN

回答 1

Stack Overflow用户

发布于 2021-10-07 16:58:16

我知道已经过去了很长时间,但是你可以这样做:

代码语言:javascript
复制
def allure_step(step):
    def wrap(*args, **kwargs):
        def wrap_func(**kwargs):
            result = step(**kwargs)
            with allure.step("Результат: {}".format(result)):
                pass
            return result
        keys = step.__code__.co_varnames
        params = {}
        for arg, key in zip(args, keys):
            params[key] = arg
        for i in kwargs:
            params[i] = kwargs[i]
        result = allure.step(step.__name__)(wrap_func)(**params)
        return result
    return wrap

重点是传递字典,而不是args

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65458813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档