此文已由作者吴琪惠授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

调用pytest

调用命令:

python -m pytest [...]

上面的命令相当于在命令行直接调用脚本 pytest [...](前提是python已经加入环境变量)

一些帮助信息

pytest --version   # shows where pytest was imported from 查看版本
pytest --fixtures  # show available builtin function arguments 查看内置参数
pytest -h | --help # show help on command line and config file options 命令行和配置文件帮助

失败后停止

pytest -x            # stop after first failure 首次失败后停止运行
pytest --maxfail=2    # stop after two failures 两次失败后停止执行

选择测试用例

pytest test_mod.py   # run tests in module 执行模块中的用例
pytest somepath      # run all tests below somepath 执行路径中的用例
pytest -k stringexpr # only run tests with names that match the  执行字符串表达式中的用例
                     # "string expression", e.g. "MyClass and not method" 如:"MyClass and not method"
                     # will select TestMyClass.test_something 将会选择TestMyClass.test_something
                     # but not TestMyClass.test_method_simple 而不会选择TestMyClass.test_method_simple
pytest test_mod.py::test_func  # only run tests that match the "node ID", 仅运行匹配"node ID"的用例
                               # e.g. "test_mod.py::test_func" will select 如选择:"test_mod.py::test_func"时只运行test_mod.py文件内的test_func 
                               # only test_func in test_mod.py
pytest test_mod.py::TestClass::test_method  # run a single method in a single class 在单独类中运行单独方法
pytest --pyargs pkg # 导入pkg,使用其文件系统位置来查找和执行用例,执行pkg目录下的所有用例

调试输出

pytest --showlocals # show local variables in tracebacks 在tracebacks中显示本地变量
pytest -l           # show local variables (shortcut)    在tracebacks中显示本地变量(快捷方式) pytest --tb=auto    # (default) 'long' tracebacks for the first and last(默认)第一个和最后一个使用长tracebacks信息,其他使用短的
                    # entry, but 'short' style for the other entries
pytest --tb=long    # exhaustive, informative traceback formatting  完整的格式化的traceback信息
pytest --tb=short   # shorter traceback format  短的traceback信息
pytest --tb=line    # only one line per failure  每个错误信息显示一行
pytest --tb=native  # Python standard library formatting 标准格式化输出
pytest --tb=no      # no traceback at all 无traceback信息

Python带有一个内置的Python调试器称为PDB。pytest可以在命令行选项指定调用:

pytest --pdb

这将每次失败时调用Python调试器。通常,您可能只希望这样做的第一个失败的测试,以了解某些故障情况:

pytest -x --pdb   # drop to PDB on first failure, then end test session 下降到PDB上的第一次失败,然后结束测试阶段pytest --pdb --maxfail=3  # drop to PDB for first three failures 下降到PDB前三失败

注意,任何失败的异常信息都会存储在sys.last_value,sys.last_type 以及 sys_last_traceback。在交互使用中,允许使用任意debug工具进行调试,也可手动访问异常信息,例如:

>>> import sys>>> sys.last_traceback.tb_lineno42>>> sys.last_valueAssertionError('assert result == "ok"',)

断点设置

import pytestdef test_function():
    ...
    pytest.set_trace()    # invoke PDB debugger and tracing

在pytest2.0.0版本之前,如果你没有能够通过 pytest -s 捕捉到trace信息,你只能查阅PDB traceing。在以后的版本中,当你输入PDB traceing,pytest自动禁用捕捉异常信息:

1.捕获输出不影响其他测试用例

2.任何prior测试输出已经被捕获,并且被处理

3.同一个测试中,任何later测试输出不会被捕获,输出内容将会直接发送到sys.stdout。注意,这条也适用于交互式PDB会话已经被退出,但测试输出已经开始了,也会继续定期运行测试。

从pytest2.4.0版本开始,你可以不需要使用pytest.set_trace()包装,也不需要禁用pytest -s命令,你可以使用本地Python命令:importpdb;pdb.set_trace()调用进入PBD traceing。

测试执行时间

获取运行最慢的10个测试执行时间:

pytest --durations=10

创建JUnitXML格式文件

为了创建一些可以让Jenkins或者其他持续继承服务器可识别的测试结果文件,可使用如下命令:

