pytest常用Console参数:
- -v 用于显示每个测试函数的执行结果
- -q 只显示整体测试结果
- -s 用于显示测试函数中print()函数输出
- -x 在第一个错误或失败的测试中立即退出
- -m 只运行带有装饰器配置的测试用例
- -k 通过表达式运行指定的测试用例
- -h 帮助
首先来看什么参数都没加的运行情况
python
class TestClass():
def test_zne(self):
print(1)
assert 1==2
def test_two(self):
print(2)
assert 1==2
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main()
============================= test session starts =============================
platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: D:\Users\72036454\Desktop\pythonProject\Base
plugins: allure-pytest-2.9.45
collected 3 items
test_page.py FF. [100%]
================================== FAILURES ===================================
-v 用于显示每个测试函数的执行结果
用于打印显示每条用例的执行情况
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
def test_two(self):
print(2)
assert 1==2
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-v'])
============================= test session starts =============================
platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0 -- D:\Users\72036454\AppData\Local\Programs\Python\Python38\python.exe
cachedir: .pytest_cache
rootdir: D:\Users\72036454\Desktop\pythonProject\Base
plugins: allure-pytest-2.9.45
collecting ... collected 3 items
test_page.py::TestClass::test_zne FAILED [ 33%]
test_page.py::TestClass::test_two FAILED [ 66%]
test_page.py::TestClass::test_a PASSED [100%]
================================== FAILURES ===================================
-q 只显示整体测试结果
简化测试整体结果。F:代表测试失败、.:代表测试通过
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
def test_two(self):
print(2)
assert 1==2
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-q'])
FF. [100%]
================================== FAILURES ===================================
-s 用于显示测试函数中print()函数输出
显示测试用例中 print() 中的值
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
def test_two(self):
print(2)
assert 1==2
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-s'])
============================= test session starts =============================
platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: D:\Users\72036454\Desktop\pythonProject\Base
plugins: allure-pytest-2.9.45
collected 3 items
test_page.py 1
F2
F3
.
================================== FAILURES ===================================
-x 在第一个错误或失败的测试中立即退出
第一条用例执行失败,立即退出不在往下执行用例
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
def test_two(self):
print(2)
assert 1==2
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-x','-s'])
============================= test session starts =============================
platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: D:\Users\72036454\Desktop\pythonProject\Base
plugins: allure-pytest-2.9.45
collected 3 items
test_page.py 1
F
================================== FAILURES ===================================
-m 只运行带有装饰器配置的测试用例
用例中,第二和第三条用例加上了装饰器,装饰器最后一个单词分别为"slow" 和 "faster" ,-m 拿着两个单词去识别带这个装饰器的用例,识别到就执行,没有识别到的就不执行。
-m后面接的是表达式:['-s','-m slow or faster'] 、['-s','-m slow and faster']、['-s','-m not slow'] 这些表达式都支持。
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
@pytest.mark.slow
def test_two(self):
print(2)
assert 1==2
@pytest.mark.faster
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-s','-m slow or faster'])
============================= test session starts =============================
platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: D:\Users\72036454\Desktop\pythonProject\Base
plugins: allure-pytest-2.9.45
collected 3 items / 1 deselected / 2 selected
test_page.py 2
F3
.
================================== FAILURES ===================================
-k 通过表达式运行指定的测试用例
通过表达式匹配用例的函数名去执行用例,not test_zne 意思是不执行"test_zne"这条用例,所以就会执行第二第三条。同理 ['-s','-k test_zne'] 表示只执行第一条。
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
@pytest.mark.slow
def test_two(self):
print(2)
assert 1==2
@pytest.mark.faster
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-s','-k not test_zne'])
============================= test session starts =============================
platform win32 -- Python 3.8.10, pytest-6.2.5, py-1.10.0, pluggy-1.0.0
rootdir: D:\Users\72036454\Desktop\pythonProject\Base
plugins: allure-pytest-2.9.45
collected 3 items / 1 deselected / 2 selected
test_page.py 2
F3
.
================================== FAILURES ===================================
-h 帮助
这才是重点,学会使用这个,剩余的都学会了
python
import pytest
class TestClass():
def test_zne(self):
print(1)
assert 1==2
@pytest.mark.slow
def test_two(self):
print(2)
assert 1==2
@pytest.mark.faster
def test_a(self):
print(3)
assert 1==1
if __name__ == '__main__':
pytest.main(['-h'])
pytest的执行顺序:
- 默认情况下,pytest的执行顺序是自上往下的。
- 可以通过第三方插件
pytest-ordering
实现自定义用例执行顺序 - 官方文档: ++https://pytest-ordering.readthedocs.io/en/develop/++
安装插件:
pip install pytest-ordering
pytest-ordering使用:
方式一
- 第一个执行:
@pytest.mark.first
- 第二个执行:
@pytest.mark.second
- 倒数第二个执行:
@pytest.mark.second_to_last
- 最后一个执行:
@pytest.mark.last
方式二
- 第一个执行:
@pytest.mark.run('first')
- 第二个执行:
@pytest.mark.run('second')
- 倒数第二个执行:
@pytest.mark.run('second_to_last')
- 最后一个执行:
@pytest.mark.run('last')
方式三
- 第一个执行:
@pytest.mark.run(order=1)
- 第二个执行:
@pytest.mark.run(order=2)
- 倒数第二个执行:
@pytest.mark.run(order=-2)
- 最后一个执行:
@pytest.mark.run(order=-1)
对于以上三张方法,经常使用的不多,第一个执行和最后一个执行比较常用。
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!