跳转到主要内容

Robot Framework 数据库库

项目描述

Robot Framework 数据库库

Robot Framework 的数据库库允许您查询数据库并验证结果。它需要安装适当的 Python 模块 - 根据您的数据库,例如 oracledbpymysql

该库包含一些关键字,用于对您的数据库执行不同的检查。您可以在关键字文档中找到这些。

观看关于数据库库更新的Robocon 2024演讲。

Talk at Robocon 2024 about the Database Library update

要求

  • Python
  • Robot Framework
  • 你将要使用的Python数据库模块 - 例如 oracledb

安装

pip install robotframework-databaselibrary

基本用法示例

*** Settings ***
Library       DatabaseLibrary
Test Setup    Connect To My Oracle DB

*** Keywords ***
Connect To My Oracle DB
    Connect To Database
    ...    oracledb
    ...    db_name=db
    ...    db_user=my_user
    ...    db_password=my_pass
    ...    db_host=127.0.0.1
    ...    db_port=1521

*** Test Cases ***
Get All Names
    ${Rows}=    Query    select FIRST_NAME, LAST_NAME from person
    Should Be Equal    ${Rows}[0][0]    Franz Allan
    Should Be Equal    ${Rows}[0][1]    See
    Should Be Equal    ${Rows}[1][0]    Jerry
    Should Be Equal    ${Rows}[1][1]    Schneider

Person Table Contains Expected Records
    ${sql}=    Catenate    select LAST_NAME from person
    Check Query Result    ${sql}    contains    See
    Check Query Result    ${sql}    equals      Schneider    row=1

Wait Until Table Gets New Record
    ${sql}=    Catenate    select LAST_NAME from person
    Check Row Count    ${sql}    >    2    retry_timeout=5s

Person Table Contains No Joe
    ${sql}=    Catenate    SELECT id FROM person
    ...                    WHERE FIRST_NAME= 'Joe'
    Check Row Count    ${sql}   ==    0

tests 文件夹中查看更多示例。

处理多个数据库连接

该库可以使用 别名 来处理对多个数据库的多个连接。别名在创建连接时设置,并可以传递给库关键词的相应参数。

示例

*** Settings ***
Library          DatabaseLibrary
Test Setup       Connect To All Databases
Test Teardown    Disconnect From All Databases

*** Keywords ***
Connect To All Databases
    Connect To Database
    ...    psycopg2
    ...    db_name=db
    ...    db_user=db_user
    ...    db_password=pass
    ...    db_host=127.0.0.1
    ...    db_port=5432
    ...    alias=postgres
    Connect To Database
    ...    pymysql
    ...    db_name=db
    ...    db_user=db_user
    ...    db_password=pass
    ...    db_host=127.0.0.1
    ...    db_port=3306
    ...    alias=mysql

*** Test Cases ***
Using Aliases
    ${names}=    Query    select LAST_NAME from person    alias=postgres
    Execute Sql String    drop table XYZ                  alias=mysql

Switching Default Alias
    Switch Database    postgres
    ${names}=    Query    select LAST_NAME from person
    Switch Database    mysql
    Execute Sql String    drop table XYZ

使用配置文件

Connect To Database 关键字允许以两种方式提供连接参数:

  • 作为关键词参数
  • 在配置文件中 - 简单的 key=value 对列表,设置在 别名 部分。

你可以只用一种方式,也可以将它们结合起来使用

  • 默认情况下,使用关键词参数
  • 如果没有提供关键词参数,则在配置文件中搜索参数值

除了常用的连接参数外,还可以包含任何其他DB模块特定参数作为键/值对。如果相同自定义参数同时作为关键词参数和在配置文件中提供,则 关键词参数值 优先。

默认情况下,配置文件的路径设置为 ./resources/db.cfg。你可以使用 Connect To Database 关键字中的相应参数来更改它。

必须 在配置文件中包含至少一个部分名称 - 如果使用了连接别名(见 处理多个数据库连接),则是连接别名,如果没有使用别名,则是 [default]

配置文件示例

具有默认别名的配置文件(等同于不使用别名)

