如何在没有安装任何客户端的情况下从 Robot Framework 连接 Oracle 数据库

How to connect Oracle database from Robot Framework without any client installed

大多数解决方案都需要安装一些客户端或 cx_Oracle 使用的模块也不适用 - 因为我必须使用机器人框架的 Jython 版本

为了找到一个非常简单的解决方案,我研究了很多帖子:

  1. 通过

    安装DatabaseLibrary模块
    pip install robotframework-databaselibrary
    
  2. 通过

    安装JayDeBeApi模块
    pip install JayDeBeApi
    
    • 现在您可以将这些库放在任何您喜欢的地方 - 只需从 Python\Lib\site-packages
    • 复制它们
  3. 这就是诀窍! DatabaseLibrary 用法有以下 jaydebeapi 连接示例:

    Connect To Database Using Custom Params | JayDeBeApi | 'oracle.jdbc.driver.OracleDriver', 'my_db_test', 'system', 's3cr3t'
    

然而这是错误的!您必须在 username-pass 对上使用方括号!像这样:

Connect To Database Using Custom Params | JayDeBeApi | 'oracle.jdbc.driver.OracleDriver', 'my_db_test', ['system', 's3cr3t']

并且请不要忘记使用 URL 连接而不是 my_db_test!应该是这样的:

jdbc:oracle:thin:@//127.0.0.1:1521/my_db_test

希望对大家有所帮助!祝你好运!

  1. 如果您使用带有 Java 的机器人框架,那么机器人官方网站上有单独的库:http://robotframework.org/#libraries 名称为 数据库(Java)

  2. 下载此库并将其放入lib文件夹

  3. 下载oracle需要的驱动,放入lib文件夹

在您的文件中定义以下变量

${ORACLE DATABASE URL}           jdbc:oracle:thin:@${DATABASE_IP}:1521:${ORACLE_SYSTEM_ID}
${ORACLE DATABASE USER}         ${DATABASE_NAME}
${ORACLE DATABASE PASSWORD}     PASSWORD
${ORACLE DATABASE DRIVER}       oracle.jdbc.driver.OracleDriver

使用下面的关键字连接到数据库

Connect To Database      ${ORACLE DATABASE DRIVER}      ${ORACLE DATABASE URL}  ${ORACLE DATABASE USER}   ${ORACLE DATABASE PASSWORD}

我安装了 Library DatabaseLibrary 和 jaydebeapi,但在代码中它无法识别 JaydeBeApi,因此无法正常工作。

这就是我解决问题的方法。

我必须从 http://aka.ms/vcpython27 安装 Microsoft Visual C++ 9.0 然后我按照这个步骤

  1. 打开命令window(开始 -> cmd)
  2. git 克隆 https://github.com/oracle/python-cx_oracle.git cx_Oracle
  3. cd cx_Oracle
  4. git 子模块初始化
  5. git 子模块更新
  6. pip 安装cx_Oracle
  7. pip 安装机器人框架-数据库库
  8. pip install JayDeBeApi(可能对某些人有用)
 *** Settings ***
Documentation  Basic database related keywords
Library  DatabaseLibrary

*** Variables ***
${DB_CONNECT_STRING} =  'user/mypasswd@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myipaddress)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=mysid)))'

*** Test Cases ***
Connecting
  connect

  @{queryResults}  Query  select * from table t where id_table =1001

  log to console  @{queryResults}

*** Keywords ***
Connect
    connect to database using custom params  cx_Oracle  ${DB_CONNECT_STRING}

Disconnect
    disconnect from database