问题标签 [pytest]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
7 回答
126809 浏览

python - 在 pytest 测试中记录

我想在测试函数中放置一些日志语句来检查一些状态变量。

我有以下代码片段:

我得到以下输出:

请注意,只有来自该'__name__ == __main__'块的日志消息才会传输到控制台。

有没有办法强制pytest从测试方法向控制台发出日志记录?

0 投票
3 回答
1537 浏览

python - 如何将 stdlib 日志记录与 py.test 结合使用

我正在使用 py.test 来测试我的一些模块,其中包含相当多的 stdlib 日志记录。我当然希望日志记录到 py.test 捕获的 stdout,这样如果测试失败,我将获得所有相关的日志记录消息。

这样做的问题是,在 py.test 丢弃该对象后,日志记录模块最终尝试将消息记录到 py.test 提供的“stdout”对象。也就是说,我得到:

如果我用 关闭捕获-s,我没有任何问题,但当然这会使测试输出无法读取无关的日志记录。

谁能告诉我将 stdlib 日志记录与 py.test 集成的正确方法?

(我试着看看这个,它看起来应该可以正常工作,所以它对我没有多大帮助)

0 投票
1 回答
1062 浏览

python - py.test 如何在每次测试之前运行一个方法

我在 Python 中使用 unittest 和 nose 进行单元测试,但现在我使用的是 py.test。
unittest 和 nose 总是class.setUp在执行 TestCase 中的每个方法之前调用。

我怎样才能用 py.test 做到这一点?

编辑:如果我添加这个:

我得到所有错误:

EDIT2:好的,我很愚蠢。我必须放在 TestCase 里面而不是外面。谢谢你。

0 投票
2 回答
9008 浏览

python - 在 Python 中生成 py.test 测试

先提问,有兴趣再解释。

在 py.test 的上下文中,我如何从一小组测试功能模板生成大量测试功能?

就像是:

解释:

我正在编写的代码采用模型结构、一些数据,并学习模型的参数。所以我的单元测试由一堆模型结构和预先生成的数据集组成,然后在每个结构+数据上完成一组大约 5 个机器学习任务。

因此,如果我手动编写代码,我需要为每个任务的每个模型进行一次测试。每次我想出一个新模型时,我都需要复制并粘贴 5 个任务,更改我指向的腌制结构+数据。这对我来说是一种不好的做法。理想情况下,我想要 5 个模板函数来定义我的 5 个任务中的每一个,然后为我指定的结构列表吐出测试函数。

谷歌搜索将我带到 a) 工厂或 b) 闭包,这两者都让我脑筋急转弯,并建议我必须有一种更简单的方法,因为适当的程序员必须经常面对这个问题。那么有吗?


编辑:所以这里是如何解决这个问题!

这会将test_awesome测试应用于我的模型列表中的每个模型!谢谢@dfichter!

(注意:断言总是通过,顺便说一句)

0 投票
3 回答
3041 浏览

python - 使用 pytest 对 Python 对象进行单元测试

我有一个方法可以返回满足特定条件的对象列表

我想写一个pytest来验证find_objects()的操作

到目前为止,pytest 指向左尖括号 (<) 并声明“SyntaxError”

我在想,即使我让它工作,将来当'my_object'存储在另一个位置时它也会失败。如果我有多个实例,我如何确认报告的实例数量正确?

在这种情况下,验证返回对象的方法的输出的pythonic方法是什么?

js

0 投票
2 回答
2508 浏览

python - py.test 在自定义 funcargs 中使用 monkeypatch

我使用 py.test 并且非常喜欢将对象注入测试函数的 funcarg 方法。在我的测试中,我需要使用 Mock 对象,因为我有很多外部依赖项。我使用monkeypatch 用模拟对象替换某些属性。

我遇到的问题是,我经常会得到一堆测试,这些测试将使用某个 funcarg 并且总是需要修补相同的属性。到目前为止,我替换了每个测试函数中的属性。

