一、安装pytest

  1. 命令行 pip install -U --user pytest
  2. pycharm—preferences—project Interpreter搜索pytest下载

二、运行方式

  1. 去settings里面设置单元测试框架为Pytest(Settings-Tools-Python Integrated Tools),右击运行
  2. 命令行运行pytest
  3. python程序运行 pytest.main()

三、pytest命名规则

  1. 模块名称:test_开头或者 _test 结尾
  2. 函数、类方法名称 test_开头
  3. 测试类:Test<someting>

注意点:类:如果使用了 unittest, 遵循 unittest 的规则. 如果没有继承 unittest.TestCase, 不要使用 init, 一旦使用 init, 就是一个普通的类,不会被当成测试类了

四、运行结果解析

  1. test session starts 测试会话开始,一段会话就是一次pytest的调用
  2. platform darwin -- Python 3.8.6, pytest-6.0.2, py-1.9.0, pluggy-0.13.1 -- /usr/local/bin/python3.8 mac电脑这边显示的就是platform darwin,windows电脑显示的不太一样,后面显示的是python、pytest、pytest包的版本
  3. rootdir: /Users/shiqi/Desktop/python/pycharm_Workspace/caixin/interface/manager/py_业务接口/test_case, configfile: pytest.ini pytest搜索代码的目录,后面的是配置文件
  4. collected 3 items 搜索范围内找到3个测试条目
  5. test_1.py .. .点号表示通过 Failure(失败) error (异常) skip (跳过) xfail(预期失败) xpass(预期失败且通过)
  6. 3 passed in 5.29s 测试通过的数量以及会话花费的时间

五、常用命令

  1. pytest --help 查看全部选项
  2. pytest --collect-only(这里要注意only前面千万不要有空格) 查看当前配置下哪些测试用例会被执行
  3. -k 允许使用表达式指定希望执行的用例 pytest -k "debug" 如果要知道满足指定表达式的有几个测试用例 pytest -k "debug" --collect-only
  4. -v 输出的信息更详细


  1. -s 允许终端输出运行结果(--capture=no)
  2. -x 执行时遇到失败立刻停止运行(不加-x的话标记失败还是会继续运行)可以加个--tb=no关闭错误信息
  3. -m 用于标记测试分组(@pytest.mark.run,warnings)pytest -k "run_these" --collect-only 查询符合标记条件的测试用例
  4. --maxfail=num 明确失败几次后再停止,num=数量,=1的话,与-x的作用一样
  5. --lf,--last-failed 只重新运行上次运行失败的用例(或如果没有失败的话会全部跑)
  6. --ff, --failed-first 运行所有测试,但首先运行上次运行失败的测试(这可能会重新测试,从而导致重复的fixture setup/teardown)
  7. -q 与-v相反,简化输出信息,与--tb=line搭配
  8. --tb=style,经常用的有3种,short、line、no(long、auto默认值、native标准库回朔)

Short:输出assert的一行以及系统判定内容

Line:只使用一行输出显示所有的错误信息(具体到文件位置)

No:直接屏蔽全部回搠信息()

对比


Short


  1. --durations=N,N=0显示全部用例的运行时间,N=0筛选出运行最慢的3条用例

用例运行的时候会经历3个阶段:setup,call,teardown。call就是测试用例,setup和teardown就是用例的fixture部分。

  1. marker 标记功能使用步骤

第一步:注册。 pytest.ini [pytest] markers=success

第二部: 打标签。 @pytest.mark.success

第三部:执行用例: pytest -m "success"

注:

  • @pytest.mark 可以加到类上
  • 可以同时运行多个标签- "login and demo" "login or demo" "login and not demo"

坑: 表达式只支持双引号,不支持单引号。

  1. skip

@pytest.mark.skip(reason="跳过原因")

某个功能被废弃,不需要测试。

  1. skipif

@pytest.mark.skipif(sys.platform=="linux", reason="os系统因为环境不同跳过。")

  1. 如果只运行一个模块的一个类下面的某一个方法(pytest 模块名::类名::方法名)

命令行 pytest test_demo.py::Testdemo::test_demo