首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyTest与GitHub工作流/自动化控制测试失败

PyTest与GitHub工作流/自动化控制测试失败
EN

Stack Overflow用户
提问于 2021-10-22 18:52:17
回答 1查看 132关注 0票数 0

虽然我已经使用Python很多年了,但我意识到主要是在个人项目上工作,我以前从来不需要进行单元测试,所以对于我可能做出的明显的问题或错误的假设,我表示歉意。我的目标是了解如何进行测试,并可能将所有内容与GitHub工作流结合起来,以创建一些自动化。我已经看到在本地引发的失败/错误(在概念上是不同的),一旦联机,就不会被区别对待。但在我离开之前,我有一些疑问,我想澄清。

从网上阅读,我最初的理解似乎是,一个测试应该总是成功的,即使它包含错误或失败。但是如果它成功了,我怎么能记录一个失败或一个错误呢?所以我很想说我用错误的方式捕捉了这件事?我理解在敏捷环境中,有些人想说这是一个受控的过程,在查看代码时可以拦截错误。但我不确定这是最好的方法。

这就引出了第二个问题。

假设我有一个接受日期的函数,我知道它不能接受其他任何东西。

  1. 做一个测试来传递字符串(并得到失败)是否有意义?
  2. 还是我应该只测试预期的情况?

假设案例1)是一种最佳实践;在运行这些测试时,我应该做些什么?我应该让测试失败并得到一长串错误列表吗?或者我应该用一个@pytest.mark.xfail()来装饰函数(这是一种软失败,在这里我可以尝试.抓到)?

最后一个问题(就目前而言):xfail装饰器是否会让工作流自动化将测试视为“通过”。也许不会,但在这个阶段,我头脑中有太多的困惑,有经验的用户的任何清晰都会有所帮助。

谢谢你阅读的耐心。

EN

回答 1

Stack Overflow用户

发布于 2021-10-24 16:47:28

这个问题有点模糊,但我会有机会的。

  1. 即使测试有错误,测试也应该总是成功的想法可能是一个误解。失败的测试是错误的,应该显示为错误(已知失败的测试除外,但这是一个特例,见下文)。从评论中我猜实际上意味着其他测试将继续运行,即使一个测试失败了,这当然是有意义的,特别是在CI测试中,您想要了解整个情况。
  2. 如果您有接受日期的函数,而没有其他函数,则应该测试它确实只接受日期,并在给定无效日期的情况下引发异常或其他情况。我在评论中的意思是,如果您的软件确保只有一个日期可以传递给该函数,并且这也是通过测试来确保的,那么就不需要再测试它了,但是总的来说--是的,应该测试它。

因此,举几个例子:如果指定您的函数对无效输入引发异常,则必须使用类似于pytest.raises的方法进行测试--如果不引发异常,它将失败。如果您的函数将通过记录错误来处理无效日期,则测试将验证错误是否已记录下来。如果只应忽略无效的输入,则测试应确保不引发异常,且状态不会更改。

  1. 对于xfail,我只是向您介绍一下最热的文件,在这里很好地描述了这一点:

xfail意味着您希望测试由于某种原因而失败。一个常见的例子是对一个尚未实现的特性的测试,或者一个尚未修复的bug。当测试通过时,尽管预期会失败(标记为pytest.mark.xfail),它是一个xpass,并将在测试摘要中报告。

因此,一个通过的xfail测试将显示为确实通过。您可以轻松地亲自测试:

代码语言:javascript
复制
import pytest

@pytest.mark.xfail
def test_fails():
    assert False

@pytest.mark.xfail
def test_succeeds():
    assert True

给出了这样的东西:

代码语言:javascript
复制
============================= test session starts =============================
collecting ... collected 2 items

test_xfail.py::test_fails 
test_xfail.py::test_succeeds 

======================== 1 xfailed, 1 xpassed in 0.35s ========================

测试被认为通过了(例如,退出代码为0)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69681830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档