文章目录

  • 0. 前言
  • 1. 命令与配置
  • 1.1. pytest 的基本使用
  • 1.2. 配置文件
  • 2. 代码编写
  • 2.1. 推荐的单元测试源码格式
  • 2.2. 文件/类/方法命名规则
  • 2.3. assert 相关
  • 2.4. pytest fixtures


0. 前言

  • 简介:pytest是Python的测试框架,是第三方提供的,需要额外安装包。
  • 安装方法:pip install -U pytest,之后就可以通过 pytest --version 来检查是否安装。
  • 官方资料:官方文档

1. 命令与配置

1.1. pytest 的基本使用

  • python -m pytest [...]pytest [...] 的区别
  • 前者将命令行路径添加到了 sys.path 中。
  • 如果失败x次则停止
pytest -x           # stop after first failure
pytest --maxfail=2  # stop after two failures
  • 选择进行单元测试的目标
# 选择文件
pytest test_mod.py

# 选择文件夹
pytest testing/

# 搜索表达式,会搜索文件名、类名、方法名
# 下例子中就是选择包含 MyClass 但不包含 method 的内容
pytest -k "MyClass and not method"

# 指定某文件、某类中的某方法
pytest test_mod.py::test_func
pytest test_mod.py::TestClass::test_method
  • 测试结果展示
  • -r:在测试完成后有一个简短的统计,如下图
  • -r 后可选择合适的选项,选择展示内容。
  • 测试失败时使用PDB,pytest --pdb

1.2. 配置文件

2. 代码编写

2.1. 推荐的单元测试源码格式

  • 注意事项:测试文件必须不重名。
  • 好像这种用得比较多。
setup.py
mypkg/
    __init__.py
    app.py
    view.py
tests/
    test_app.py
    test_view.py
    ...
  • 方法二:单元测试源码与项目源码放在相同路径下。
setup.py
mypkg/
    __init__.py
    app.py
    view.py
    test/
        __init__.py
        test_app.py
        test_view.py
        ...

2.2. 文件/类/方法命名规则

  • 第一步:指定文件/文件夹的搜索范围。
  • 如果在 pytest 命令行中指定了文件/文件夹,则会处理这些文件/文件夹中的数据。
  • 如果 pytest 没有指定文件/文件夹,那就会从配置文件 testpaths 选项中指定的路径,或当前路径中搜索文件/文件夹。
  • 会搜索指定路径子目录中的内容,但有一个例外,那就是配置文件 norecursedirs指定的路径不会进行搜索。
  • 第二步:在指定搜索范围内选择文件,即所有命名格式为 test_*.py*_test.py 的文件。
  • 第三步:在指定文件中寻找合适的方法。
  • 所有 test 开头的方法(不属于任何类的方法)。
  • 所有 Test 开头类中,test 开头的成员方法。

2.3. assert 相关

  • 可以使用 pytest.raises(XxxError, match=r"some reg string")

2.4. pytest fixtures