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

智能推荐

2023年值得关注的几个跨境电商平台!_2023哪些跨境平台值得做-程序员宅基地

文章浏览阅读1.5k次。2022年即将过去了,2023年您打算做什么呢?不少小伙伴打算做​​​​​​​跨境电商了,目前也正在学习当中,这里就告诉大家一下2023年值得关注的几个跨境电商平台吧!_2023哪些跨境平台值得做

深度学习 - 10.TF x Keras 基于 CNN 与 RNN 的文本序列 - 温度预测问题-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏31次。一.引言上一篇文章基础文本处理 processing && embedding介绍了常用的文本处理方法,趁热打铁了解一下处理连续文本的 demo 流程。二.数据信息与获取下面例子将用到气象记录站的天气时间序列,数据集中每10分钟记录14个不同的指标,包含气压,温度,湿度,风向等等环境相关的特征,这里采用 2009-2016 年的数据作为备选。1.源数据获取通过本地 terminal 输入如下命令,即可在对应 Downloads 文件夹下获取到原始数据。 ..

python获取视频帧率,总帧数,python ffmpeg获取视频信息ffmpeg.prob,python opencv获取视频信息cap.get(cv2.CAP_PROP_FRAME_WIDTH)-程序员宅基地

文章浏览阅读2.3w次,点赞9次,收藏59次。文章目录1,效果2,ffmpeg获取视频信息2,opencv获取视频信息1,效果2,ffmpeg获取视频信息其中key:‘streams’对应的值是一个list,list中有两个dict类型的值,分别表示视频中视频流和音频流的相关信息。key:‘format’对应的值是一个dict,其中包含了视频的相关的格式信息、视频时长信息、文件大小信息等。import ffmpegde..._cap.get(cv2.cap_prop_frame_width)

Bitmap.createBitmap java.lang.IllegalArgumentException: width and height must be > 0 问题解决-程序员宅基地

文章浏览阅读3.6k次。java.lang.IllegalArgumentException: width and height must be > 0 在postraotate之前需要设置转换矩形区域旋转时要判断旋转角度是否大于0,否则不做旋转。缺一报错Matrix mt = new Matrix(); float delta = angle - lastAngle;_java.lang.illegalargumentexception: width and height must be > 0

linux缺页异常处理--用户空间_linux 缺页异常 匿名-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏22次。用户空间的缺页异常可以分为两种情况--1.触发异常的线性地址处于用户空间的vma中,但还未分配物理页,如果访问权限OK的话内核就给进程分配相应的物理页了2.触发异常的线性地址不处于用户空间的vma中,这种情况得判断是不是因为用户进程的栈空间消耗完而触发的缺页异常,如果是的话则在用户空间对栈区域进行扩展,并且分配相应的物理页,如果不是则作为一次非法地址访问来处理,内核将终结进程下面来看d_linux 缺页异常 匿名

【MFC】多文档窗口实现现实多个不同的view窗口_mfc多文档生成多个子窗口-程序员宅基地

文章浏览阅读1.6k次。在InitInstance函数中添加多个文档模板m_pTemplateSchematicView = new CMultiDocTemplate(IDR_CTEMATYPE, RUNTIME_CLASS(CCTEMADoc), RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架 RUNTIME_CLASS(CCTEMAView)); if (!m_pTemplateSchematicView) re..._mfc多文档生成多个子窗口

随便推点

git reset 和 git revert_git revert和reset-程序员宅基地

文章浏览阅读1.4w次,点赞26次,收藏74次。一、问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset)、反做(revert)。二、背景知识git的版本管理,及HEAD的理解使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支。如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支。有一个HEAD指针指向当前分支(只有一个分支的情况下会指向ma_git revert和reset

ROS2+NAV2如何快捷的在docker中使用主机的CAN_ros2 nav2 docker arm 部署-程序员宅基地

文章浏览阅读384次。2.基于镜像创建新容器:注意为了保证和旧容器其它配置全部一样,创建时,需要保留旧的配置和旧容器创建是一样(包括挂载的目录、关键变量等),然后修改或者增加自己需要加的改动。其中old_container_id为老的容器ID,new_image为镜像名,v1为标签。如果容器已经创建,忘记指定--network=host了,又不想删除老容器,想仍然用这个容器里面的各种配置,可以考虑创建一份这个容器的镜像,基于这个镜像,指定--network=host,创建新的容器。_ros2 nav2 docker arm 部署

# Android 设置PNG图片的 打印分辨率 dpi (pHYs)_phys dpi-程序员宅基地

文章浏览阅读3k次。Android 设置PNG图片的打印分辨率dpi(pHYs)1.了解png的原文件数据,头文件IHDR,控制物理密度的pHYs,关于png的头文件IHDR:https://blog.csdn.net/satanzw/article/details/38757121png图片都是以固定标识89 50 4E 47 0D 0A 1A 0A开始,然后接着IHDR例如一张png从头开始为:..._phys dpi

uniapp 解决app头部导航和手机顶部状态栏叠加问题及样式拼接写法_app顶部状态栏与头部重叠-程序员宅基地

文章浏览阅读3.8k次。app开发,手机顶部状态栏会和app头部导航叠加在一起解决方法:拿到顶部状态栏的高度,再给头部导航加个padding-top在app.vue里拿到状态栏的高度并存放在globalData里onLaunch() { const that = this; uni.getSystemInfo({ success(res) { that.globalData.statusBarHeight = res.statusBarHeight; } })},globalData:{ statu_app顶部状态栏与头部重叠

优雅的反转链表你知道吗-程序员宅基地

文章浏览阅读252次,点赞9次,收藏3次。重复将首节点的下一个节点调整到最前面,如链表1->2->3->4,调整过程为2->1->3->4,3->2->1->4,4->3->2->1。致力于C、C++、Java、Kotlin、Android、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享。将原链表的元素从头到尾入栈后,从栈顶到栈底的元素的顺序即为原链表反转后的顺序。您的支持是我们为您提供帮助的最大动力。使链表从尾节点开始指向前一个节点。

Derby对应用开发的支持-程序员宅基地

文章浏览阅读138次。出处:blog.csdn.net 作者:eye_of_back 更新时间:2007-08-21 原文 一,derby是什么 Derby是什么,即使你说不上来,想必你也早就听说过了,当然了,如果没有听说过,也没有关系,因为下面就要和你说一下Derby。 Derby是一款轻量级的关系型数据库,它的出现要感谢的人很多,其中一位是IBM,它把Cloudscape源码开源,并捐献给了Ap..._derby插件版本一定要匹配吗