跳转到主要内容

未提供项目描述

项目描述

此包包含测试固定设备和资源,用于启动隔离的数据库和SQLAlchemy测试固定设备,以便在使用SQLAlchemy ORM时,您的Python单元测试可以在不相互干扰的情况下运行。

数据库在测试过程运行开始时初始化一次,会话固定设备也是如此。会话固定设备确保任何提交都不会永久提交,并在每个测试完成后将数据库回滚到干净状态。

要求

Python 3.8及以上版本应正常工作。

快速入门

使用pip安装

pip install db-testtools

示例基本测试类

class DBTestCase(testresources.ResourcedTestCase, testtools.TestCase):
    """Base class for all DB tests.

   Brings up a temporary database and gives each test its own session.
   """

   # These are resources that stay active for the entire
   # duration of all the tests being run.
   db_fixture = DatabaseResource(
       ModelBase,
       'myproject.models',
       future=True,
   )
   resources = [('database', db_fixture)]

   def setUp(self):
       super().setUp()

       self.session_fixture = SessionFixture(self.database, future=True)
       self.useFixture(self.session_fixture)
       # The session itself.
       self.session = self.session_fixture.session
       # The session factory.
       self.Session = self.session_fixture.Session

此基本测试类默认将启动基于SQLite的数据库,并将self.session注入为SQLAlchemy会话,将self.Session注入为SQLAlchemy会话工厂。

如果您需要使用不同的数据库,则可以
  • engine_fixture_name参数传递给DatabaseResource

  • 设置环境变量TEST_ENGINE_FIXTURE

以使用要使用的引擎固定设备名称。目前有这两种可用

  • SqliteMemoryFixture

  • PostgresContainerFixture

引擎驱动程序

目前实现了上述两种驱动程序。SQLite固定设备实现了一个简单的内存数据库,每个测试都会完全删除并重新建立。

PostgresContainerFixture在其本地Docker容器中启动自己的Postgres实例。因此,在您使用此固定设备之前,您必须安装Docker。默认使用的Postgres映像是16.3-alpine,但此固定设备已知可以追溯到v11。

如果您已经在Docker内部运行,则需要使用–network-“host”选项启动容器,以便127.0.0.1路由到已启动的PG容器。您还需要做以下两件事:

  1. 将/var/run/docker.sock挂载到容器上,以便Docker客户端可以在主机上创建同级容器。

  2. 如果您不能使用主机网络,则需要提供主机网络桥接器的IP地址(通常是docker0等),以便设备知道在哪里找到PG服务器。IP地址可以通过构造函数提供给PostgresContainerFixture,或者您可以通过设置DBTESTTOOLS_PG_IP_ADDR环境变量。

此代码已在Cisco的一个大型项目中每天使用多年,非常稳定。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

db_testtools-2024.7.22.tar.gz (13.4 kB 查看散列值)

上传时间

构建分布

db_testtools-2024.7.22-py3-none-any.whl (17.3 kB 查看散列值)

上传时间 Python 3

由以下机构支持