pytest学习总结2.9 - 处理失败用例,2.10-管理日志,2.12-处理警告_pytest用例执行失败日志-程序员宅基地

技术标签: pytest  

2.9 如何重新运行失败的测试,并在测试运行之间维护状态

2.9.1 如何运行失败的用例

该插件提供了两个命令行选项来重新运行上次最小的调用中的失败:
–lf, --last-failed:只重新运行失败
–ff, --failed-first:先运行失败的用例,然后再运行其余的测试
–nf, --new-first:首先运行新的测试,然后运行其余的测试,在这两种情况下,测试也按文件修改的时间排序,首先是最近的文件。

2.9.2 如何跳过失败的用例

# content of test_50.py
import pytest
@pytest.mark.parametrize("i", range(50))
def test_num(i):
    if i in (17, 25):
        pytest.fail("bad luck")
        # pytest.skip("跳过用例")
pytest -q test_moudle.py
pytest -q test_moudle.py --ff
pytest -q test_moudle.py --lf
pytest -q test_moudle.py --nf

C:\Users\Desktop\python>pytest -q test_moudle.py
.................s.......s........................                                                                                                                               [100%]
48 passed, 2 skipped in 0.07s

2.9.3 在上次运行中没有任何失败时的情况

当上次运行中没有测试失败,或者没有找到缓存的最后失败数据时,可以使用选项配置为运行所有测试或没有测试,该选项接受以下值之一:
pytest -q test_moudle.py --last-failed --last-failed-no-failures none
pytest -q test_moudle.py --last-failed --last-failed-no-failures all

2.9.4 设置新的缓存 config.cache 对象

# content of test_caching.py
import pytest
def expensive_computation():
    print("running expensive computation...")
@pytest.fixture
def mydata(request):
    val = request.config.cache.get("example/value", None)
    if val is None:
        expensive_computation()
        val = 42
        request.config.cache.set("example/value", val)
    return val
def test_function(mydata):
    assert mydata == 23

2.9.5 检查缓存内容

