当前位置: 首页 > wzjs >正文

微商货源网站大全无忧seo博客

微商货源网站大全,无忧seo博客,全国最缺工100个职业排行榜,班级网站开发报告关注开源优测不迷路 大数据测试过程、策略及挑战 测试框架原理,构建成功的基石 在自动化测试工作之前,你应该知道的10条建议 在自动化测试中,重要的不是工具 当你尝试运行Pytest代码时,那些不相关的警告突然弹出,是不是…

关注开源优测不迷路

大数据测试过程、策略及挑战

测试框架原理,构建成功的基石

在自动化测试工作之前,你应该知道的10条建议

在自动化测试中,重要的不是工具

当你尝试运行Pytest代码时,那些不相关的警告突然弹出,是不是感觉很烦人?


比如来自某个你无法控制的外部库的 DeprecationWarning(弃用警告)。


虽然警告有用,但它们会让你的控制台输出变得杂乱,掩盖重要的结果。


在 Pytest 中要如何消除这些警告呢?是不是该禁用所有警告?那重要的警告又该怎么办呢?


警告是一种重要信号,表明你代码中的某些内容可能不太对,但不一定是错误,比如已弃用的函数或潜在的运行时问题。


它们能帮你在问题升级为更严重的状况之前,预先察觉并改正。


在本文中,你将学习在 Pytest 中通过不同技巧优雅地处理警告。


首先,你会探索 warnings 模块,了解它的含义以及不同类型的警告。


接着,你将学习 Pytest 默认是如何管理警告的,以及如何覆盖配置以满足你的需求,同时还会了解一些管理警告的最佳实践。

理解 Python 警告

在深入代码之前,我们先来了解一下 Python 中的 warnings 模块是什么,以及它最初设计的目的。


warnings 模块是 BaseException 类的扩展,用于突出那些值得关注,但不像异常那样会导致程序中断的问题。


它可以通知你有关语法或功能的情况,这些语法或功能虽然仍能正常工作,但在未来的版本中可能不再受支持。


官方文档解释了不同类型的警告:


  • DeprecationWarning

    :警告关于那些预期在未来版本中会被移除的过时特性。

  • UserWarning

    :用户代码生成的警告的基类。

  • SyntaxWarning

    :警告可疑的语法。

  • RuntimeWarning

    :警告可疑的运行时行为。

  • FutureWarning

    :与 DeprecationWarning 类似,警告关于那些计划在未来某个时候停止使用的已弃用特性。


你可以使用 warnings 库轻松生成警告,例如:


warnings.warn(message, category=None, stacklevel=1)

  • message

    :警告消息,通常是一个字符串。

  • category

    :警告类别(例如 DeprecationWarningUserWarning),有助于像前面讨论的那样进行过滤。

  • stacklevel

    :一个整数,表示报告警告来源时使用的栈帧深度,帮助你确定警告是从哪里触发的。stacklevel 为 1 指向 warn() 函数的调用者。


在使用外部库时,你经常会遇到 DeprecationWarning 或 SyntaxWarning


既然你已经对警告有了一些了解,那我们接着来看你来这里的初衷 —— 如何在 Pytest 中忽略警告。


毕竟,外部库引发的警告不是你的问题,可以将其屏蔽。

在 Pytest 中完全禁用警告


你可以使用 --disable-warnings 命令行选项,从测试运行输出中完全抑制警告摘要。


$ pytest --disable-warnings
这是一个比较极端的选项,有其缺点,最大的问题是当出现与你相关且应该处理的警告时,你不会知晓(因为 Pytest 会过滤掉所有警告)。

你还可以使用 -p no:warnings 命令行选项禁用警告捕获。


$ pytest -p no:warnings
或者使用配置文件和 Pytest 的 addoption:

[pytest]  addopts = -p no:warnings
更好的选择是使用 pytest.ini 文件来抑制或过滤特定的警告。

抑制或过滤警告


Pytest 允许你使用 pytest.ini 文件和 filterwarnings 选项轻松地抑制或过滤警告。


这是一个好得多的选项,它允许你过滤掉特定的警告,而不是所有警告。

[pytest]  filterwarnings =          ignore::DeprecationWarning

这个设置将忽略测试模块中的任何 DeprecationWarning


下面的配置将忽略所有用户警告以及匹配正则表达式的特定弃用警告,但会将所有其他警告转换为错误。

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

抑制或过滤(特定)库的警告


一种更简洁的方法是忽略引发警告的特定库的警告,可以这样做:


[pytest]  filterwarnings =      ignore::DeprecationWarning:module_name.*
例如:

[pytest]  filterwarnings =      ignore::DeprecationWarning:botocore.*:      ignore::FutureWarning:pandas.*
这将抑制来自该库的所有警告。

示例代码组织结构如下


0785681a35177357b5937fe6e4e51421.png


examples/my_module.py