pytest --junitxml=path

记录xml(2.8版本支持)

如果你想要为一个测试日志提供额外信息,可使用recode_xml_property 参数:

def test_function(record_xml_property):
    record_xml_property("example_key", 1)
    assert 0

这段代码将会为测试用例标签添加一个额外的属性:example_key="1":

<testcase classname="test_function" file="test_function.py" line="0" name="test_function" time="0.0009">
  <properties>
    <property name="example_key" value="1" />
  </properties></testcase>

注:

record_xml_property

Add extra xml properties to the tag for the calling test.

The fixture is callable with ``(name, value)``, with value being automatically xml-encoded.

注意:这是一个测试中的参数,这个接口在未来版本中可能会被更强大的接口取到,但他本身功能会保留

LogXML: add_global_property(3.0版本支持)

如果你希望在testsuite级别添加一个属性节点(properties node),这个属性会使得所有关联的测试用例都生效。

import pytest@pytest.fixture(scope="session")def log_global_env_facts(f):

    if pytest.config.pluginmanager.hasplugin('junitxml'):
        my_junit = getattr(pytest.config, '_xml', None)     my_junit.add_global_property('ARCH', 'PPC')
    my_junit.add_global_property('STORAGE_TYPE', 'CEPH')@pytest.mark.usefixtures(log_global_env_facts)def start_and_prepare_env():
    passclass TestMe:
    def test_foo(self):
        assert True

上面的代码将在testsuite下添加一个属性节点:

<testsuite errors="0" failures="0" name="pytest" skips="0" tests="1" time="0.006">
  <properties>
    <property name="ARCH" value="PPC"/>
    <property name="STORAGE_TYPE" value="CEPH"/>
  </properties>
  <testcase classname="test_me.TestMe" file="test_me.py" line="16" name="test_foo" time="0.000243663787842"/></testsuite>

注意:这是一个测试中的参数,这个接口在未来版本中可能会被更强大的接口取到,但他本身功能会保留

测试结果格式化文件

这个功能在3.0版本已经弃用,并于4.0版本移除

创建一个machine-readable的文本测试结果文件,可使用:

pytest --resultlog=path

这些文件会被如PyPy-test web页面使用,来显示测试结果的几个修改。

在线发送测试报告服务

为每个测试失败用例创建URL:

pytest --pastebin=failed

上面命令将提交测试运行信息到远程服务,并且会为每个失败用例提供一个URL。如果你只是想发送一个特别的失败信息,你可以利用 -x 命令像往常一样选择测试用例集或者添加用例。

为整个会话日志创建URL:

pytest --pastebin=all

目前仅可以复制到 http://bpaste.net

禁用插件

使用 -p no 命令,在调用的时候禁用加载特定的插件,比如,禁用加载doctest插件,这个插件是从text文件列表中执行doctest用例,调用:

pytest -p no:doctest

使用Python调用pytest(2.0版本)

直接调用:

pytest.main()

这句语句跟你从命令行执行pytest命令是一样的,他不会出现SystemExit,但会返回exitcode,可选参数:

pytest.main(['-x', 'mytestdir'])

给pytest.main指定附加插件:

# content of myinvoke.pyimport pytestclass MyPlugin:
    def pytest_sessionfinish(self):
        print("*** test run reporting finishing")pytest.main(["-qq"], plugins=[MyPlugin()])

运行之后,将会显示 MyPlugin被添加了,他的钩子函数被调用:

$ python myinvoke.py
*** test run reporting finishing

网易云免费体验馆,0成本体验20+款云产品!

更多网易技术、产品、运营经验分享请点击

相关文章:
【推荐】 selenium下拉框踩坑埋坑

