使用参数化模块链接装饰器
Chaining decorators with parameterized module
我正在寻求特定问题的帮助。
我们正在编写测试套件,其中一个测试用例包含一个 class,其中包含一个函数。这个函数是我们的测试用例。
测试用例由 htmltestrunner 执行。
如果一些测试用例针对不同的参数测试相似的行为,我们在模块 parameterezy 的帮助下参数化这个测试用例 - 指定:with parameterize.expand 这是一个包装器。
现在,为了进行更高效的日志记录,我们想在一个单独的模块中编写一个函数,称为扩展日志记录。这应该作为 PARAMETERIZED 函数的包装器。
所以这意味着:
参数化 -> WRAPS -> 高级日志记录 -> WRAPS -> 测试用例函数
没有我为我的高级日志记录功能编写了以下代码(仅用于调试和测试):
def decorator_func(func):
print(Fore.RED +"Got into decorator_func")
def wrapped_func(*args, **kwargs):
print(Fore.GREEN + "Got into wrapped_func")
try:
print("Got in")
retval = func(*args, **kwargs)
print("Finished")
except Exception as failure:
print("FAILURE: " + str(failure))
if type(failure) == AssertionError:
print("ASSERTION ERROR")
raise
else:
raise
return retval
return wrapped_func
当我不使用参数化包装器来参数化我的测试用例时,该函数有效。
如果我使用参数化包装器,我会失败:'NoneType' object is not callable.
有人可以帮我吗?
找了一整天。
编辑:
我已经发现,parameterized.expand returns “NoneType Object”。有什么方法可以从 parameterized.expand 获取修饰函数作为 return?
我通过在我的内部函数上添加 @wrap(func) 解决了这个问题:
def decorator_func(func):
print(Fore.RED +"Got into decorator_func")
@wrap(func)
def wrapped_func(*args, **kwargs):
print(Fore.GREEN + "Got into wrapped_func")
try:
print("Got in")
retval = func(*args, **kwargs)
print("Finished")
except Exception as failure:
print("FAILURE: " + str(failure))
if type(failure) == AssertionError:
print("ASSERTION ERROR")
raise
else:
raise
return retval
return wrapped_func
我不知道它为什么有效,但它确实有效。
我正在寻求特定问题的帮助。 我们正在编写测试套件,其中一个测试用例包含一个 class,其中包含一个函数。这个函数是我们的测试用例。 测试用例由 htmltestrunner 执行。 如果一些测试用例针对不同的参数测试相似的行为,我们在模块 parameterezy 的帮助下参数化这个测试用例 - 指定:with parameterize.expand 这是一个包装器。 现在,为了进行更高效的日志记录,我们想在一个单独的模块中编写一个函数,称为扩展日志记录。这应该作为 PARAMETERIZED 函数的包装器。
所以这意味着: 参数化 -> WRAPS -> 高级日志记录 -> WRAPS -> 测试用例函数
没有我为我的高级日志记录功能编写了以下代码(仅用于调试和测试):
def decorator_func(func):
print(Fore.RED +"Got into decorator_func")
def wrapped_func(*args, **kwargs):
print(Fore.GREEN + "Got into wrapped_func")
try:
print("Got in")
retval = func(*args, **kwargs)
print("Finished")
except Exception as failure:
print("FAILURE: " + str(failure))
if type(failure) == AssertionError:
print("ASSERTION ERROR")
raise
else:
raise
return retval
return wrapped_func
当我不使用参数化包装器来参数化我的测试用例时,该函数有效。 如果我使用参数化包装器,我会失败:'NoneType' object is not callable.
有人可以帮我吗? 找了一整天。
编辑: 我已经发现,parameterized.expand returns “NoneType Object”。有什么方法可以从 parameterized.expand 获取修饰函数作为 return?
我通过在我的内部函数上添加 @wrap(func) 解决了这个问题:
def decorator_func(func):
print(Fore.RED +"Got into decorator_func")
@wrap(func)
def wrapped_func(*args, **kwargs):
print(Fore.GREEN + "Got into wrapped_func")
try:
print("Got in")
retval = func(*args, **kwargs)
print("Finished")
except Exception as failure:
print("FAILURE: " + str(failure))
if type(failure) == AssertionError:
print("ASSERTION ERROR")
raise
else:
raise
return retval
return wrapped_func
我不知道它为什么有效,但它确实有效。