pytest测试框架系列 - Pytest 自定义mark标记筛选用例实战

## 为什么要自定义标记 自定义标记的目的主要为了解决运行用例时,可以根据不同场景运行不同用例。 问题:用例执行时可以按照级别、场景、功能、模块分类,应该如何设置呢?带着问题我们先看下面的。 ## pytest 里面自定义标记 (建议掌握程度:☆☆☆☆☆) 用法:将@pytest.mark.标记名称 放到测试函数或者类上面 使用: - 执行时加上 `-m 标记名` 进行用例筛选,例如加上 `-m app` ,就执行标记名为app的用例。 - 如果不运行app相关的用例,则加上 `-m "not app"`。 - 需要运行多个标记则加上`-m "app or web"`,代码运行标记为app或者web的用例。 - 需要运行多个标记的,则加上 `-m "app and web"`,代表用例需要同时包含app和web的标记。 示例: ```python # !/usr/bin/python3 # _*_coding:utf-8 _*_ """" # @Time  :2021/7/5 23:24 # @Author  : king # @File   :test_mark.py # @Software :PyCharm # @blog :https://blog.csdn.net/u010454117 # @WeChat Official Account: 【测试之路笔记】 """ import pytest @pytest.mark.web def test_web(): assert "web" in "web test!" @pytest.mark.app class TestApp: def test_h5(self): assert 'h5' in "h5, test" def test_wx(self): assert 'wx' in 'wx ,hello' if __name__ == '__main__': pytest.main() ``` cmd命令窗口输入: `pytest -v -m app test_mark.py` 执行结果为: ![执行结果](https://www.icode9.com/i/ll/?i=20210705233422740.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) cmd命令窗口输入: `pytest -v -m "not app" test_mark.py` 执行结果为: ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210705234013683.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) 通过上面例子,是不是已经解决上面的问题了。 发现执行结果里面是不是有提示warnings?如何解决呢? ```python =========================================================================== warnings summary =========================================================================== test_mark.py:14 E:\pytest_demo\class_03\test_mark.py:14: PytestUnknownMarkWarning: Unknown pytest.mark.web - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html @pytest.mark.web test_mark.py:19 E:\pytest_demo\class_03\test_mark.py:19: PytestUnknownMarkWarning: Unknown pytest.mark.app - is this a typo? You can register custom marks to avoid this warning - for details, see https://docs.pytest.org/en/stable/mark.html @pytest.mark.app -- Docs: https://docs.pytest.org/en/stable/warnings.html ``` ## 解决自定义标记 warnings信息 - 通过注册标记 - 通过框架配置文件pytest.ini ### 通过注册标记 说明:在`conftest.py`添加如下代码: - 单个注册标记 ```python def pytest_configure(config): config.addinivalue_line("markers", "web:web相关用例") ``` - 批量注册标记 ```python def pytest_configure(config): marker_list = ["web", "app"] # 标签名集合 for markers in marker_list: config.addinivalue_line("markers", markers) ``` 示例: `conftest.py` 文件放到case目录,添加内容 ```python # !/usr/bin/python3 # _*_coding:utf-8 _*_ """" # @Time  :2021/7/5 23:55 # @Author  : king # @File   :conftest.py # @Software :PyCharm # @blog :https://blog.csdn.net/u010454117 # @WeChat Official Account: 【测试之路笔记】 """ def pytest_configure(config): marker_list = ["web", "app"] # 标签名集合 for markers in marker_list: config.addinivalue_line("markers", markers) ``` 再次cmd命令窗口输入: `pytest -v -m app test_mark.py` 执行结果为: ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210705235735527.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) ### 通过框架配置文件pytest.ini 在项目根目录创建pytest.ini文件,内容添加为: ```python [pytest] markers= web: web 测试用例 app: app测试用例 ``` 目录: ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210706000144792.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) 再次cmd命令窗口输入: `pytest -v -m app test_mark.py` 执行结果为: ![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210706000224407.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTA0NTQxMTc=,size_16,color_FFFFFF,t_70) ## 总结 - 为什么要自定义标记,主要为了解决运行用例时,可以根据不同场景运行不同用例 - pytest 里面自定义标记定义和使用,将@pytest.mark.标记名称 放到测试函数或者类上面,使用在命令行加入 `-m` 参数 - 解决自定义标记 warnings信息,通过`conftest.py`文件注册标记或者pytest.ini配置文件配置标记 以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处! >**如果觉得文章不错,欢迎关注微信公众号,微信公众号每天推送相关测试技术文章** >个人微信号:搜索 【测试之路笔记】
上一篇:pytest(9):skip、skipif跳过用例


下一篇:Java的对象模型