Python在数据库测试中的应用探索

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 *

时间: 2024-08-04 11:02:40

Python在数据库测试中的应用探索的相关文章

单元测试:在您的数据库项目中应用测试驱动的开发

本文讨论: TDD 的优点 在数据库开发中应用单元测试 组合 T-SQL 与 .NET 兼容的语言 连接.测试条件和事务 本文使用了以下技术: Visual Studio 2008, SQL Server LMicrosoft 于 2006 年 11 月发布了 Visual Studio Team System Database Edition,也称为 DBPro 或 Data Dude,它向产品生命周期方法中引入了数据库开发.DBPro 还引进了数据库单元测试设计 器,使用它可以轻松地生成或编

请问:用glassfish,jsp运行mysql数据库,测试中显示错误如图,怎么解决

问题描述 请问:用glassfish,jsp运行mysql数据库,测试中显示错误如图,怎么解决 解决方案 这个是找不到你的数据库驱动 你看你的jar包是否导入 ,连接字符串是否正确 解决方案二: 你加了mysql的jar包了吗

软件开发中的数据库测试技术

摘要:根据以往软件测试经验,对数据库测试的内容和方法,进行了详细的分析,阐明了数据库测试在软件开发中的重要性. 关键词:数据库测试:性能测试:DataFactory 1.引言 数据库系统的开发在应用软件开发中所占的比重越来越大,随之而来的问题也越来越突出.比如:数据冗余,功能和性能方面存在的问题已经严重影响应用软件的使用.软件测试人员往往重视对软件功能和编码的测试,而忽略对软件性能,特别是数据库访问并发测试.因为,他们固有的思想中认为数据库设计存在问题对系统性能影响不大,或从根本上忽略了数据库在

如何在Python的Flask框架中使用模版的入门教程

  如何在Python的Flask框架中使用模版的入门教程?          概述 如果你已经阅读过上一个章节,那么你应该已经完成了充分的准备工作并且创建了一个很简单的具有如下文件结构的Web应用: microblog |-flask文件夹 |-<一些虚拟环境的文件> |-app文件夹 | |-static文件夹 | |-templates文件夹 | |-__init__.py文件 | |-views.py文件 |-tmp文件夹 |-run.py文件 以上给你介绍了在Python的Flask

Python的Flask框架中实现分页功能的教程

  这篇文章主要介绍了Python的Flask框架中实现分页功能的教程,文中的示例基于一个博客来实现,需要的朋友可以参考下 Blog Posts的提交 让我们从简单的开始.首页上必须有一张用户提交新的post的表单. 首先我们定义一个单域表单对象(fileapp/forms.py): ? 1 2 class PostForm(Form): post = TextField('post', validators = [Required()]) 下面,我们把这个表单添加到template中(file

在Python的Flask框架中实现单元测试的教程

  在Python的Flask框架中实现单元测试的教程,属于自动化部署的方面,可以给debug工作带来诸多便利,需要的朋友可以参考下 概要 在前面的章节里我们专注于在我们的小应用程序上一步步的添加功能上.到现在为止我们有了一个带有数据库的应用程序,可以注册用户,记录用户登陆退出日志以及查看修改配置文件. 在本节中,我们不为应用程序添加任何新功能,相反,我们要寻找一种方法来增加我们已写代码的稳定性,我们还将创建一个测试框架来帮助我们防止将来程序中出现的失败和回滚. 让我们来找bug 在上一章的结尾

Java数据库程序中的存储过程设计

程序|存储过程|设计|数据|数据库 本文阐述了怎么使用DBMS存储过程.阐述了使用存储过程的基本的和高级特性,比如返回ResultSet.本文假设你对DBMS和JDBC已经非常熟悉,也假设你能够毫无障碍地阅读其它语言写成的代码(即不是Java的语言),但是,并不要求你有任何存储过程的编程经历. 存储过程是指保存在数据库并在数据库端执行的程序.你可以使用特殊的语法在Java类中调用存储过程.在调用时,存储过程的名称及指定的参数通过JDBC连接发送给DBMS,执行存储过程并通过连接(如果有)返回结果

在Python的Flask框架中实现单元测试的教程_python

 概要 在前面的章节里我们专注于在我们的小应用程序上一步步的添加功能上.到现在为止我们有了一个带有数据库的应用程序,可以注册用户,记录用户登陆退出日志以及查看修改配置文件. 在本节中,我们不为应用程序添加任何新功能,相反,我们要寻找一种方法来增加我们已写代码的稳定性,我们还将创建一个测试框架来帮助我们防止将来程序中出现的失败和回滚. 让我们来找bug 在上一章的结尾谈到,我故意在应用程序中引入一个bug.接下来让我描述一下它是什么样的bug,然后看看当我们的程序不按照我们意愿执行的时候,它在其中

Python实现数据库一键导出为Excel表格

依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python环境的支持 Python2.7.11 我的Python环境是2.7.11.虽然你用的可能是3.5版本,但是思想是一致的.