pytest用例标记和测试执行篇

上一篇文章入门篇咱们介绍了pytest的前后置方法和fixture机制,这个章节主要给大家介绍pytest中的标记机制和用例执行的方法。pytest可以通过标记将数据传入于测试函数中,也可以通过标记中对执行的用例做筛选,接下来直接进入正题。

一、pytest中内置的标记

pytest标记使用需要通过pytest.mark.标记来使用,pytest中为应对各种测试场景也内置了很多的标记。

1.1、pytest.mark.parametrize:用例参数化的标记

通过parametrize可以将用例数据和用例执行的逻辑代码分离,并实现根据用例,自动生成测试用例。

Demo:

  1. @pytest.mark.parametrize('item',[11,22,33,44,55,66])

  2. def test_demo(item)

  3. assert item > 50

1.2、pytest.mark.skip:跳过用例执行

通过skip装饰的用例,在执行的时候会无条件跳过,

参数reason:跳过测试函数的原因。

Demo

  1. # 不写跳过原因

  2. @pytest.mark.skip

  3. def test_demo()

  4. assert item > 50

  5. # 写跳过原因

  6. @pytest.mark.skip(reason='不需要执行')

  7. def test_demo()

  8. assert item > 50

1.3、pytest.mark.skipif:根据条件跳过用例

skipif可以根据条件来决定是否跳过用例的执行, 如果条件为True则跳过测试函数执行。

参数 :condition —跳过的条件

参数 : reason —跳过的原因

Demo

  1. a = 10

  2. @pytest.mark.skipif(a > 20,reason='条件不成立,不执行')

  3. def test_demo()

  4. assert item > 50


1.4、pytest.mark.xfail:标记预期失败的用例

xfail可以将测试函数标记为预期执行失败的用例。

参数 :condition — 将测试函数标记为 xfail 的条件(True/False )

参数 : reason — 测试函数被标记为 xfail 的原因

参数 : raises — 预期失败的异常类型

参数 : run — 是否应该实际执行测试函数。如果False,该函数将始终 xfail 并且不会被执行 。

参数 : strict — 严格模式(True/False )

Demo

  1. a = 10

  2. @pytest.mark.xfail(a > 20,reason='条件不成立,不执行' raises=AssertionError )

  3. def test_demo()

  4. assert item > 50

1.5、pytest.mark.usefixtures:给测试类或模块设置测试夹具

usefixtures标记一般用于给测试类下面的测试方法统一设置测试夹具。

Demo

  1. # TestDome这个测试类的所有测试用例均执行my_fixture这个夹具

  2. @pytest.mark.usefixtures('my_fixture这个夹具')

  3. class TestDome:

  4. # 函数用例 指定测试夹具

  5. def test_02(self):

  6. print('----测试用例:test_01------')

  7. # 函数用例 指定测试夹具

  8. def test_03(self):

  9. print('----测试用例:test_02------')

二、自定义标记

pytest支持通过pytest.ini文件注册自定义的标记。以满足执行用例时,通过标记对用例进行筛选.,

2.1、注册标记

pytest.ini文件注册标记的语法如下:

  1. [pytest]

  2. markers =

  3. 标记1

  4. 标记2

2.2、标记函数

Demo:

  1. # 用例前面加载标签:@pytest.mark.标签名

  2. @pytest.mark.main

  3. def test_demo():

  4. pass

2.3、标记类

Demo:

  1. # 方式一:直接类上面打标记

  2. @pytest.mark.main

  3. class TestClass(object):

  4. def test_demo1(self):

  5. assert 10 > 20

  6. # 方式二:通过类属性pytestmark,可以同时添加多个标记

  7. class TestClass(object):

  8. pytestmark = [pytest.mark.main, pytest.mark.main]

  9. def test_demo1(self):

  10. assert 10 > 20

三、通过标记筛选用例执行

Demo:现有用例如下:

  1. import pytest

  2. @pytest.mark.yuze

  3. @pytest.mark.musen

  4. def test_01():

  5. print("用例一")

  6. def test_02():

  7. print("用例二")

  8. @pytest.mark.musen

  9. def test_03():

  10. print("用例三")

  11. @pytest.mark.musen

  12. def test_04():

  13. print("用例四")

  14. @pytest.mark.yuze

  15. def test_05():

  16. print("用例五")

  17. @pytest.mark.yuze

  18. def test_06():

  19. print("用例六")

上面Demo中有6条测试用例,分别通过pytest.mark.yuze和pytest.mark.musen进行标记了,接下来我们一起来看看如何通过标记选择用例执行。

3.1、通过单个标记筛选

语法:pytest -m '标签名'
Demo: pytest -m musen

执行结果如下:


  1. ========================== test session starts ==========================

  2. platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0

  3. rootdir: C:\project\, inifile: pytest.ini

  4. plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2

  5. collected 6 items / 3 deselected / 3 selected

  6. test_mode.py ... [100%]

  7. ========================== 3 passed, 3 deselected in 0.29s ==========================

可以看到执行结果执行了3条用例,3条未选中。

3.2、同时选中多个标记

语法:pytest -m "标记1 or 标记2"

命令: pytest -m "musen ro yuze"

执行通过musen或者yuze 标记的的用例。执行结果如下:


  1. ========================== test session starts ==========================

  2. platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0

  3. rootdir: C:\project\, inifile: pytest.ini

  4. plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2

  5. collected 6 items / 1 deselected / 5 selected

  6. test_mode.py ..... [100%]

  7. ========================== 5 passed, 1 deselected in 0.29s ==========================

从上述结果可以看到,只要加了musen或yuze这两个标记中的任意一个

语法: pytest -m "标记1 and 标记2"

命令: pytest -m "musen and yuze"

执行通过musen和yuze这两个标记同时标记的用例。执行结果如下


  1. ========================== test session starts ==========================

  2. platform win32 -- Python 3.7.3, pytest-5.4.2, py-1.8.0, pluggy-0.13.0

  3. rootdir: C:\project\, inifile: pytest.ini

  4. plugins: allure-pytest-2.8.15, Faker-8.11.0, metadata-1.9.0, parallel-0.0.8, repeat-0.8.0, rerunfailures-9.0, testreport-1.1.2

  5. collected 6 items / 5 deselected / 1 selected

  6. test_mode.py . [100%]

  7. ========================== 1 passed, 5 deselected in 0.29s ==========================

代码解释

 如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