PostgreSQL的Pytest设备

lathorp的Python项目详细描述


Lathorp-PostgreSQL测试夹具

lathorp为涉及访问postgresql数据库的测试代码提供了方便的pytest fixtures

例如,如果测试下的代码将数据写入数据库,或查询数据库中的数据,则需要编写测试以查看 它按您所期望的方式写入和读取数据。 您需要一个隔离和控制的环境来进行测试,因此您需要为 测试并用已知数据填充它。 设置一个新的数据库是一个相对耗时的操作,会减慢测试速度。你想这么做 每个测试会话只需要一次,让多个测试共享同一个临时数据库实例。 但是,许多测试应该彼此隔离-您不希望测试产生副作用(例如,写入 数据库)泄漏到另一个测试。解决方案是在每次测试之前写入已知数据,然后在测试之后将其全部删除 测试已经完成。

固定装置

pgfixture是一个会话范围的fixture,它在每个测试会话中创建一个新的临时数据库并删除 会议结束后。

pg_connectfixture是一个函数范围的fixture,用于建立到临时数据库的连接。 可以选择在测试开始之前将数据加载到数据库中,方法是指向postgresql可以 阅读。在测试函数返回后,数据会被自动删除,这样它就不会泄漏给 可能需要不同的数据。

实用功能

可以使用名为load_schema_definitions的实用函数通过读取sql ddl创建数据库结构 你提供的文件。将它嵌入到您自己的会话范围的fixture中,并与pg_connect一起调用它。

另一个实用程序copy_data以csv或文本格式(postgresql支持)从文件中复制数据。 它可以直接使用,也可以通过将文件路径传递给pg_connectfixture来自动使用。

第三个实用程序delete_data从一组表中删除所有数据。 它由pg_connect自动用于从它加载的表中删除数据copy_data。 您还可以直接使用它来清除测试所做的任何更改。

在项目中使用Lathorp

  1. 在项目的开发包中包含lathorp包。 使用pipenv
pipenv install --dev lathorp
  1. 从测试中的lathorp导入fixture。您还可以在conftest.py中导入它们,使它们对所有人都可用 你的测试。有关示例,请参见本项目中的tests/conftest.py

  2. pgpg_connect作为参数添加到测试函数中,如下所示。没有必要再加上 两者都是,因为pg_connect本身使用pg

defmy_test(pg_connect):"""A test that connects to the temporary test database."""withpg_connect()asconn:withconn.cursor()ascursor:cursor.execute("SELECT 'Hello, world!' AS hello;")

有关更多示例,请参见本项目中的tests/test_fixtures.py

  1. 当您将lathorp与模式定义(sql ddl)文件和测试数据文件(csv或 PostgreSQL可读文本)。 创建一个会话范围的fixture,它调用load_schema_definitions,并为它提供模式定义的路径。 然后将这个fixture与pg_connect一起使用,并为它提供数据文件的路径。

    # In conftest.pyimportpathlibfromlathorpimportload_schema_definitionsfromlathorp.fixturesimportpgfromlathorp.fixturesimportpg_connectdefinit_schema(pg):load_schema_definitions(pathlib.Path('path/to/my/ddl/file_or_directory'))# In your test moduledeftest_my_fun(init_schema,pg_connect):conn=pg_connect(pathlib.Path('path/to/my_table.csv'))# loads data into my_tablewithconn.cursor()ascursor:cursor.execute('SELECT * FROM my_table;')

    现在,每个测试都可以使用特定于测试的数据访问已初始化的数据库。

为什么是“拿铁”?

名称是对Dr. Emmett Lathorp "Doc" Brown的引用, 从回到未来的德洛林时间机器的疯狂科学家和发明家。

Lathorp库也允许您在每次测试后及时返回到一个新的数据库。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
通过GWT JSNI传递Java对象时发生javascript错误   java Spring启动项目wildfly服务器失败   java如何进行会话来存储Id?   javajpa/hibernate如何通过带注释的外键映射元素集合   Java将字节[]转换为双[],反之亦然   eclipse显示Java双值   java如何正确读取socket数据包   是否存在用于集合处理的Java库?   javacom。太阳jna。无法将指针强制转换为com。太阳jna。站台win32。温迪夫。LPARAM   java Eclipse插件开发。我可以在插件中使用已经存在的jar文件吗?   分析Java错误:找不到符号变量   java如何使按钮摆动以进行大的处理   如何通过传递bucket name和file name从java中的minio服务器下载多个文件   JavaScrollPane JavaFX使其滚动更多?   java无法加载C:\Users\username\AppData\Local\Android\Sdk\buildtools\28.0.3\lib\dx。罐子   JavaSwing中是否有一个“组框”等价物?   java使用slf4j和log4j与单独使用log4j相比,是否存在性能开销?   java模式和匹配:格式化文本文件   JTable行增长的java问题