unittest跳过用例用哪个函数
时间: 2023-06-17 21:03:53 浏览: 169
在 Python 的 unittest 模块中,可以使用 `@unittest.skip(reason)` 装饰器来跳过某个测试用例。其中,`reason` 是跳过该用例的原因说明。此外,还可以使用 `@unittest.skipIf(condition, reason)` 或 `@unittest.skipUnless(condition, reason)` 装饰器来根据条件决定是否跳过该用例。其中,`condition` 是条件表达式,`reason` 是跳过该用例的原因说明。
相关问题
def wraper_func(test_func): @wraps(test_func) # @wraps:避免被装饰函数自身的信息丢失 def inner_func(self): failures = str([fail[0] for fail in self._outcome.result.failures]) flag = (test_func in failures) if failures.find(test_func) != -1: test = unittest.skipIf(flag, "{} failed".format(test_func))(test_func) else: test = test_func return test(self) return inner_func 写的装饰器判断函数为这个,为什么上条用例跳过了,下条还是会跳过,而不是失败时才会跳过用例
根据你提供的代码,我可以看出这是一个装饰器函数,用于判断某个测试函数是否在测试结果的失败列表中。如果在失败列表中,则使用unittest.skipIf将该测试函数跳过。如果不在失败列表中,则直接执行该测试函数。
如果你发现上一条用例跳过了,而下一条用例仍然跳过,这可能是因为你的测试函数在多个测试用例中都被调用了,而且在其中一个测试用例中出现了失败。因此,该测试函数将被跳过,无论它是在哪个测试用例中调用。
解决这个问题的方法是在测试函数中添加一个条件,仅当测试在当前用例中运行时才跳过该测试。你可以通过检查unittest.TestCase实例的_id()是否与当前用例的id相同来实现这一点。例如:
```
import unittest
from functools import wraps
def skip_if_failed(test_func):
@wraps(test_func)
def inner_func(self):
failures = [fail[0] for fail in self._outcome.result.failures]
if test_func.__name__ in failures:
if self._id() == self._testMethodName:
test = unittest.skip("{} failed".format(test_func.__name__))(test_func)
else:
test = test_func
else:
test = test_func
return test(self)
return inner_func
```
在这个修改后的版本中,我们首先获取了所有失败的测试函数名称,并将其存储在failures列表中。然后,我们检查当前测试函数是否在失败列表中,以及当前测试函数的id是否与当前测试用例的id相同。只有在这两个条件都满足时,我们才会将测试函数跳过,否则我们将正常地执行它。
self._outcome.result 获取上一条用例的执行结果怎么写一个跳过装饰器函数
如果你想在测试过程中跳过某些测试用例,也可以使用 unittest 框架中的 @unittest.skipIf 或 @unittest.skipUnless 装饰器函数。这两个装饰器函数可以根据指定的条件来决定是否跳过测试用例。使用 @unittest.skipIf 或 @unittest.skipUnless 装饰器函数跳过测试用例时,也可能会影响上一条用例的执行结果,因为跳过的测试用例不会被执行。如果你想获取跳过的测试用例的执行结果,可以使用 @unittest.skipIf 或 @unittest.skipUnless 装饰器函数的 `reason` 参数来指定跳过该测试用例的原因。具体的代码如下:
```python
import unittest
def is_skip():
# 这里是判断是否跳过测试用例的逻辑,返回 True 或 False
return True
class MyTests(unittest.TestCase):
def test_something(self):
# 这里是测试用例的代码
pass
@unittest.skipIf(is_skip(), reason="这个测试用例被跳过了")
def test_another_thing(self):
# 这里是测试用例的代码
pass
if __name__ == '__main__':
# 运行测试用例并获取 TestResult 对象
result = unittest.TextTestRunner().run(unittest.TestLoader().loadTestsFromTestCase(MyTests))
# 获取上一条用例的执行结果
last_result = result.failures[-1] if result.failures else result.errors[-1] if result.errors else None
```
这段代码中,我们定义了一个判断是否跳过测试用例的函数 is_skip,并在第二个测试用例上使用了 @unittest.skipIf 装饰器函数,并指定了跳过该测试用例的条件和原因。在运行测试用例并获取 TestResult 对象后,我们可以通过 TestResult 对象的 failures 和 errors 属性来获取测试失败和错误的信息,从而获取上一条用例的执行结果。如果上一条用例执行成功,且没有其他测试用例被跳过或失败,那么 last_result 变量的值为 None。
阅读全文