我想为allure.step编写装饰器,将返回值添加到诱人步骤中。
第一种方式:
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日志:

返回值已添加,但参数被合并到一个元组中。我可以通过添加更多的内部步骤来修复它:
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日志:

但我不喜欢这个解决方案,因为我需要在检查日志时再点击一次:)
有没有可能用正确的参数编写装饰器,而不需要额外的内部步骤?或任何其他方式来实现所需的结果。
发布于 2021-10-07 16:58:16
我知道已经过去了很长时间,但是你可以这样做:
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
https://stackoverflow.com/questions/65458813
复制相似问题