pytest测试框架

pytest测试框架

单元测试最初流行是从JUnit,而他的发明者Kent Beck大神的经典名作<测试驱动开发>这本小书却引领了TDD的风潮,产生了xUnit各个语言系列.

初次接触pytest,感觉不像个xUnit,因为既看不到对TestCase的继承,也找不到Setup/Teardown这些建立/销毁函数.当然这些基本功能肯定是支持的.

pytest虽然作为一个Python单元测试框架的扩展版, 但是它丰富的功能和灵活的特性也很适合做功能测试, 其中的精华就是fixtures.

py.test 用法

pytest提供丰富的命令行参数.

pytest -h
# 其他用法
-q, --quiet  
-s  --capture=no   
--cache-show
--cache-clear

下面以测试过程为序,展开各过程主要用法.

配置

pytest配置文件: pytest.ini|tox.ini|setup.cfg

收集

pytest.mark

注: 只作用于tests,对fixture无效

命令行测试用例选择:

-k EXPRESSION   : 按正则选取
-m MARKEXPR     : 示例 "not (slow or long)”
--ignore=path   忽略部分测试集

运行

基本用法:

pytest test_mod.py::TestClass::test_method

命令行辅助选项:

--lf, --last-failed   rerun only the tests that failed at the last run (or all if none failed)
# 退出条件:
-x, --exitfirst 出错后退出
--maxfail=num 失败N次后退出

报告

# 需要先安装pytest-html插件
py.test --html=report.html

# 命令行选项:
--durations=N         # 显示最慢的执行 (N=0 for all)

fixture

fixtures通常存放在根目录的conftest.py或子文件夹的conftest.py(可用来覆盖并重新定义).

fixture的用法

@pytest.fixture()
主要参数:
* scope: session/module/class
* params: 参数化,会执行多次
* autouse=True

tear down函数体定义:
* 代码块为yield之后的所有语句
* 或者使用request.addfinalizer(fin)的方式 (好处:及时发生异常也会执行)

命令行辅助项

--fixtures  显示可用的fixture
--setup-only          only setup fixtures, do not execute tests.
--setup-show        show setup of fixtures while executing tests.
--setup-plan          show what fixtures and tests would be executed but  don't execute anything.

功能介绍

Fixtures

装饰器标记函数为fixture, 总体上fixtures提供:
* 单元测试框架的基本功能
* 依赖注入: 一些共有函数值/帮助函数/Mock等
* 测试数据参数化
* 灵活性由不同的作用范围和目录级conftest.py等提供

monkeypatch

Monkeypatching/mocking modules and environments.
* monkeypatch.setattr()
* monkeypatch.delattr()

扩展资源

流行插件

文档

发表评论

电子邮件地址不会被公开。 必填项已用*标注