问题标签 [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 投票
1 回答
1793 浏览

python - 在 pytest_generate_tests 函数中使用 funcarg 值

我是 py.test 的新手,我正在使用 funargs 在执行测试之前生成一些测试数据。我想让 pytest_generate 钩子使用 funcargs 值并将其传递给测试函数。例如,我有一个函数“do_something”,它查询数据库中给定的一组参数并相应地设置用户的环境。考虑到我们有一个多站点设置,我想在执行测试之前确保数据库具有执行测试的条目。

理想情况下。我想遍历这些值并将它们传递给我的测试函数。我怎样才能做到这一点?

目前我正在这样做:

现在,这行得通。但是每次我添加一个测试用例时,我都需要更新 generate_test 钩子。我在想可能有更简单的方法来做到这一点?

0 投票
23 回答
256414 浏览

python - pytest 'ImportError: No module named YadaYadaYada' 的 PATH 问题

我使用 easy_install 在 Mac 上安装 pytest 并开始为具有如下文件结构的项目编写测试:

在 repo 目录中运行py.test,一切都如你所料

但是当我在 linux 或 windows 上尝试同样的事情时(两者都有 pytest 2.2.3),每当它从我的应用程序路径中第一次导入某些东西时,它就会吠叫。比如说from app import some_def_in_app

我是否需要编辑我的 PATH 才能在这些系统上运行 py.test?有没有人经历过这个?

0 投票
2 回答
1972 浏览

python - py.test 运行 Python2 和 Python3

我编写了一个包(http://github.com/anntzer/parsedcmd),它可以同时运行 Python2 和 Python3。但是,我不得不为 Python2 和 Python3 编写单独的 (py.test) 单元测试(主要是因为我想测试 Python3 的额外功能,特别是仅关键字参数),所以我在子包中有 atest_py2.py和 a 。现在,如果我运行,比如说,通过,但失败了。同样,对于,通过但失败(尽管我可以使这个工作,这只是移至的问题)。test_py3.pytestpy.test2 mypkgtest_py2test_py3SyntaxErrorpy.test3 mypkgtest_py3test_py2StringIOio

我可以设计test子包,以便import mypkg.test只导入正确版本的测试,但显然 py.test 并不关心——它只看到两个匹配的文件test_*并抓取它们中的所有测试,而忽略__init__.py告诉他导入的内容。

所以现在我必须同时做py.test2 mypkg/test/test_py2.pypy.test3 mypkg/test/test_py3.py。有没有办法设置整个事情,以便py.test2 mypkgpy.test3 mypkg正常工作”?

谢谢。

0 投票
4 回答
4951 浏览

python - 如果另一个测试因 py.test 失败,我该如何跳过测试?

假设我有这些测试功能:

如何确保 test_function_two 仅在 test_function_one 通过时运行(我希望它是可能的)?

编辑: 我需要这个,因为测试二正在使用测试一验证的属性。

0 投票
1 回答
669 浏览

python - pytest 自动化显然在测试收集阶段运行测试

使用 pytest 和 selenium 运行 webui 自动化测试;有一个问题,我的测试似乎在收集阶段实际上正在运行。在这个阶段,我希望 pytest 能够收集测试——而不是运行它们。最终结果是我得到了 6 个测试结果,而我预计是 2 个。现在有趣的是,这 6 个结果只出现在 HTML 报告中;在命令行上,我只得到预期的 2 行输出(但运行这两个测试需要 300 秒,因为测试实际上是多次运行)。

测试/test_datadriven.py

数据/data.py

完整源代码可在 github 获得;https://github.com/eanxgeek/katello_challenge

有人知道这里可能发生什么吗?我正在使用 pytest-mozwebqa 插件、pytests 和 selenium。

谢谢!

0 投票
2 回答
2902 浏览

python - pylint 在 py.test 上抱怨:“模块 'pytest' 没有 'raises' 成员”

使用以下代码:

如果我在上面运行 pylint,它会抱怨“raises”不是模块 pytest 的成员:

这显然不是真的。知道为什么 pylint 会犯这样的错误吗?这是一个已知的错误?

py.test 版本:

PyLint 版本:

0 投票
2 回答
4322 浏览

python - 我可以在哪个 py.test 标注中找到“项目”和“报告”数据?

pytest_runtest_makereport() 获取两个参数,item 和 call。从 item 中,我可以找到为此测试创建的 funcarg,从 call 中,我可以找到异常信息(如果有):

不幸的是,excinfo 被填充为失败和跳过。为了区分,我需要查看 pytest_report_teststatus() 的报告参数:

这是很好的信息,但我无法将它与我为测试创建的 funcarg 相关联。我查看了报告参数(TestReport 报告),但找不到任何方法来返回传递给 pytest_runtest_makereport() 或我创建的 funcarg 的项目。

我在哪里可以访问两者?

0 投票
4 回答
4169 浏览

python - 尝试运行 py.test 时收集 setup.py 时出错?

我试图py.test在我的包上运行,但它试图setup.py从项目根目录中解析,即使我试图排除它。

我需要从 *.py 文件中收集测试,因为测试类包含在模块中。

仍然当我运行py.test它会给我ERROR collecting setup.py我已经排除的。

0 投票
2 回答
1553 浏览

python - 如何使用 tox 和 py.test 将单元测试限制在支持的平台上?

我确实有一个小的 python 包teno,我想让它在各种 python 版本上运行、测试和安装,从 2.5 开始到 3.2 结束

我需要 2.5 支持,因为我们仍然有机器运行它并且还不能升级。

目前,单元测试包含在模块中,这使得当您更改模块并运行它们时更容易更新它们,因为main将运行测试。

某些模块并非在所有平台上都可用。

Tox 配置为py.test在所有平台上运行,但[pytest]from 部分仍配置为在所有文件setup.cfg中查找测试。*.py

这带来了一个问题:其中一些文件不应该在上面运行,py25并且不可能为此调整它们。

我正在寻找一种配置,它可以让我指定为某些平台加载(或更好地排除)哪些模块。

期望的行为是能够在所有受支持的 python 版本上安装这个包。(显然应该跳过几个模块)。

0 投票
2 回答
2412 浏览

python - pytest 是否支持“默认”标记?

我正在使用 pytest 来测试嵌入式系统的 python 模型。要测试的功能因平台而异。(在这种情况下,我使用“平台”来表示嵌入式系统类型,而不是操作系统类型)。

组织我的测试最直接的方法是根据平台类型将它们分配到目录中。

pytest /平台1

这很快变得难以支持,因为许多功能跨平台重叠。从那以后,我将测试移到了一个目录中,每个功能区域的测试都分配给了一个文件名(例如 test_functionalityA.py)。然后我使用 pytest 标记来指示文件中的哪些测试适用于给定平台。

虽然我很想'conftest' 自动检测平台类型并只运行适当的测试,但我已经让自己指定在命令行上运行哪些测试。

pytest -m "(platform1 或 all_platforms)"

问题:(终于!)

有没有办法简化事情并让 pytest 默认运行所有未标记的测试,另外所有通过命令行上的“-m”通过的测试?

例如:pytest -m "platform1"

会运行标记为@pytest.mark.platform1 的测试以及标记为@pytest.mark.all_platforms 的所有测试,甚至是根本没有@pytest.mark 的所有测试?

鉴于大量共享功能,能够删除 @pytest.mark.all_platforms 行将是一个很大的帮助。