Robot Framework - 连接Oracel数据库

来源:互联网 发布:mac 卸载搜狗输入法 编辑:程序博客网 时间:2024/06/05 01:50

Robot Framework - 连接Oracel数据库

需要说明的是Connect To Database Using Costom Params的参数:由于我使用了cx_Oracle这个库,所以第一个参数指定它;第二个参数是连接串用户名,密码,和要连接的Oracle数据库的本地服务命名(与你oracle目录\network\admin\tnsnames.ora文件中的描述相对应)cx_Oracle依赖Oracle客户端环境,这点需要注意。综上所述,所以必须先安装Oracle的客户端。以Oracle 11.2为实例,操作步骤如下:

一、使用instantclient_11_2PL/SQL Developer工具包连接oracle 11g远程数据库 

1、先到Oracle网站下载Instant Client :

http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html

注意:根据你的操作系统选择不同的Instant Client版本,需要保持spotlight-on-oracleOracle Instant clientPL.SQL都是32位或者64位,如不按照该要求,将会出错。

下载回是一个压缩文件,解压之后的文件夹叫:D:/instantclient_11_2.放在你喜欢的目录即可.例如:D:/instantclient_11_2

2、在D:/instantclient_11_2目录下新建目录network,在network目录下再新建admin目录,在admin目录下新建文件tnsnames.ora,使用文本编辑器打开写入如下内容:

MWDB=
(DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT =1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = MWDB)
    )
)

第一个黄色字块:表示定义远程服务器的在本地主机名

第二个黄色字块:远程数据库实例名

3、添加一个环境变量,名为TNS_ADMIN,值为tnsnames.ora文件所在路径。比如我的本机为:D:/instantclient_11_2/network/admin

4、设置ORACLE的语言,添加环境变量NLS_LANG ,值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK

如果不清楚远程数据库的ORACLE语言,可以ssh或者telnet到远程机器,在命令界面输入,用命令行连接到数据库。

select * fromnls_instance_parameters;

查看NLS_LANGUAGE 的值

NLS_LANGUAGE

NLS_TERRITORY

二、下载并安装PL.SQL.Developer配置应用
配置tools->preferences->connection

Oracle Home
D:/instantclient_11_2

OCI library

D:/instantclient_11_2/oci.dll

中文的PL/SQLDeveloper就是

工具-->首选项-->连接

Oracle主目录

D:/instantclient_11_2

OCI库

D:/instantclient_11_2/oci.dll

6、关闭PL/SQL Developer,重起Developer.

主机名就会出现在PL/SQLDeveloper的列表里,输入用户名密码,就可以登录远程oracle 11g数据库了。

补充Instant Client说明

Oracle Instantclient 是oracle提供的简便客户端, 支持多种平台. 可从oracle网站下载, 下载地址为
http://www.oracle.com/technology/global/cn/software/tech/oci/instantclient/index.html

包括如下内容:

Instant clientPackage - Basic 运行OCI, OCCI, 和JDBC-OCI应用程序需要的所有文件.

Instant clientPackage - Basic Lite: 只包含英语错误信息, 只支持unicode, ascii, 西欧字符集.

Instant clientPackage - JDBC Supplement  为jdbc增加了xa, 国际化和RowSet操作.

Instant ClientPackage - SQL *Plus 包含sqlplus和需要的库文件

Instant clientPackage - SDK 使用Instant Client开发Oracle 应用程序需要的头文件及示例makefile

Instant clientpackage - ODBC 使用odbc时需要的库, 不是所有平台都有. linux平台包含.

Basic和BasicLite两个中必须选一个, 其他包都是可选的. 我下载了 Basic, JDBC supplement, SQL *Plus, SDK, ODBC. 解压后放在一个文件夹下, 在这个文件夹下建立文件tnsnames.ora, 设置环境变量LD_LIBRARY_PATH和TNS_ADMIN指向解压后的目录, 就可以使用sqlplus了.

我下载的instantclient版本为10.2.0.2.0, 测试了联接到oracle9.2.0.4和oracle 10.2.0.1.

Instant Client中不包含tnsping, exp/imp, rman, netca等工具. 如果需要这些工具则需要安装oracle client

7、参考文档:

http://blog.csdn.net/leather0906/article/details/6456095

二、安装Database Library

1、打开Robot Framework官网,找到Database Library,官网提供了Java 和Python两个版本的DatabaseLibrary,这里我使用的是Python版,地址为

http://franz-see.github.io/Robotframework-Database-Library/

解压使用命令:python setup.py install执行安装。

2、安装cx_Oracle

通过:https://wiki.python.org/moin/Oracle进入下载cx_Oracle

选择第二个 cx_oracle 的主页,进入下载列表

  选择合适的版本下载并安装。我选择的是Windowsx86 Installer (Oracle 10g, Python 2.6)

  安装好了以后你的python\Lib\site-packages下多了一个cx_Oracle.pyd文件,这个目录下同时也多了个文件夹

  cx_Oracle-5.1-py2.6.egg-info,cx_oralce的使用文档就在里边。

这 里的逻辑是这个样子的,Database Library实际上是一个处在Robot Framework和Database Interfaces 中间的代理模块,Robot Framework 通过Database Library 所提供的接口,间接的调用Database Interfaces,从而实现操作数据库的目的。


打开Database Interfaces页面,找到Oracle的API驱动及下载地址,找到你对目前python环境对应版本的安装文件,下载安装

3、安装完成检查:

安装完成后,在你的 Python27Libsite-packages目录下,可以看到Database Library文件夹和cx_Oracle.pyd文件


FAQ:

如果执行以上操作后,运行报ImportError: DLL load failed: The specified module could not befound.

还可以执行如下操作:

将如果三个文件,导入到Python27Libsite-packages目录下


 

三、编写测试脚本

1、检查Database Library的关键字已经在RF中:

运行RIDE,按F5查看Database Library的关键字。


我们编写一个数据库查询的测试用例,脚本如下:

[url=][/url]
Connect To Database Using Custom Params    cx_Oracle   
'bpm','bpm','orcl'@{data}    query    select * from sys_userlogmany    @{data}log    ${data[0][1]}${count}   Get length    ${data}log    ${count}Disconnect FromDatabase[url=][/url]

运行脚本,结果如下


运行后查看Log,表中的中文全部变成了乱码。cx_Oracle的默认编码不是Utf-8,需要人工转换一下。DataBaseLibrary自身没有提供转换函数,为了解决这个问题,我们需要对DataBaseLibrary进行扩展。

2、解决Database Library中文乱码问题

打开安装目录下的 query.py文件,添加一个decode函数,用于对字符串进行解码

def decode(self,customstr,mode):       return customstr.decode(mode)

更改测试脚本,增加转码过程



再次运行,得到系统输出,测试通过

3、参考链接:

http://www.bdqn.cn/news/201508/17426.shtml

http://www.ltesting.net/ceshi/ceshijishu/zdcs/robotframework/2012/0327/204514.html

 

四、oracle数据库的写法

1、oracle数据库写法1

把连接串写到tnsnames.ora里面。

2、oracle写法2,把连接串写在第三个位置:


即tnsnames里面的=后面的部分


0 0
原创粉丝点击