pytest-类中测试方法、多文件批量执行,完整、可直接复制运行的写法,覆盖:
- 测试类 + 类中方法执行
- 多文件批量执行
- 按标记(@pytest.mark)执行
- 常用组合用法
1. 测试类 + 类中方法在 main 中执行
完整代码
python
运行
import pytest
# 测试类(必须 Test 开头)
class TestDemo:
def test_case1(self):
assert 1 + 1 == 2
def test_case2(self):
assert "pytest" in "hello pytest"
# 独立函数
def test_func1():
assert True
if __name__ == '__main__':
# 1. 执行当前文件所有用例(类+函数)
pytest.main([__file__, "-v", "-s"])
# 2. 只执行某个类
# pytest.main([__file__ + "::TestDemo", "-v"])
# 3. 只执行某个类里的某个方法
# pytest.main([__file__ + "::TestDemo::test_case1", "-v"])
执行路径规则
plaintext
文件.py::类名::方法名
2. 多文件批量执行
假设项目结构:
plaintext
tests/
├── test_login.py
├── test_order.py
└── test_pay.py
main.py
在 main.py 中批量执行
python
运行
import pytest
if __name__ == '__main__':
# 1. 执行 tests 目录下所有测试
pytest.main(["./tests", "-v", "-s"])
# 2. 执行指定多个文件
# pytest.main(["./tests/test_login.py", "./tests/test_order.py", "-v"])
# 3. 只执行某个文件中的某个用例
# pytest.main(["./tests/test_login.py::TestLogin::test_login_success", "-v"])
3. 按标记 @pytest.mark 执行(常用)
给用例打标记,例如 smoke、api、ui。
示例代码
python
运行
import pytest
@pytest.mark.smoke
def test_smoke1():
assert True
@pytest.mark.smoke
def test_smoke2():
assert True
@pytest.mark.api
def test_api1():
assert True
if __name__ == '__main__':
# 只执行标记为 smoke 的用例
pytest.main([__file__, "-m", "smoke", "-v"])
# 执行 smoke 或 api
# pytest.main([__file__, "-m", "smoke or api", "-v"])
# 执行非 api
# pytest.main([__file__, "-m", "not api", "-v"])
4. 最常用完整 main 模板(直接拿去用)
python
运行
import pytest
if __name__ == '__main__':
pytest.main([
"./tests", # 测试目录
"-v", # 详细
"-s", # 显示 print
"-x", # 失败即停止
"--html=report.html", # 报告
"--alluredir=./allure-results"
])
5. 常用执行语法汇总
表格
| 场景 | 写法 |
|---|---|
| 当前文件所有用例 | pytest.main([__file__]) |
| 某个测试类 | 文件::TestClass |
| 类中某个方法 | 文件::TestClass::test_func |
| 某个函数 | 文件::test_func |
| 执行目录 | ["./tests"] |
| 按标记执行 | -m smoke |