python pytest

  1. conftest.py
  2. fixture
  3. pytest.ini
  4. 测试代码覆盖率
  5. caplog 取log日志

pytest 是强大的测试框架

当函数使用test_为开头的时候,就会在执行测试的时候进行测试。

执行命令为:

pytest -v -s test_file.py

conftest.py

conftest.py的特点:

  1. conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
  2. 不需要import导入 conftest.py,pytest用例会自动识别该文件,放到项目的根目录下就可以全局目录调用了,如果放到某个package下,那就在该package内有效,可有多个conftest.py
  3. conftest.py配置脚本名称是固定的,不能改名称
  4. conftest.py文件不能被其他文件导入
  5. 所有同目录测试文件运行前都会执行conftest.py文件

在conftest.py中将会用到@pytest.fixture装饰器

fixture

conftest.py下,可以实现数据共享,不需要 import 就能自动找到一些配置

fixture函数如下:

fixture(scope='function'params=None,autouse=False,ids=None,name=None
  • scope参数可以控制fixture的作用范围,scope:有四个级别参数”function”(默认),”class”,”module”,”session
  • params:一个可选的参数列表,每个参数执行一遍,相当于for循环
  • autouse:如果True,则为所有测试激活fixture func可以看到它。 可以作为默认执行的测试使用
  • ids:每个字符串id的列表,每个字符串对应于params这样他们就是测试ID的一部分。如果没有提供ID它们将从params自动生成
  • name:fixture的名称。

scope作用范围: session>module>class>function

  • function:每一个函数或方法都会调用
  • class:每一个类调用一次,一个类中可以有多个方法
  • module:每一个.py文件调用一次,该文件内又有多个function和class
  • session:是多个文件调用一次,可以跨.py文件调用,每个.py文件就是module

使用方法是在测试用例里面直接写方法名就可以了

另外可以使用pytest --fixtures 查看所有固件

pytest.ini

todo

测试代码覆盖率

coverage 用于对测试的时候,哪些代码被执行了,可以反映出完成程度。

pip install pytest-cov

使用

pytest --cov --cov-report xml

这样就会生成一个xml文件

命令行中使用coverage report 查看整体覆盖率

VsCode中推荐插件Coverage Gutters

配置:

注意:这样设置会导致vscode在测试时无法使用断点调试!!!

caplog 取log日志

def test_something(caplog)
    caplog.set_level(logging.DEBUG)
    assert caplog.messages[0] == 'This is a debug message'
    caplog.clear()

或者 unittest.mock.path 来mock sys.stdout

from io import StringIO
from unittest.mock import patch

def test_print(): expected = 'this is a message'
with path('sys.stdout', new=StringIO()) as fake_out: assert fake_out.getvalue().strip() == expected

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com