有没有办法在我的 funcarg 函数中使用monkeypatch,并从各个测试中删除这个重复的代码?

0 投票
13 回答
126408 浏览

python - 如何配置 PyCharm 以运行 py.test 测试?

我想开始为我的 Python 代码编写单元测试,而py.test框架听起来比 Python 捆绑的unittest更好。所以我在我的项目中添加了一个“tests”目录,并在其中添加了test_sample.py。现在我想配置 PyCharm 以运行我的“测试”目录中的所有测试。

据称 PyCharm在其测试运行程序中支持 py.test 。你应该能够创建一个运行/调试配置来运行你的测试,据称 PyCharm 有一个专门用于 py.test 的“创建配置”对话框。但这就是他们关于该主题的文档的完整范围,我在任何地方都找不到这个所谓的对话框。

如果我右键单击项目工具窗口中的目录,我应该会看到一个“创建 <名称>”菜单项,但唯一以“创建”开头的菜单项是“创建运行配置”。好的,也许文档是错误的,“创建运行配置”听起来很有希望。不幸的是,其子菜单中仅有的两个项目是“C:\mypath... 中的单元测试”和“C:\mypath... 中的 Doctests”,这两者都不适用——我既没有使用 unittest,也没有使用 doctest。py.test 没有菜单项。

如果我打开我的 test_sample.py 并在编辑器窗口中单击鼠标右键,我会得到承诺的“创建 <name>”菜单项:有“在 test_sa 中创建 'Unittests ...'...”,然后是“运行'test_sa 中的单元测试 ...'”和“调试 'test_sa 中的单元测试 ...'”。再说一遍,这一切都特定于 unittest 框架;py.test 没有。

如果我尝试显示“unittest”的菜单项,我会看到一个对话框,其中包含“名称”、“类型”选项、“测试”组框以及“文件夹”和“模式”以及“脚本”和“类” " 和 "Function" 等。这听起来与文档中记录的为 Python Unit Test 添加配置的对话框完全一样,而不像应该显示的 "Name" 和 "Test to run" 和 "Keywords" 选项在py.test对话框的配置中。对话框中没有任何内容可以切换我要添加的测试框架。

我在带有 Python 3.1.3 和 pytest 2.0.3 的 Windows 上使用 PyCharm 1.5.2。我可以从命令行成功地运行py.test我的测试,所以这不像 pytest 没有正确安装这样简单。

如何配置 PyCharm 以运行我的 py.test 测试?

0 投票
1 回答
537 浏览

python - 在 LSF 上运行 python 单元测试

我需要并行化我使用默认 unittest 模块编写的 python 单元测试。我试图在两种方法之间做出决定:

  1. 继续使用unittest ,但使用自定义的“多进程”运行程序,它可以使用Platform LSF (远程执行工具)生成测试,可以在TestOOB项目中找到一个示例。
  2. 使用py.test并自定义 pytest-xdist 插件以运行 LSF 而不是 SSH。

我倾向于#1,因为我已经有了一个工作设置,尤其是测试套件生成(它使用了一个解析 excel 电子表格的生成器,并且不是微不足道的)

关于遵循特定方法的任何建议?

注意:我的公司正在使用 LSF,我必须使用它与其他团队共享资源。

0 投票
1 回答
106 浏览

python - 在 py.test 中执行的常见设置和清除作业如何?

Python 的unittest有一种方便的方法来执行常见的设置和清理工作,方法是将相关函数分组到一个类中,该类继承unittest.TestCase并提供该类setUptearDown函数。但是,我在py.test中找不到类似的机制。我错过了什么?

0 投票
5 回答
20226 浏览

python - Pytest:取消选择测试

使用 pytest,可以使用装饰器标记测试

然后,从命令行,可以告诉 pytest 跳过标记为“慢”的测试

如果我有一个额外的标签:

我希望能够跳过长测试和慢测试。我试过这个:

还有这个:

而且似乎都不起作用。

在命令行中,我如何告诉 pytest 跳过慢速测试和长时间测试?