RobotFramework(简称RF)通常用于自动化测试,有时也会用于完成一些自动化脚本的工作。本文对RF的使用场景简单描述如下:连接两个数据库,一个是oracle数据库,一个是达梦数据库,分别在两个库上执行SQL语句,然后将执行结果数据取出来存到文件中,之后对两个数据文件做后续处理。脚本的第一步就是如何使用RF连接数据库,网上搜索了很多资料,尤其oracle有多种连接方法(例如cx_Oracle 插件、JayDeBeApi),经过各种测试实验,最终使用了一种通用的连接方法。下面是对使用方法和遇到问题的总结。
一.安装类库
RF操作数据库需要安装两个类库:
·robotframework-databaselibrary,用于数据库的连接、查询、删除等操作
· JayDeBeApi,用于数据库的jdbc连接
通过以下命令安装即可:
pip install robotframework-databaselibrary
pip install JayDeBeApi
二、连接数据库语法
分别针对oracle和达梦数据库,设置jdbc_driver、url、驱动路径等信息,用户名、密码、数据库名、ip等改成实际值即可。由于是通过jdbc连接数据库,只要更换不同数据库的连接url、driver名称、驱动jar路径,即可连接各类数据库了。
关键脚本:
连接oracle
DatabaseLibrary.Connect To Database Using Custom Params jaydebeapi ${ORACLE_JDBC_DRIVER},${JDBC_URL_ORACLE},jars=${oraclejars}
连接dm库
DatabaseLibrary.Connect To Database Using Custom Params jaydebeapi ${DM_JDBC_DRIVER},${JDBC_URL_DM},jars=${dmjars}
三、存在问题
按照上面的配置,看着非常规整的一段代码,然而在运行时却出现了莫名奇妙的问题:连接oracle库正常后,如果再连接达梦库,就会报无法找到驱动的错误(An error occurred
while calling z:java.sql.DriverManager.getConnection.
:Java.sql.SQLException: No suitable driver found for jdbc…),反之亦然。只有先连接的库正常,后连接的库就找不到驱动。
经过一番网络搜索,也没有找到合适的解决方案(有一遍文章也遇到了同样的问题,但他的解决方案是要改python库的源码,感觉还是麻烦。文章链接也发出来供大家参考:https://blog.51cto.com/u_11529070/9215156),后来根据自己的猜想和假设,既然问题出现在找不到驱动上,会不会是驱动路径的写法上有问题,能不能把达梦和和oracle的驱动jar写在一起呢(通常classpath路径,命令path路径上都是写多个路径的,中间用分号隔开),于是按照下面的方式调整了脚本:
将oracle和达梦的驱动jar路径合并,写在一个变量中,用分号隔开,连接数据库的语句中引用这个合并后的jars变量,这样无论是先连哪个数据库,驱动路径中的达梦和oracle的驱动都会被加载,应该就不会报找不到驱动的错误了。看起来有点道理,抱着试试看的想法测试了一下,竟然不报错了,两个数据库可以同时连接了,至此问题得到圆满解决。
可以到我的个人号:atstudy-js,这里有10W+ 热情踊跃的测试小伙伴们,一起交流行业热点、测试技术各种干货,一起共享面试经验、跳槽求职各种好用的。
AI测试、 车载测试、自动化测试、银行、金融、游戏、AIGC.
四、小结
本文针对RF连接数据库的通用方法做了总结,解决了同时连接两个数据库时遇到的问题,解决方法全凭假设和试验。作为一名测试人员,假设-验证-再假设-再验证的方法不仅可以用于日常测试用例编写和功能测试中,在其他一些问题上也可以使用起来,发挥出测试人员自身的优势。