import warnings    
def old_function():      warnings.warn(                "old_function() is deprecated; use new_function() instead.",                DeprecationWarning,                          stacklevel=2,                      )    
def new_function():      print("This is the new function.")      
old_function()

运行这段代码,我们会得到警告。


$ python examples/my_module.py

f383067c917b60ec809c884aaa8232b3.png

让我们编写一个测试。


tests/test_warnings.py


import warnings  from examples.my_module import old_function    
def test_function():      old_function()

运行测试:


$ pytest

c484ebd67cb56905b837148be49245e1.png


示例测试 —— 抑制警告

让我们包含一个 pytest.ini 文件,内容如下:


[pytest]  filterwarnings =      ignore::DeprecationWarning
运行这个测试:

eb12b85ff65fc3941f5e89565af55b7a.png


很顺利。


让我们在代码中添加一个 SyntaxWarning


examples/my_module.py


def old_function():      warnings.warn(                    "old_function() is deprecated; use new_function() instead.",                    DeprecationWarning,                    stacklevel=2,                )                      warnings.warn(                    "The syntax will be removed in version 2.0.0.",                    SyntaxWarning,                    stacklevel=2,                )
让我们运行 Pytest:

87b9f87d6616d8702906f9048f22eb08.png


如你所见,Pytest 抑制了 DeprecationWarning,但仍然显示了 SyntaxWarning


修改我们的 pytest.ini 文件:


[pytest]  filterwarnings =      ignore::DeprecationWarning            ignore::SyntaxWarning
现在我们得到了一个干净的输出。

3893c0aff528d637e08cb67628d63ce1.png

你可以对警告及其抑制进行更多尝试。

使用标记过滤警告


Pytest 还提供了使用标记向特定测试和测试模块添加警告过滤器的选项,这样能实现更精细的控制。


import warnings  import pytest    def api_v1():      # 生成一个带有特定消息的警告。            warnings.warn("api v1, should use functions from v2", UserWarning)                  return 1          @pytest.mark.filterwarnings("ignore:api v1")  def test_one():      # 将忽略消息中包含 "api v1" 的警告。            assert api_v1() == 1

确保代码触发弃用警告


现在,如果你处于代码生成端,即你想测试你的代码是否触发 DeprecationWarning,也可以使用 Pytest 进行测试。


你可以使用 pytest.deprecated_call() 方法。


def test_myfunction_deprecated():      with pytest.deprecated_call():           old_function()
如果 old_function 没有发出弃用警告,这个测试将会失败。

fb289335ee42e4e7cd55e3960929cabe.png


结论


我们来到了文章末尾。


希望你找到了一直在寻找的内容 —— 如何在 Pytest 中轻松过滤警告,无论是来自你自己的库、外部包,甚至是 Pytest 本身的警告。


在本文中,我们介绍了一些关于 Python 警告的基础知识,它们是什么以及如何使用。


然后我们看了最重要的部分,即在 Pytest 中如何禁用或抑制警告(特别是来自外部库的警告)。


最后,你还学习了如何抑制特定库的警告,使用 Pytest 标记过滤警告,甚至断言你自己的 DeprecationWarning

http://www.dtcms.com/wzjs/473399.html

相关文章:

  • 常州外贸网站建设企业关键词优化价格
  • 现在那个网站做视频最赚钱吗如何发布一个网站
  • 织梦模仿网站视频bt磁力在线种子搜索神器下载
  • 怎么做本地婚姻介绍网站用asp做的网站
  • 平谷网站建设百度在西安有分公司吗
  • myeclipse做web网站爱站网关键词查询网站
  • 网站开发市场价苏州关键词排名提升
  • 中粮网站是哪个公司做的seo优化服务是什么意思
  • 网站建站行业公司主页建设nba最新交易一览表
  • 做农产品网站需要做的准备免费关键词搜索引擎工具
  • 网站常用字号宁波技术好的企业网站制作
  • 北京建设局投诉网站外贸网站推广平台
  • 保定哪做网站好seo推广软件排行榜
  • 注册网站域名平台石家庄
  • 教育培训网站建站小程序
  • 做ppt的网站 知乎新冠疫情最新消息今天
  • 百度云网站备案流程小程序开发公司哪里强
  • 网站建设标准合同正规的教育培训机构有哪些
  • 通州建设网站关键词搜索引擎
  • 如何实现输入域名访问网站首页百度大搜推广
  • logo设计在线生成免费影子开封seo推广
  • 东营网站制作团队搜索引擎营销的内容有哪些
  • 网站文件上传完成后打开网站显示网站建设中怎么回事?如何快速优化网站排名
  • 完整的网站优化放啊手机优化大师怎么退款
  • 设计一个自己的电商网站广州优化防控措施
  • 网站开发nodejs站长统计app软件下载官网
  • 个人可以做微信小程序吗?深圳将进一步优化防控措施
  • 有在网上找做网站的人么武汉企业网站推广
  • 建设网站免费模板石家庄seo按天扣费
  • dw做网站太原百度关键词优化