pytest --cache-show example/*

2.9.6 清除缓存内容

对于来自连续集成服务器的调用,建议使用这样做,因为隔离和正确性比速度更重要:
pytest -q test_moudle.py --cache-clear

2.9.7 逐步【不深入】

2.10 如何管理日志?

Pytest自动捕获级别警告或以上的日志消息,并以与捕获的stdout和stderr相同的方式在它们自己的部分中显示它们

pytest --log-format="%(asctime)s %(levelname)s %(message)s" --log-date-format="%Y-%m-%d %H:%M:%S"

pytest.ini文件配置:

[pytest]
log_format = %(asctime)s %(levelname)s %(message)s
log_date_format = %Y-%m-%d %H:%M:%S

不捕获失败日志:
pytest --show-capture=no

2.10.1 单倍体夹具

import logging
def test_foo(caplog):
    caplog.set_level(logging.INFO)
    logging.debug("cuol")
    pass

2.10.2 Live日志

通过将log_cli配置选项设置为true,pytest将在日志记录直接发送到控制台时输出它们。
所有的CLI日志选项也可以在配置INI文件中设置。选项名称为:
log_cli_level
log_cli_format
log_cli_date_format
如果您需要记录整个测试套件,请日志记录调用到一个文件:
–log-file=/path/to/log/file
–log-file-level
–log-file-format
–log-file-date-format
–log-format
–log-date-format

2.10.3 自定义颜色

import pytest
@pytest.hookimpl
def pytest_configure(config):
    logging_plugin = config.pluginmanager.get_plugin("logging-plugin")
    # Change color on existing log level
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.INFO, "cyan")
    # Add color to a custom log level (a custom log level `SPAM` is already set up)
    logging_plugin.log_cli_handler.formatter.add_color_level(logging.SPAM, "blue")

2.10.4 Release notes

这个特性是作为最小的捕获日志插件而引入的,它们相互冲突。当引入这个功能时,与小捕获日志的向后兼容API已经被删除,因此如果你仍然需要,
你可以通过添加到你的pytest.ini来禁用内部功能:

[pytest]
addopts=-p no:logging

2.10.5 在测试3.4中不兼容的变化【不用看】

2.11 如何捕获 st 输出/stderr输出【不用看】

2.12 如何捕获 警告

Pytest现在会在测试执行期间自动捕获警告,并在会话结束时显示它们

# content of test_show_warnings.py
import warnings
def api_v1():
    warnings.warn(UserWarning("api v1, should use functions from v2"))
    return 1
def test_one():
    assert api_v1() == 1

pytest test_show_warnings.py

2.12.1 控制警告

Pytest提供了它自己的-W标志来控制哪些警告被忽略、显示或转换为错误。此代码示例显示了如何将任何用户警告类别类别的警告视为错误:
pytest -q test_show_warnings.py -W error::UserWarning
例如,下面的配置将忽略匹配一个正则表达式的所有用户警告和特定的弃用警告,但它将把所有其他警告转换为错误。忽略了警告:userwarning he function,
将其他警告视为error

# pytest.ini
[pytest]
filterwarnings =
    error
    ignore::UserWarning
    ignore:function ham\(\) is deprecated:DeprecationWarning

2.12.2 @pytest.mark.filterwarnings

您可以使用@pytest.mark.filterwarnings向特定的测试项添加警告过滤器,允许您更好地控制应该在测试、类甚至模块级别上捕获哪些警告:

import warnings, pytest
def api_v1():
    warnings.warn(UserWarning("api v1, should use functions from v2"))
    return 1
@pytest.mark.filterwarnings("ignore:api v1")
def test_one():
    assert api_v1() == 1

应用于模块中的所有测试:
pytestmark = pytest.mark.filterwarnings(“error”)

2.12.3 禁用警告摘要

如果您的测试套件使用外部系统处理警告,如何禁用警告:

[pytest]
addopts = -p no:warnings

2.12.5 对弃用警告、废弃警告的忽略

默认情况下,pytest将显示弃用警告和等待弃用警告来自用户代码和第三方库的警告, ,隐藏一些发生在您无法控制的代码中的特定弃用警告是很有用的,
在这种情况下,您可以使用警告过滤器选项(ini或标记)来忽略这些警告。这将忽略所有类型的警告消息的开始与正则表达式匹配的警告

[pytest]
filterwarnings =
    ignore:.*U.*mode is deprecated:DeprecationWarning

2.12.6 确保代码触发弃用警告【不看】

2.12.7 使用警告功能断言警告【不看】

2.12.8 记录警告【不看】

2.12.9 测试中的警告的附加用例【不看】

2.12.10 自定义故障消息【不看】

2.12.11 内部最严重警告【不看】

2.12.12 资源警告【不看】

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_45451320/article/details/124110648

智能推荐

Android Studio搭建Flutter环境_android studio flutter環境-程序员宅基地

文章浏览阅读1.3k次,点赞4次,收藏4次。一、Flutter介绍Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。二、环境搭建Flutter 的环境搭建⼗分省⼼,特别对应Android开发者⽽⾔,只是在AndroidStuido上安装插件,并下载..._android studio flutter環境

DHCP八种报文 Discover Offer Request Ack Nack decline release inform及其工作原理流程 详解_dhcp discover-程序员宅基地

文章浏览阅读2.2w次,点赞18次,收藏110次。工作端口服务端端口:67客户端端口:68八种协议DiscoverDHCP客户端寻找DHCP服务器位置时所使用的报文。DHCP请求客户端时,因不知服务器位置,便在本地网络中以广播形式发送Discover请求报文。所有收到该报文的DHCP服务器会发送应答报文,以此知道服务器在网络中的位置。OfferDHCP服务器收到Discover报文后,就会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其他配置信息(如网关 DNS服务器等),构造一个Offer报文,发送给DHCP客户端,告知用户_dhcp discover

IPSec故障排除:了解和使用调试指令_no proposal chosen-程序员宅基地

文章浏览阅读6.1k次。跳转到页面内容跳转到页脚产品支持合作伙伴与代理商更多CNZH搜索登录已有帐户?个性化内容您的产品和支持登录忘记了用户 ID 或密码?管理帐户需要帐户?创建帐户帮助CNZH选择语言选项已选国家/地区:Mainland China -简体中文All Countries / RegionsNorth AmericaAfricaAsia Pacific..._no proposal chosen

word设置表格文字紧贴下框线_表格中文字紧挨下边框-程序员宅基地

文章浏览阅读2.5w次,点赞30次,收藏45次。在用word编写开题报告、毕业论文时,需要在首页封面上填写一些个人的相关信息,填写的内容下方应绘制横线,为了使整体内容方便的居中对齐,通常会绘制一个无框线的表格,并使用表格的下框线来绘制横线,但如果直接添加下框线,框线会与文字有一定的距离,不够美观,如下图所示。为了使word表格中文字紧贴下框线,可以通过如下操作实现。选中整个表格,在段落设置中将行距设置为固定值,设置值根据字体大小和需要自行进行调整,同时为了与上一段文字分隔一定的距离,设置为段前1行,我表格中的文字为等线三号,段落具体设置值如下图所示。_表格中文字紧挨下边框

jooq多表查询_jooq使用示例-程序员宅基地

文章浏览阅读481次。packagecom.transsnet.sims.business;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.commons.lang3.StringUtils;importorg.jooq.Condition;import..._jooq查询指定字段

金蝶EAS DEP无法扩展时可添加DEP白名单_eas dep 白名单-程序员宅基地

文章浏览阅读1.1k次。//白名单路径,进去参考产品现有的新建即可runtime\server\properties\dep\whitelist_eas dep 白名单

随便推点

eslint vscode 自动格式化_VScode下搭配ESLint、TSLint、stylelint的代码检查配方-程序员宅基地

文章浏览阅读293次。使用VScode打开项目时,避免项目路径过深。尽量做到开发a项目就打开a项目,如dir/path/path/a这样的路径,不要vscode打开dir来开发a。因为可能会导致eslint的一些提示出现不准确的现象。关键词:ESLint配置+自动修复、TSLint配置+自动修复、stylelint配置+自动修复ESLint1. 首先安装eslint,并增加相关配置$ yarn add eslint新建..._no-consecutive-blank-lines

Java Spark读取Hbase数据,将结果写入HDFS文件_java spark读写hbase-程序员宅基地

文章浏览阅读6.4k次,点赞4次,收藏9次。环境:Hadoop2.6,Spark2.1, jdk1.8注意:hadoop集群启用了kerberos认证,不带认证的需要根据注释简单修改几行代码即可一、案例Java编程要求:读取Hbase表zyl_user,按年龄降序将对应的人进行排序输出到HDFS上。数据表zyl_user如下:hbase(main):002:0> scan 'zyl_user'ROW ..._java spark读写hbase

易班 华南理工大学 新生入学教育在线考试 题库共503题_华南理工大学开学考试考什么-程序员宅基地

文章浏览阅读2.9w次,点赞5次,收藏8次。题库503题非常全!_华南理工大学开学考试考什么

使用CryptoJS中的AES实现加解密(前端后端)_cryptojs.aes-程序员宅基地

文章浏览阅读3.1k次,点赞2次,收藏4次。最近为了解决项目中用户名、密码明文传输的问题,使用了AES在前台加密,然后在后台解密,稍微整理了一下,记录AES前台加解密和后台java加解密,以防忘记。前台使用CryptoJS实现AES加解密的,所以要先下载组件,下载CryptoJS-v3.1.2版本之后,文件中包含components和rollups两个文件夹,components文件夹下是单个组件,rollups文件夹下是汇总,引用ro..._cryptojs.aes

Vue表单拖拽排序_vue多表单排列-程序员宅基地

文章浏览阅读774次,点赞3次,收藏4次。Vue table表单拖拽排序业务需求:因为数据展示使用的是 elementUI的 Table进行数据展示的,现在的需求是通过拖拽表单进行表单排序。同时,动态修改表单中的数据排列顺序。查阅了好多资料,也翻看了好多github上别人封装好的表单插件,但是最终都不是自己想要的,其中主要原因就是,后台管理系统页面中,同一个窗口可能涉及到多个表单拖拽排序,与此同时,使用部分插件就有可能导致数据更新不及时,或者下次在使用的时候,数据无论如何赋值就是更新不成功,导致最终渲染的要拖拽的表单一会有数据,一会无数据的,体_vue多表单排列

使用MNE工具包处理脑电数据(2)基础处理总览(EEG、MEG、ERP研究)_gradiometer eeg-程序员宅基地

文章浏览阅读1.7k次,点赞3次,收藏11次。@TOCepochs segementation获取事件码mne中利用find_events获得数据中已有的事件码,tip:事件码存储在channels中的’status’,因此前面提取通道的时候务必保留该通道。events = mne.find_events()分割事件mne中用Epoch函数进行事件分割,返回对象类似字典,调用方式也与字典相同如epoch[‘keyname’]。在Epoch函数中,需要定义事件码与事件名称,并赋值给Epoch第二个参数。events_id = {'name_gradiometer eeg

推荐文章

热门文章

相关标签