赞
踩
目录
1. @pytest.mark.parametrize("参数名",列表数据)
3. pytest.mark.parametrize 结合fixture使用
@pytest.mark.run(order=1)(需安装pytest-rodering)
@pytest.mark.dependency()(pytest-dependency插件需下载)
@pytest.make.timeout(60)(需安装pytest-timeout)
可以标记测试方法、测试类,标记名可以自定义,最好起有意义的名字;
同一测试类/方法可同时拥有多个标记;
- # test_login_logout.py
-
- import pytest
-
-
- @pytest.mark.login
- class TestLogin:
- """登陆功能测试类"""
-
- @pytest.mark.smoke
- @pytest.mark.success
- def test_login_sucess(self):
- """登陆成功"""
-
- # 实现登陆逻辑
- pass
-
- @pytest.mark.failed
- def test_login_failed(self):
- """登陆失败"""
-
- # 实现登陆逻辑
- pass
-
-
- @pytest.mark.logout
- class TestLogout:
- """登出功能测试类"""
-
- @pytest.mark.smoke
- @pytest.mark.success
- def test_logout_sucess(self):
- """登出成功"""
-
- # 实现登出功能
- pass
-
- @pytest.mark.failed
- def test_logout_failed(self):
- """登出失败"""
-
- # 实现登出功能
- pass
- 运行标记的用例:
- 使用 -m 参数运行标记的测试用例;
- -m 参数支持 and、or 、not 等表达式;
- # 运行登陆功能的用例
- pytest.main(['-m login'])
- # 运行登出功能的用例
- pytest.main(['-m logout'])
- # 运行功能成功的用例
- pytest.main(['-m success'])
- # 运行功能失败的用例
- pytest.main(['-m failed'])
- # 运行登陆功能但是不运行登陆失败的测试用例
- pytest.main(['-m login and not failed'])
- # 运行登出功能但是不运行登出成功的测试用例
- pytest.main(['-m logout and not success'])
- # 运行登陆和登出的用例
- pytest.main(['-m login or logout'])
当使用 -m 参数执行 mark 标记的用例时,pytest 会发出告警信息 “PytestUnknownMarkWarning: Unknown pytest.mark.login - is this a typo? ”,告诉你这是一个 pytest 未知的一个标记!为了消除告警,我们需要在 pytest 的配置文件中注册 mark 标记!
注册方式:
1、单个标签:
在conftest.py添加如下代码:
- def pytest_configure(config):
- # demo是标签名
- config.addinivalue_line("markers", "demo:示例运行")
2、多个标签:
在conftest.py添加如下代码:
- def pytest_configure(config):
- marker_list = ["testdemo", "demo", "smoke"] # 标签名集合
- for markers in marker_list:
- config.addinivalue_line("markers", markers)
3、添加pytest.ini 配置文件(在你项目的任意一个文件下,新建一个file,文件命名为pytest.ini)
- [pytest]
- markers=
- smoke:this is a smoke tag
- demo:demo
- testdemo:testdemo
首先在项目根目录创建一个文件 pytest.ini ,这个是 pytest 的配置文件;
然后在 pytest.ini 文件的 markers 中写入你的 mark 标记, 冒号 “:” 前面是标记名称,后面是 mark 标记的说明,可以是空字符串;
注意:pytest.ini 文件中只能使用纯英文字符,绝对不能使用中文的字符(尤其是冒号和空格)
注册完 mark 标记之后 pytest 便不会再告警,但是有时手残容易写错 mark 名,导致 pytest 找不到用例,一时想不开很难debug,尤其是团队协作时很容易出现类似问题,所以我们需要 “addopts = --strict” 参数来严格规范 mark 标记的使用!
在 pytest.ini 文件中添加参数 “addopts = --strict”;
注意要另起一行,不要在 markers 中添加;
添加该参数后,当使用未注册的 mark 标记时,pytest会直接报错:“ 'xxx' not found in `markers` configuration option ”,不执行测试任务;
注意:pytest.ini 配置文件不支持注释,不支持注释,不支持注释...
通过使用pytest.mark
你可以轻松地在测试用例上设置元数据。例如, 一些常用的内置标记:
或命令$pytest --timeout=60
最多失败重跑5次 & 如果失败则延迟1秒后重跑(可以不传)
或命令$pytest --reruns 5 --reruns-delay 1
注意:
标记只对测试用例有效,对fixtures方法无效。
跳过测试用例的最简单方法是使用skip装饰器标记它,可以传递一个可选的原因reason参数(str,跳过测试函数的原因):
- @pytest.mark.skip(reason="目前没办法测试该用例")
- def test_the_unknown():
- ...
或者,也可以在测试执行或setup期间,通过调用pytest.skip(reason)函数强制跳过该用例:
- def test_function():
- if not valid_config():
- pytest.skip("不支持该配置")
当在导入时间内无法评估跳过条件时,这种在用例跳过的方法非常有用。
也可以在模块级别跳过整个模块:pytest.skip(reason,allow_module_level=True)
- import sys
- import pytest
-
- if not sys.platform.startswith("win"):
- pytest.skip("跳过只支持Windows平台的用意",allow_module_level=True)
(使用此方法跳过整个模块时会抛出Skipped异常,如果在脚本下方使用pytest.main()执行,会执行不到。此时应使用命令行pytest命令执行。)
参数:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。