当前位置: 首页 > 知识库问答 >
问题:

py.test如何以及在何处找到夹具

邬安邦
2023-03-14

py.test在哪里以及如何寻找固定装置?我在同一个文件夹的两个文件中有相同的代码。当我删除conftest.py时,无法找到正在运行test_conf.py(也在同一文件夹中。为什么sonoftest.py没有被搜查?

# content of test_sample.py
def test_answer(cmdopt):
    if cmdopt == "type1":
        print ("first")
    elif cmdopt == "type2":
        print ("second")
    assert 0 # to see what was printed
import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")
import pytest

def pytest_addoption(parser):
    parser.addoption("--cmdopt", action="store", default="type1",
        help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
    return request.config.getoption("--cmdopt")

医生说

http://pytest.org/latest/fixture.html#fixture-作用

  1. pytest查找test_ehlo因为test_前缀。测试函数需要一个名为smtp的函数参数。通过查找名为smtp的夹具标记函数,可以发现匹配的夹具函数。
  2. smtp()被调用来创建一个实例。
  3. test_ehlo()被调用并在测试函数的最后一行失败。

共有3个答案

秦浩漫
2023-03-14

我也遇到过同样的问题,花了很多时间找到了一个简单的解决方案,这个例子适用于其他和我有类似情况的人。

  • conftest.py:
import pytest

pytest_plugins = [
 "some_package.sonoftest"
]

def pytest_addoption(parser):
  parser.addoption("--cmdopt", action="store", default="type1",
      help="my option: type1 or type2")

@pytest.fixture
def cmdopt(request):
  return request.config.getoption("--cmdopt")
  • some_package/sonoftest.py:
import pytest

@pytest.fixture
def sono_cmdopt(request):
  return request.config.getoption("--cmdopt")
  • some_package/test_sample.py
def test_answer1(cmdopt):
  if cmdopt == "type1":
      print ("first")
  elif cmdopt == "type2":
      print ("second")
  assert 0 # to see what was printed

def test_answer2(sono_cmdopt):
  if sono_cmdopt == "type1":
      print ("first")
  elif sono_cmdopt == "type2":
      print ("second")
  assert 0 # to see what was printed

您可以在此处找到类似的示例:https://github.com/pytest-dev/pytest/issues/3039#issuecomment-464489204和其他https://stackoverflow.com/a/54736376/6655459

官方pytest文档中的描述:https://docs.pytest.org/en/latest/reference.html?highlight=pytest_plugins#pytest-插件

需要注意的是,some\u package.test\u sample“中提到的各个目录需要有\uuu init\uuuuuuuuupy文件,以便pytest加载插件

马天逸
2023-03-14

以下是py.test查找夹具(和测试)的顺序和位置(取自此处):

py.test在工具启动时以以下方式加载插件模块:

>

  • 通过加载所有内置插件

    通过加载通过setuptools入口点注册的所有插件。

    通过预扫描命令行中的-p name选项,并在实际的命令行解析之前加载指定的插件。

    通过加载由命令行调用推断的所有conftest.py文件(测试文件及其所有父目录)。请注意,默认情况下,子目录中的conftest.py文件不会在工具启动时加载。

    通过递归加载conftest.py文件中pytest_plugins变量指定的所有插件

  • 闻鹤龄
    2023-03-14

    默认情况下,py.test将导入conftest.py以及与Python\u文件模式匹配的所有Python文件。如果您有一个测试夹具,则需要从conftest.py或依赖它的测试文件中包括或导入它:

    from sonoftest import pytest_addoption, cmdopt
    
     类似资料:
    • 问题内容: 我需要将JNDI名称添加到hibernate中的活动连接池的代码。我已经在Jboss服务器中将连接池配置为JNDI名称为“ EmployeeDB” 如何在hibernate.cfg.xml中配置它? 如果我使用的是Hibernate 4 Final版本,请给我hibernate.cfg.xml的代码。 问题答案: 在Jboss服务器中配置的数据源JDNI名称由属性指定。 基本应如下所示

    • 问题内容: 我想提供有关正在使用的JAXP实现以及从中加载哪个JAR文件的诊断信息。 实现此目的的一种方法是在的实例中创建,然后检查该类的属性: 是否有更好的方法可以实现这一目标,而不必创建一个? 问题答案: 在没有实际创建实例的情况下,很难预测将要加载哪些具体的JAXP工厂实现,因为选择实现的过程非常困难。 从官方JAXP常见问题解答(问题14)中: 当应用程序想要创建一个新的JAXP 实例时,

    • 问题内容: 我想开始为我的Python代码编写单元测试,而py.test框架听起来比Python捆绑的unittest更好。因此,我在项目中添加了“ tests”目录,并在其中添加了test_sample.py。现在,我想配置PyCharm以运行“ tests”目录中的所有测试。 据称,PyCharm在其测试运行程序中支持py.test。您应该能够创建运行/调试配置来运行测试,并且PyCharm据

    • 问题内容: 如何编写此代码以备份父级2个级别以查找文件? 问题答案: 试试这个: 注意相对路径开始处的正斜杠。

    • 问题内容: 我需要在Java中的arraylist中获取最小值的索引值。我的arraylist包含多个浮点数,我正在尝试一种获取最小浮点数的索引号的方法,以便可以在代码的其他地方使用该索引号。我是初学者,所以请不要讨厌我。谢谢! 问题答案: 您可以使用Collections.min和List.indexOf: 如果您只想遍历列表一次(以上内容可能遍历两次):

    • 问题内容: 我在桌面应用程序中使用spring + hibernate。 我正在尝试使用分层实现来构建它,所以我有: GUI层–call- >服务层–call-> DAO层 一个更好地说明我的情况的小例子: 问题是:谁抛出异常并由谁处理? 我认为DAO必须抛出第一个异常,然后服务层将其抛出,最后GUI层处理该异常,这样我才能向用户显示消息,这很好吗?有没有一种方法可以使用spring构建一些Exc