单例模式 顺序查找 regex qt datagridview reference xsd vue绑定事件 vue修改样式 jquery获取最后一个子元素 css获取最后一个元素 excel太长的文字隐藏 华为路由器ipv6配置 oracle给表增加字段 java解析pdf python数据类型转换 idea开发python python平方函数 java教学 java抽象 java数据 java安装环境 java链接mysql数据库 java语言简介 java索引 java多线程教程 java判断文件是否存在 java接口的修饰符 java连接sql数据库 java删除 js四舍五入 coreldraw11 win10长期服务版 3389扫描器 findall js验证码 压枪软件 突袭时间表 4k对齐是什么意思 燃烧之血十字架
当前位置: 首页 > 学习教程  > 编程语言

Python进阶(10) pytest

2020/9/19 14:43:07 文章标签:

文章目录

    • 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:在测试完成后有一个简短的统计,如下图image_1eiig93vl2a6nu9pqp1m4n1fdtm.png-18.6kB
    • -r 后可选择合适的选项,选择展示内容。
    • image_1eiig8f3pef91avl1s9j2t619tg9.png-22.4kB
  • 测试失败时使用PDB,pytest --pdb

1.2. 配置文件


2. 代码编写

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

  • 官方文档:Choosing a test layout / import rules
  • 作用:介绍单元测试源码放在哪里。
  • 方法一:单元测试源码与项目源码放在不同的路径下。
    • 注意事项:测试文件必须不重名。
    • 好像这种用得比较多。
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. 文件/类/方法命名规则

  • 官方文档:Conventions for Python test discovery
  • 功能:执行 pytest 命令时会选择那些文件、方法、类进行单元测试。
  • 基本流程:
    • 第一步:指定文件/文件夹的搜索范围。
      • 如果在 pytest 命令行中指定了文件/文件夹,则会处理这些文件/文件夹中的数据。
      • 如果 pytest 没有指定文件/文件夹,那就会从配置文件 testpaths 选项中指定的路径,或当前路径中搜索文件/文件夹。
      • 会搜索指定路径子目录中的内容,但有一个例外,那就是配置文件 norecursedirs指定的路径不会进行搜索。
    • 第二步:在指定搜索范围内选择文件,即所有命名格式为 test_*.py*_test.py 的文件。
    • 第三步:在指定文件中寻找合适的方法。
      • 所有 test 开头的方法(不属于任何类的方法)。
      • 所有 Test 开头类中,test 开头的成员方法。
  • 当然,也可以自定义规则,具体查看 这里

2.3. assert 相关

  • 官方文档:The writing and reporting of assertions in tests
  • 单元测试中基本都有 assert 语句,pytest 中使用python默认的即可。
  • 对于一些预期会出现的 exception,且单元测试不想因为这些问题而 fail,那么:
    • 可以使用 pytest.raises(XxxError, match=r"some reg string")

2.4. pytest fixtures

  • 官方文档:pytest fixtures: explicit, modular, scalable

  • 作用:我也不知道该怎么翻译,大概就是在测试类中可以使用的一些变量(有固定的变量名)。

  • 没细看,需要的时候再研究。


本文链接: http://www.dtmao.cc/news_show_200155.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?