1. Pytest运行过程
Pytest是一种用Python编写的测试框架,可以让你更加方便地编写、组织和执行测试用例。相比较其他测试框架,Pytest更加简单而且易用。在测试过程中,pytest会专门收集测试文件和测试方法,自动识别测试文件和测试方法所表示的测试用例,在测试完成后给出测试报告。
1.1 Pytest基本使用
使用pytest进行测试非常简单。我们只需要按照pytest的规则编写测试函数(必须以test_开头或以_test结尾),pytest会自动进行测试。代码如下:
def test_sum():
assert sum([1, 2, 3]) == 6
def test_diff():
assert (5 - 3) == 2
在这个示例中,我们定义了两个测试方法test_sum和test_diff,pytest会自动执行这两个测试方法。
1.2 运行pytest测试用例
要运行pytest测试用例非常简单,只需要在命令行中输入pytest就可以了。pytest会自动扫描当前目录中所有的测试文件,并运行这些文件中所有的测试用例。
对于复杂的项目,我们可以通过指定目录或者文件的方式来运行指定的测试用例。例如,我们可以通过以下方式来运行指定测试文件:
$ pytest test_sample.py
或者通过以下方式来运行指定目录下的测试用例:
$ pytest test_directory
1.3 控制台输出信息
在测试的过程中,我们经常需要用到控制台输出信息,以便能够更好地了解测试过程和测试结果。
在pytest中,我们可以使用print语句来输出信息,也可以使用pytest提供的一些特殊的函数来显示测试用例的一些状态信息,例如:
print函数
pytest.mark.xfail函数表示这个测试用例本应该是失败的,但是我们希望pytest运行这个用例不会中止测试。
pytest.fail函数表示这个测试用例应该是失败的,如果成功运行了这个测试用例,那么它就会使得整个测试运行结果是失败的。
pytest.skip函数表示这个测试用例暂时无法进行测试,我们希望pytest运行这个用例会跳过这个测试。
例如,在以下这个示例中,我们定义了一个带有回调函数的测试用例。当测试用例失败时,我们会在控制台上输出一些信息:
import pytest
def test_callback():
x = 3
y = 4
def callback():
print("Callback function called.")
assert x+1 == y, callback()
当这个测试用例失败时,pytest会输出以下信息:
test_callbacks.py F [100%]
========================================= FAILURES =========================================
_________________________________________ test_callback _________________________________________
def test_callback():
x = 3
y = 4
def callback():
print("Callback function called.")
> assert x+1 == y, callback()
E assert (3 + 1) == 4, callback()
E assert 4 == 4
E + where 4 = ()
E + where = <built-in function print>
test_callbacks.py:11: AssertionError
=================================== short test summary info ===================================
FAIL test_callbacks.py::test_callback
===================================== 1 failed in 0.02s ======================================
在这个输出信息中,我们可以清晰地看到测试用例test_callback是失败的,因为它没有满足assert语句的条件。同时,我们还可以看到输出了一条包含Callback function called的信息,这是由我们自己定义的callback函数输出的。
2. 控制台输出信息的格式化
在测试框架中,输出信息的格式化非常重要。一个良好的格式化可以帮助测试人员更好地阅读测试结果,从而快速定位问题。在pytest中,我们可以借助插件来格式化控制台输出信息。以下是一些常用的插件:
pytest-html插件:将测试结果输出为HTML格式。
pytest-json插件:将测试结果输出为JSON格式。
pytest-cov插件:可以自动生成测试覆盖率报告。
pytest-xdist插件:让pytest可以支持多进程运行。
pytest-flake8插件:检查代码风格是否符合PEP8标准。
例如,我们可以使用pytest-html插件将pytest生成的测试结果输出为HTML格式。首先我们需要安装pytest-html插件:
$ pip install pytest-html
使用pytest-html插件非常简单,只需要执行pytest命令时增加--html=report.html参数即可,例如:
$ pytest --html=report.html
执行完这条命令后,pytest会自动生成一个名为report.html的HTML文件,其中包含了测试用例的详细信息和测试结果。我们可以通过浏览器打开这个文件来查看测试结果。
如果我们希望修改pytest-html生成的HTML文件的样式,可以继续增加--self-contained-html和--css=style.css参数,并将自定义的CSS文件放置在当前工作目录下:
$ pytest --html=report.html --self-contained-html --css=style.css
3. 控制台输出信息的过滤
在测试过程中,我们经常需要过滤掉测试用例中某些信息,以便更快地定位问题。在pytest中,我们可以使用过滤器来过滤控制台输出信息。pytest提供了多种过滤器方式。
3.1 标准输出
如果我们希望只输出测试结果,而不输出任何冗余信息,可以使用pytest提供的-s参数。例如:
$ pytest -s
3.2 失败信息
如果我们只希望看到失败的测试用例,而不关心其他信息,我们可以使用pytest的-x参数。pytest会找到第一条失败的测试用例并立即退出测试。例如:
$ pytest -x
这个功能很有用,特别是当我们的测试用例有成千上万个时。
3.3 用例名字匹配
如果我们只关心某个测试用例,或者希望在测试结束后查看某些测试用例的结果,可以使用pytest的-k参数。例如:
$ pytest -k test_sum
这个命令将只会执行包含test_sum关键字的测试用例。
4. 总结
在本文中,我们简要介绍了pytest框架并展示了如何使用pytest运行测试用例和如何控制台输出信息。
我们发现,pytest是一种非常强大而便捷的测试框架,它可以提高我们编写测试用例的效率,让我们能够更加专心地关注代码质量。同时,通过使用多种插件和过滤器,我们可以方便地掌控测试用例的细节和测试结果。我们相信,在测试过程中,控制台输出信息是非常重要的,这对于测试人员来说具有非常大的参考意义。我们希望通过本文能够帮助您更好地掌握pytest框架,更好地执行测试。