[default]
db_module=psycopg2
db_name=yourdbname
db_user=yourusername
db_password=yourpassword
db_host=yourhost
db_port=yourport

具有特定别名的配置文件

[myoracle]
db_module=oracledb
db_name=yourdbname
db_user=yourusername
db_password=yourpassword
db_host=yourhost
db_port=yourport

仅包含一些参数的配置文件

[default]
db_password=mysecret

包含一些自定义DB模块特定参数的配置文件

[default]
my_custom_param=value

内联断言

接受 assertion_operatorexpected_value 参数的关键词执行根据指定条件进行的检查 - 使用 断言引擎

示例

Check Row Count     SELECT id FROM person          ==        2
Check Query Result  SELECT first_name FROM person  contains  Allan

重试机制

接受 retry_timeoutretry_pause 参数的断言关键词支持等待断言通过。

设置 retry_timeout 参数启用机制 - 在这种情况下,SQL请求和断言在一个循环中执行,直到断言通过或达到 retry_timeout。循环迭代之间的暂停使用 retry_pause 参数设置。

参数值使用 Robot Framework 时间格式 设置 - 例如 5 seconds

默认情况下,重试机制是禁用的 - retry_timeout 设置为 0

示例

${sql}=   Catenate    SELECT first_name FROM person
Check Row Count     ${sql}  ==        2      retry_timeout=10 seconds
Check Query Result  ${sql}  contains  Allan  retry_timeout=5s  retry_pause=1s

记录查询结果

检索SQL查询结果的关键词在RF日志中以表格形式打印结果行。

  • 应用 50行 的日志头限制,其他表格行在日志消息中被截断。
  • 你可以在测试中使用关键词 Set Logging Query Results 任何时间调整限制和日志记录。

你还可以在导入库期间设置限制或禁用日志记录。

示例

*** Settings ***
# Default behavior - logging of query results is enabled, log head is 50 rows.
Library    DatabaseLibrary

# Logging of query results is disabled, log head is 50 rows (default).
Library    DatabaseLibrary    log_query_results=False

# Logging of query results is enabled (default), log head is 10 rows.
Library    DatabaseLibrary    log_query_results_head=10

# Logging of query results is enabled (default), log head limit is disabled (log all rows).
Library    DatabaseLibrary    log_query_results_head=0

提交行为

在创建数据库连接时,库不明确设置 autocommit 行为 - 因此使用Python DB模块的默认值。根据Python DB API规范,它应该默认禁用 - 这意味着如果需要,每个SQL事务都必须包含一个专门的提交语句。

库为您管理它

  • 执行 SQL 字符串 这样的关键字在运行查询后会自动进行提交 - 或者错误发生时回滚
  • 查询 这样的关键字不会进行提交,但在错误发生时也会回滚

您可以使用 no_transaction 参数关闭这种自动提交/回滚行为。请参阅特定关键字的文档。

您还可以在 Python DB 模块级别显式设置 autocommit 行为 - 使用 设置自动提交 关键字。这不会影响库关键字中自动提交/回滚行为(如上所述)。

数据库模块兼容性

该库基本上与任何 Python 数据库 API 规范 2.0 模块兼容。

然而,现有 Python 模块的实际实现有时相当不同,这需要在库中自定义处理。因此,有些模块在库中“原生”支持,而有些可能工作也可能不工作。

Python 模块目前“原生动态”支持

Oracle

  • oracledb
    • 支持胖客户端和瘦客户端模式 - 您可以使用 oracle_driver_mode 参数选择其中之一。
    • 然而,由于当前 oracledb 模块的限制,在测试执行会话期间无法在胖客户端和瘦客户端模式之间切换 - 即使在不同的套件中。
  • cx_Oracle

MySQL

PostgreSQL

MS SQL Server

SQLite

Teradata

IBM DB2

ODBC

Kingbase

  • ksycopg2

进一步参考(部分过时)

项目详情


下载文件

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

源分布

robotframework_databaselibrary-2.0.2.tar.gz (27.0 kB 查看散列)

上传时间

构建分布

robotframework_databaselibrary-2.0.2-py3-none-any.whl (28.7 kB 查看散列)

上传时间 Python 3

支持者