问题标签 [pytest-mock]

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 回答
285 浏览

python - pytest 参数化一个自动使用的夹具

我有大量使用 pytest 并依赖于设置为自动使用的夹具的测试(高 100 秒)。我需要运行相同的 100 次测试,但由夹具控制的轻微变化。

考虑以下设置,该设置演示了我尝试使用的技术,但不起作用:

conftest.py

my_test.py

这是我看到的错误示例:

我看到了一些有些 相关的 问题,但我似乎无法找到如何在何时对夹具进行参数化autouse=True。似乎要做我想做的事情,我需要使用@pytest.mark.parametrize装饰器更新 100 个测试并独立参数化每个测试。想法?

0 投票
1 回答
67 浏览

pytest - 已修补模块时正确修补 pytest 中的方法

我们有一个测试夹具,它可以修补两个类,如下所示。

LicenseContent 为许可内容的 api 调用提供服务并使用 UserLicense。

UserLicense 是第三方导入的许可证用户(使用加密)的类检查并服务于三个目的。

  1. 检查许可证验证的所有加密方法。
  2. 如果用户通过方法 isvalid() 拥有有效的许可证
  3. 通过方法 userrole() 设置用户的正确授权

通过修补 UserLicense 我可以测试 isvalid,但是当我尝试修补方法以获取用户角色时,它不会将方法的返回值设置为管理员并且测试失败。

修补方法的正确方法是什么?

0 投票
0 回答
53 浏览

python - 测试当前模块外的变量是否写入

我正在尝试为在专用 global_variables 模块中写入变量的函数编写一个 pytest 套件,但我不知道如何检查变量是否被写入那里。我已经尝试使用 pytest-mock 的 mocker.patch 来模拟变量,但 mocker 似乎只允许你从一个模拟变量中读取,而不是写入一个。

正在测试的代码:

我的单元测试:

我想添加某种监听器来查看是否正在写入 gv.name,类似于 mocker 的 .assert_call_with() 方法的工作方式,但我正在寻找类似 .assert_written_to 的东西。

0 投票
1 回答
882 浏览

python - `requests_mock` 适用于所有请求,即使它们未设置并抛出 NoMockAddress 异常

我发现requests_mock用作固定装置pytest适用于所有请求,即使它们没有设置。

我不确定这是requests_mock/pytest错误还是我遗漏了一些东西。最终,我不需要模拟 'api-b' 调用,但我不知道如何避免它。

我正在使用pytestrequests-mockpytest-mock为 API 端点编写集成测试。在后台,这个端点对我需要模拟的不同第三方 API 进行了多次调用。

其中一些调用可以被requests_mock. 但其中一些不能,因为他们从第三方模块内部进行调用。

我试图用pytest-mockmock最后一个,发现它基本上不起作用。 requests_mock仍在尝试模拟该调用并引发下一个错误: requests_mock.exceptions.NoMockAddress: No mock address: GET https://api-b.com/

0 投票
0 回答
38 浏览

python-3.x - Pytest 补丁:使用了不同的 Mock

我正在尝试修补一个名为 的导入类BotoAWSRequestsAuth,因为我想断言一个使用身份验证的调用。

当我修补导入的类然后尝试在我的断言中使用补丁失败时,因为使用了不同的魔术模拟,我似乎无法弄清楚为什么会发生这种情况。

我得到的错误是:

我试图创建我的代码的提取和最小版本:

在使用身份验证的模块中:

在测试中:

我做错了什么很明显吗?也许我实际上根本没有嘲笑构造函数调用,因为实际对象看起来像BotoAWSRequestsAuth()断言错误。

0 投票
1 回答
138 浏览

python - 如何根据输出错误重新运行特定的 pytest 测试

说如果 appium 抛出 webdriver 异常错误,那么只有那个特定的测试应该在 pytest 中重新运行

0 投票
0 回答
112 浏览

python - 为什么我不能修补 multiprocessing.Process?

所以我有这些文件:

发射器.py

常见的.py

现在我有了这个测试文件,用 pytest-mock 插件为 pytest 编写:

我无法让这个测试工作。

我尝试设置WHERE_TO_PATCH为:

  • transmitter.MP.Process
  • common.MP.Process
  • multiprocessing.Process

它们都不起作用。我一直有错误AttributeError: 'TxWorker' object has no attribute 'canary'

我哪里做错了?

0 投票
1 回答
895 浏览

python - 在另一个函数中调用的模拟类方法

我想模拟一个类方法的输出,它由不同模块中定义的函数调用。例如:

类模块.py

函数模块.py

测试.py

但是,我得到一个AssertionError说法[1,2,3] != []。所以我想模拟永远不会发生在我想要的方法上。有人可以解释怎么做吗?为什么会这样?

编辑

实际上,显示的实现不起作用,因为测试正在启动一个完全独立的过程。因此,不能模拟任何函数。对不起我的误解

0 投票
0 回答
135 浏览

python - pytest-mock:在没有夹具和导入的情况下模拟不起作用是全局的

我正在使用 PyCharm Pro,并且我将 Python 解释器配置为来自 Docker 的远程解释器。

我的项目结构是这样的

我正在使用pytestpytest-mock

我定义了一个测试tests/package1/test_helper_functions.py来测试package1.helper_functions.helper_func1调用helpers.some_long_operation我想模拟的这个函数的函数。

所以我愿意。

因此,当我执行测试时,原始helpers.some_long_operation文件会被调用。

但是,当我在测试函数中创建一个夹具并在conftest.py本地导入该函数时,模拟工作并且不会调用原始函数。

所以我在tests/package1/conftest.py

我在测试中使用这个夹具并package1.helper_functions.helper_func1在函数内部本地导入。

现在我很好,这暂时有效,但我很好奇它为什么会发生。

0 投票
1 回答
539 浏览

python - 如何使用pytest测试用于生成报告的python函数?

我有一个读取 excel 文件并根据其内容生成报告的功能。如何在 pytest 中编写测试以检查文件是否生成并按预期创建报告?

测试涉及创建新文件以生成报告的功能时,最佳实践是什么?这个功能可以通过Mocking文件路径来测试吗?