Python 根据本地代码从另一个pip安装包运行py.test测试

Python 根据本地代码从另一个pip安装包运行py.test测试,python,pytest,Python,Pytest,我正在构建一个包,该包提供(1)一个带有(2)可插拔驱动程序的固定接口。所需的驱动程序将由软件包用户选择。我的包将包含至少一个驱动程序,但我希望其他开发人员能够实现和验证符合包接口的驱动程序。因此,我希望这些开发人员能够针对他们的驱动程序运行我的测试。 目前,我正在使用py.test的参数化装置将驱动程序注入测试: #conftest.py 导入我的包装 导入pytest @fixture(params=[my_pkg.MyDriver]) def驱动程序(请求): 返回请求.param #m

我正在构建一个包,该包提供(1)一个带有(2)可插拔驱动程序的固定接口。所需的驱动程序将由软件包用户选择。我的包将包含至少一个驱动程序,但我希望其他开发人员能够实现和验证符合包接口的驱动程序。因此,我希望这些开发人员能够针对他们的驱动程序运行我的测试。

目前,我正在使用py.test的参数化装置将驱动程序注入测试:

#conftest.py
导入我的包装
导入pytest
@fixture(params=[my_pkg.MyDriver])
def驱动程序(请求):
返回请求.param
#my_pkg/tests/conftest.py
导入我的包装
导入pytest
@pytest.fixture
def my_接口(驱动程序):
返回my_pkg.MyInterface(驱动程序)
#my_pkg/tests/test_my_interface.py
def test__it_做正确的事情(我的界面):
断言我的_接口。some_method()=“some return value”
我以这种方式构建它,希望有人能够收集并运行我对他们版本的
驱动程序
fixture的测试。换句话说,他们的软件包看起来是这样的:

#setup.py
从设置工具导入设置
设置(
# ...
安装_需要=[“我的打包”])
#conftest.py
导入他们的包装
导入pytest
@fixture(参数=[他们的包.他们的河])
def驱动程序(请求):
返回请求.param
显然,这还不足以让它工作,因为py.test似乎没有提供从外部包注入测试的选项但如果可能的话,这怎么可能呢?

(在概念上似乎类似,但作者似乎完全在一个代码库中工作。我希望一个完全独立的pip安装包能够引用我的pip安装包中包含的测试。)

作者:

  • 实现它从我的包中嫁接了必要的测试套件
  • 要求使用者在其一个测试文件中实例化我的自定义类,
    my_pkg.MyDriverSuite
    ,然后
  • 使用
    pytest\u pycollect\u makeitem
    钩子拦截自定义实例并注入我的收集器的编写
  • (注:这种方法避免了使用参数化夹具。)


    定制收集器是迄今为止最难理解的部分,因为它需要对py.test内部进行大量挖掘,并最终重新实现核心py.test收集器的精简版本,
    Session
    ,其中一个定制会话
    Config
    ,其
    rootdir
    设置为我的包