使用pytest进行Python自动化测试

简介与安装

pytest是一个针对Python的自动化测试框架,它可以使简单的和可扩展的测试变得容易。使用pytest进行测试是简洁和可读的,不需要样板代码,这使得我们可以很方便地进行自动化测试。pytest是一个全平台通用的工具,支持的Python版本包括Python 2.7, 3.4, 3.5, 3.6, Jython, PyPy-2.3

和通常的Python第三方模块一样,pytest可以直接通过pip安装

1
$ pip install -U pytest

安装完成后可以运行pytest命令来查看当前版本

1
2
$ pytest --version
This is pytest version 3.6.1, imported from /usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pytest.py

基本用法

我们先来创建一个以test_开头的测试函数

1
2
3
4
5
6
# content of test_sample.py
def func(x):
return x + 1

def test_answer():
assert func(3) == 5

然后在当前目录下运行pytest命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ pytest
=========================== test session starts ============================
platform linux -- Python 3.x.y, pytest-3.x.y, py-1.x.y, pluggy-0.x.y
rootdir: $REGENDOC_TMPDIR, inifile:
collected 1 item

test_sample.py F [100%]

================================= FAILURES =================================
_______________________________ test_answer ________________________________

def test_answer():
> assert func(3) == 5
E assert 4 == 5
E + where 4 = func(3)

test_sample.py:5: AssertionError
========================= 1 failed in 0.12 seconds =========================

可以看到,pytest自动地运行了test_answer函数,同时提示测试失败,因为func函数的返回值是4,而不是5,所以assert语句报错。

如果想要同时运行多个测试也很简单,在此之前我们需要先了解下pytest是如何确定需要执行哪些测试的。实际上,pytest遵循了标准的测试发现守则,具体来说有如下几条:

  • 如果没有指定参数,则从testpaths(如果配置)或当前目录开始。或者可以在命令行参数中使用目录、文件名或节点ID的任何组合。
  • 递归地进入文件夹,除非他们被指定为norecursedirs
  • 在这些目录中,寻找形如test_*.py或者*_test.py的文件
  • 在这些文件中,收集如下的这些项目:
    • test_开头的全局函数
    • Test开头的类中以test_开头的函数

除了上面的规则之外,我们也可以配置个性化的测试发现守则

在PyCharm中配置pytest

通常我们会使用IDE进行日常的开发工作,PyCharm是一款针对Python的IDE,深受广大Python爱好者的青睐。我们可以在PyCharm中配置pytest,从而可以直接在PyCharm中使用pytest的功能,方便且高效。

当我们在命令行安装好pytest后,在PyCharm中进入 File | Settings(在Mac OS上是Preferences)| Tools | Python Integrated Tools ,在右边的窗口中有一个 Default test runner 选项,点击下拉框可以看到py.test,选择该项后点击Apply即可。然后我们可以回到写有测试函数的文件中直接右键,会出现一个Run 'py.test' for project_name,直接点击即可运行自动化测试。

当然,以上只是pytest基本的用法,还有很多高级的技巧能够进一步简化测试的过程,提高测试的质量,具体的可以到官方文档上查看。

参考

pytest官方文档
python单元测试框架pytest简介


以上就是本文的全部内容,如果您喜欢这篇文章,欢迎将它分享给朋友们。

全文系作者原创,仅供学习参考使用,转载授权请私信联系,否则将视为侵权行为。码字不易,感谢支持。

感谢您的阅读,祝您生活愉快!

作者:小美哥
2018-06-17

如果您阅读本文后有所收获,不妨打赏两块钱,您小小的支持都是对作者莫大的鼓励!