Python(派森)语言是一种面向对象的用途非常广泛的编程语言,具有非常清晰的语法特点,适用于多种操作系统,可以在Windows和Unix这样的系统中运行。目前在国际上非常流行,正在得到越来越多的应用。Python可以完成许多任务,功能非常强大。
对于我们的测试工作而言,Python最吸引我们的特性有如下几个方面:
1 具备语言粘合剂的能力
2 解释执行的机制
3 语法简单易学
4 相对较高的性能
语言粘合剂是比较形象的说法,具体的说,Python支持通过引入自带的cytpes库,达到在python脚本中执行已有的动态库中的代码的目标。因此,DM对外提供的基于c/c++的接口都可以通过这个方法得到访问,如果使用Python作为接口测试的载体,得到的测试用将比使用编译型语言的测试程序更易于修改调试。
以上是针对c/c++接口而言,对于.net平台和JAVA平台,我们可以分别使用Python for .Net 和 Jython。前者使得Python脚本可以直接调用CLR代码,而后者使得Python可以直接调用任何的JAVA类库。
相信至此,使用Python作为跨越语言的测试工具的优越性,已经十分明显了:
对于功能与性能测试,我们只需要自己编写一个解释器调用脚本,就可以只需要维护一套测试脚本,而同时可以在任何驱动接口上进行测试,构思大体如下图所示:
在上面这个图中,测试工程师只需要关新最上层的Testcasen.py就可以,他们所写的用例可以是纯粹的测试逻辑而不需关心不同接口的实现方法,例如一个简单的测例脚本可以是下面这样的:
Testcase1.py:
from dbop import * #这里的dbop就是odbc版本的连接与支持类
from dmServer import * #dmServer类用于对被测试的服务器进行启动、停止、配置等操作
from ctypes import *
rc = -10;
dmserver1 = dmServer('d:\\dmdbms\\bin\\dmserver.exe','win','12345','service',0);
dmserver1.runserver();
tb1 = dbop();
rc = tb1.connect('127.0.0.1','SYSDBA','SYSDBA','12345','SYSTEM');
rc = tb1.exec_sql_ignore("drop table aa;");#执行drop语句而不关心是否执行成功
rc = tb1.exec_sql("create table aa(c int);");#执行create语句且预期成功
rc = tb1.exec_sql_failed("create table aa(c int);");#再次执行该语句,预期失败
k=((1,1),(1,1));
#执行select且预期结果集与上面定义的k相同
rc = tb1.exec_sql_with_result("select top 2 name,id from systables;",k);
rc = tb1.disconnect();
dmserver1.stopserver();
可以看到,如上所示,编写用例的人员完全不需关心connect,exec_sql_ignore,tb1.exec_sql_failed此类的操作细节如何实现,他们只要使用并给出测试的逻辑就可以了。而测试开发人员则要实现例如上面这几个接口的odbc版本、jdbc版本、和ado.net版本。
位于测例与支持库之间的是一个Testloader程序,这个程序完成这几件事情:
1、读取根据要执行的测试的配置文件,确定解释器的位置和将要使用哪种驱动;
2、读取测试用例的内容,并将对支持类的引用改为对应驱动,比如上面的脚本中的:
from dbop import * 可能会被改为:from dbop_jdbc import *