[翻译]pytest测试框架(二):使用的更多相关文章

  1. [翻译]pytest测试框架(一)

    此文已由作者吴琪惠授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 纯官网译文而已... pytest是一个成熟的.全功能的python测试工具. pytest框架编写测试用例 ...

  2. Pytest测试框架(二):pytest 的setup/teardown方法

    PyTest支持xUnit style 结构, setup() 和 teardown() 方法用于初始化和清理测试环境,可以保证测试用例的独立性.pytest的setup/teardown方法包括:模 ...

  3. pytest测试框架 -- 简介

    一.pytest测试框架简介: (1)pytest是python的第三方测试框架,是基于unittest的扩展框架,比unittest更简洁,更高效. (2)pytest框架可以兼容unittest用 ...

  4. Pytest测试框架(五):pytest + allure生成测试报告

    Allure 是一款轻量级.支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins. pytest 测试框架支持Allure 报告生成. pytest也可以生成juni ...

  5. 『德不孤』Pytest框架 — 1、Pytest测试框架介绍

    目录 1.什么是单元测试框架 2.单元测试框架主要做什么 3.单元测试框架和自动化测试框架有什么关系 4.Pytest测试框架说明 5.Pytest框架和Unittest框架区别 (1)Unittes ...

  6. Pytest测试框架(一):pytest安装及用例执行

    PyTest是基于Python的开源测试框架,语法简单易用,有大量的插件,功能非常多.自动检测测试用例,支持参数化,跳过特定用例,失败重试等功能. 安装 pip install -U pytest  ...

  7. Pytest测试框架(三):pytest fixture 用法

    xUnit style 结构的 fixture用于初始化测试函数, pytest fixture是对传统的 xUnit 架构的setup/teardown功能的改进.pytest fixture为测试 ...

  8. python pytest测试框架介绍二

    在介绍一中简单介绍了pytest的安装和简单使用,接下来我们就要实际了解pytest了 一.pytest的用例发现规则 pytest可以在不同的函数.包中发现用例,发现的规则如下 文件名以test_开 ...

  9. Pytest 测试框架

    一 . Pytest 简介 Pytest是python的一种单元测试框架. 1. pytest 特点 入门简单,文档丰富 支持单元测试,功能测试 支持参数化,重复执行,部分执行,测试跳过 兼容其他测试 ...

随机推荐

  1. hdoj1001--Sum Problem

    Problem Description Hey, welcome to HDOJ(Hangzhou Dianzi University Online Judge).In this problem, y ...

  2. c#基础综述

    一个相关的博客:http://blog.csdn.net/zhang_xinxiu/article/details/8605980 很好的一个网站:http://www.runoob.com/

  3. 动作基类 CCAction

    CCAction动作基类关系 class CC_DLL CCAction : public CCObject { public: CCAction(void); virtual ~CCAction(v ...

  4. 表达式计算-----------eval()运算符

    1.java的eval()方法(或称之为运算符)可以将字符串解析成可以运行的javaScript代码,例如 eval()只有一个参数.如果传入的参数不是一个字符串,那么它会直接返回这个参数.如果传入的 ...

  5. Agc019_F Yes or No

    传送门 题目大意 有若干道判断题,其中有$n$道答案是$Yes$,另外$m$道答案是$No$,问题除了答案差异本质相同.这些题一道都不会做,但是事先知道$n$和$m$的数量.每次机器会事先等概率地排列 ...

  6. Swift错误处理

    相对于可选中运用值的存在与缺失来表达函数的成功与失败,错误处理可以推断失败的原因,并传播至程序的其他部分. throws关键词 一个函数可以通过在声明中添加throws关键词来抛出错误消息. func ...

  7. mongodb数据迁移的两种方式

    环境说明:bbs数据采集的数据越来越多,目前是50G,每天大概以200W的数据量增长.而当前服务器1.2上面的空间不足,需要把数据迁移到空间足够大的1.3上面去 尝试了2种方式对数据进行迁移,一种是r ...

  8. keepalived+nginx实现双机热备

    keepalived是一个类似于layer3, 4, 5 交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机, ...

  9. Linux统计文件夹占用空间大小--du命令基本用法

    命令行环境下要知道linux系统里一个文件夹以及其包含的文件实际所占用的空间大小,linux自带的命令 du可以很好地满足需求. 其他的用法我就不一一写出来了,就列本人觉得会用得最多的,直接上: $ ...

  10. MATLAB模糊逻辑工具箱函数

    说明:本文档中所列出的函数适用于Matlab5.3以上版本,为了简明起见,只列出了函数名,若需要进一步的说明,请参阅MATLAB的帮助文档. 1. GUI工具 Anfisedit      打开ANF ...