迅捷小莫
本公众号日常更新自动化技术,编程知识,迅捷掌握一切测试工程师需要的技术!
12篇原创内容
公众号
Pytest
在pytest中,用例的执行状态分为下面几种:
-
passed:测试通过
-
failed:测试失败
-
error: 代码错误
-
xfailed: 预期失败
-
xpassed:预期失败,但成功了
-
skipped: 被跳过
passed和failed,error都好理解,但xfailed,xpassed和skipped这种状态怎么产生呢?这需要用到我们pytest中的mark。
01
skip跳过测试
pytest中为我们提供了@pytest.mark.skip和@pytest.mark.skipif 两个方法可以帮助我们来跳过测试。
import pytest # 导入pytest
@pytest.mark.skip(reason="跳过") # 让test_001不执行 ,跳过
def test_001():
print("test_001 done")
def test_002():
print("test_002 done")
def test_003():
print("test_003 done")
if __name__ == '__main__': # 定义主函数
pytest.main() # 调用pytest
我们在tesst_001函数上使用了@pytest.mark.skip,并且指定了reason,这里的reason指的是原因。这样的话,在执行测试的时候,就不会去执行test_001
执行结果:
============================= test session starts ==============================
platform darwin -- Python 3.8.2, pytest-6.2.1, py-1.10.0, pluggy-0.13.1 -- /Users/zhangyingkai/PycharmProjects/pytest_demo/venv/bin/python
cachedir: .pytest_cache
rootdir: /Users/zhangyingkai/PycharmProjects/pytest_demo, configfile: pytest.ini
collecting ... collected 3 items
test_pytest.py::test_001 SKIPPED (跳过) [ 33%]
Skipped: 跳过
test_pytest.py::test_002 PASSED [ 66%]test_002 done
test_pytest.py::test_003 PASSED [100%]test_003 done
========================= 2 passed, 1 skipped in 0.02s =========================
可以看到test_001已经被跳过了,最终的统计结果为2 passed, 1 skipped in 0.02s,两个测试用例被跳过。
假如我们想在是否跳过加上判断条件的话,就需要用到@pytest.mark.skipif:
import pytest # 导入pytest
@pytest.mark.skip(reason="跳过")
def test_001():
print("test_001 done")
@pytest.mark.skipif(True, reason="跳过")
def test_002():
print("test_002 done")
@pytest.mark.skipif(False, reason="跳过")
def test_003():
print("test_003 done")
if __name__ == '__main__': # 定义主函数
pytest.main() # 调用pytest
skipif我们第一个参数为boolean,所以我们传入True和False分别看一下效果,结果如下:
collecting ... collected 3 items
test_pytest.py::test_001 SKIPPED (跳过) [ 33%]
Skipped: 跳过
test_pytest.py::test_002 SKIPPED (跳过) [ 66%]
Skipped: 跳过
test_pytest.py::test_003 PASSED [100%]test_003 done
========================= 1 passed, 2 skipped in 0.02s =========================
此时跳过了2条用例,skipif为True的用例test_002被跳过,而为False没被跳过。
02
标记测试用例预期失败
有时候当我们的测试用例没有编写完毕,或者因为一些bug没有处理,导致用例一定执行失败的时候,我们希望去执行他,不去跳过他,但是又不希望会影响到最终的执行成功的结果,那么就可以把它标记为预期失败。在pytest中,我们使用@pytest.mark.xfail来标记。
import pytest # 导入pytest
@pytest.mark.xfail(reason="预期失败") # 标记测试预期失败
def test_001():
print("test_001 done")
def test_002():
print("test_002 done")
def test_003():
print("test_003 done")
if __name__ == '__main__': # 定义主函数
pytest.main() # 调用pytest
在上面我们把test_001标记为预期失败,让我们看一下执行的结果:
XPASS (预期失败) [ 33%]test_001 done
test_pytest.py::test_002 PASSED [ 66%]test_002 done
test_pytest.py::test_003 PASSED [100%]test_003 done
========================= 2 passed, 1 xpassed in 0.02s =========================
可以看到现在的状态是XPASS,这里可能有人会问,为什么不是XFAIL呢?这是因为此时用例虽然是预期失败的,但是它并没有失败,而是成功了,pytest认为这种用例是XPASS的。我们给他改一改:
@pytest.mark.xfail(reason="预期失败") # 标记测试预期失败
def test_001():
print("test_001 done")
assert False # 手动抛出异常
那么此时该用例的状态就是XFAIL了:
XFAIL (预期失败) [ 33%]test_001 done
@pytest.mark.xfail(reason="预期失败") # 标记测试预期失败
def test_001():
print("test_001 done")
> assert False
E assert False
test_pytest.py:7: AssertionError
那今天分享的内容到此结束,本期内容很简单,快速掌握。
迅捷小莫
本公众号日常更新自动化技术,编程知识,迅捷掌握一切测试工程师需要的技术!
12篇原创内容
公众号
@SUMMER
微信号
ya1kaikai