0
回答
引入 SQLite 数据库在 Rational Functional Tester 中轻松读取测试数据
科大讯飞通用文字识别100000次/天免费使用。立即申请   

目前,越来越多的人选择使用 Rational Functional Tester(RFT) 来实现产品的自动化测试。通常情况下,测试数据会存放在数据池中,或者以文本形式存放在外部的文件里(比如资源文件或 XML 文件)。但是,对于某些测试数据,由于应用场景不同,数据的内容和结构较为复杂,如果使用数据池和文本文件的方式存储,读取和查询都会有一定的难度,很难 满足实际的需要。因此,如果我们使用关系型数据库来管理这些数据,查询和读取起来就简单多了,我们完全可以通过标准的 SQL 来完成对任意数据的选取。

SQLite 是一款轻量级的关系型数据库,它不仅小巧灵活,而且资源占用少,处理速度快,在各方面都表现得非常优秀。在这篇文章中,我们将为大家介绍这款数据库软件在 RFT 中的实际应用;阐述在 RFT 中使用 SQLite 来管理测试数据的方法;并举例说明如何在测试脚本中读取和使用这些数据;同时,我们也对 SQLite 和其他关系型数据库的应用场景进行比较,使读者能根据自己的需要选择最合适的数据库软件,从而提高自动化测试过程中对测试数据读取的方便性和灵活度。

一、常见的 RFT 中读取测试数据的几种方式

RFT 是一款功能强大的自动化测试框架,无论是在功能测试、系统测试,还是全球化测试及其回归测试中,都被广泛使用。而我们在使用 RFT 进行测试的过程中 , 通常会大量的使用到不同类型的测试数据来验证产品的质量和可靠性。这样一来,组织和选取测试数据对我们的测试来说显得至关重要。

常见的读取测试数据的方法有以下几种:

1. 直接引入到测试脚本中。

对于一些相对简单,对测试数据要求不高的测试用例,我们有时会直接在代码中指定了测试的数据。

2. 使用数据池选取测试数据。

对于一些可以进行列举的数据,我们则可以通过使用 RFT 自带的数据池,来指定不同的测试数据和读取规则。

4. 使用外部文件读取测试数据。

有些测试人员为了提高测试的灵活性和可维护性,从外部文件(如 properties 文件,xml 文件)中读取测试数据。

5. 从数据库中读取测试数据。

这时大家会问:为什么选择数据库存储 ? 使用数据库存储数据有哪些优势呢?我们的回答是:对于一些简单的测试来说,使用数据池的方式就足够了,但是对另外一些测试,比如全球化测试来说,对测试数 据的要求相对比较高,测试数据的种类也非常丰富,对不同的测试点,要求使用不同的测试数据进行测试。这就要求在选取测试数据的时候,能够按照一定的条件来 查找获得。另外,使用不同的表结构来存放不同的种类的数据,以及数据的分类信息,将会大大方便对数据的选取,毫无疑问,借助于简单的 SQL 语句,通过条件的设置和表之间的关联查询,就可以更加轻松的获得想要的测试数据了。

二、SQLite 嵌入式数据库概述

我们之所以引入 SQLite,因为它是一种小型的嵌入式数据库,它小巧灵活,资源占用少,处理速度快,非常适合中小型应用的数据存储。由于其各方面的出色表现,得到越来越多的开发人员的青睐。下面我们就来简要说说 SQLite 嵌入式数据库的特点:

  • SQLite 能被嵌入到应用程序进程中,有效地消除了与客户机\服务器配置相关的开销。
  • SQLite 是开放的源代码。
  • SQLite 堪称小巧,是由大致 3 万行 C 代码组成。
  • SQLite 无需安装和配置,直接拿来使用。
  • 用 SQLite 进行数据存储,数据保存方式简单,整个数据库是一个独立的磁盘文件。
  • SQLite 性能好,资源占用少,处理数度快。
  • SQLite 可以支持 ACID 事务。
  • SQLite 支持的数据库大小为 2TB。
  • SQLite 的底层 API 简单,支持多种开发语言,如:C, PHP, Perl, Java, ASP .NET, Python。
  • SQLite 支持几乎所有主流操作系统。

综合上述特点,SQLite 嵌入式数据库已经被越来越多地应用到各样的个性化应用开发和应用软件数据管理领域。

三、SQLite 的应用与其他数据库的比较

我们听说过很多数据库产品:著名的有 DB2、Oracle、SQL Server 等等,这些都是大型的企业级关系型数据库。而与大型数据库相比,一些规模小、功能相对有限的适合中小型企业的数据库软件受到了越来越多的欢迎。很大程度 上,因为它们价格便宜,甚至免费,提供的功能却对中小型应用而言绰绰有余,还会可以大大降低成本。比如像 Firebird、SQLite、PostgreSQL、MySQL 等等就属于这类的数据库软件。当然每款数据库都有它们各自的优势和不同的适用场合。下面,我们就来对人们使用最多的中小型应用的 SQLite 和 MySQL 做一比较,以帮助读者理解它们各自的优势和特点,从而选择适合读者使用的数据库软件。

SQLite 与 MySQL 的比较

我们首先来看一下它们的相同之处:

  • SQLite 和 MySQL 都是开源软件。
  • 适合中小型企业应用。
  • 支持绝大多数的标准 SQL 语句。
  • 为多种编程语言提供丰富的 API。

在它们的共同点之上,它们的不同之处才是我们更加关注的:

  • 二者虽然都是开源的,但 SQLite 是完全免费的,没有任何使用上的限制;而 MySQL 是采用双重授权,不是完全免费的。
  • SQLite 更小巧,是一个小型的、嵌入式数据库,更适合用于嵌入式产品。
  • MySQL 是一套客户端 / 服务器 (C/S) 结构的数据库管理系统,安装配置相对复杂;而 SQLite 是文件型嵌入式数据库,不需要安装和配置。
  • 由于 SQLite 整个数据库存储在一个单个的文件中,所以数据导入、导出、备份、恢复都是复制文件,不需要额外的维护。
  • SQLite 无需单独购买数据库服务,无服务器进程,配置成本为零。
  • SQLite 读速度快,在数据量不是很大的情况下速度较快。但是 SQLite 写入速度慢,默认配置下的 SQLite 的写入速度比 MySQL 慢很多。
  • SQLite 更适合运用在产品测试和原型设计环节或是嵌入式应用程序的开发,而 MySQL 则更多的运用在生产环境。
  • MySQL 提供用户和权限管理,而 SQLite 则不提供。

总的来说,读者可以根据上面的对比描述,来选择满足自己需要的数据库。

四、如何在 RFT 中引入 SQLite

对于 SQLite 嵌入式数据库的引用,因为省去了安装和配置的繁琐,我们可以毫不犹豫的直接使用它了。

数据的准备工作

实现数据准备工作之前,我们需要选定一个图形用户界面的工具来管理和使用 SQLite。SQLite Manager 就是一个不错的选择。SQLite Manager 是一个 Firefox 的插件,可以在 Firefox 的插件库搜索得到。SQLite Manager 提供了丰富的界面和功能来完成数据库的操作,可以方便地操作数据库、表、索引、视图、触发器等,还提供对各种格式数据的导入、导出,以及对标准 SQL 的支持。

有了这个 SQLite Manager 工具,我们就可以开始建立测试数据的数据库了。

在 SQLite Manager 中,可以采用很多方式来创建和维护数据库以及表、视图、索引和触发器。除了直接使用 SQL 命令操作外,SQLite Manager 还提供了数据的导入导出功能。不同的数据文件,比如 txt/csv/xml 等的数据,都可以直接导入到 SQLite 中的一个表中。下面的两张图就是告诉你如何使用 Wizard 来导入数据文件,生成 SQLite 数据库中的表的。


图 1. 文本格式的数据导入
图 1:文本格式的数据导入

图 2. 根据导入的数据创建表
图 2:根据导入的数据创建表

除此之外,SQLite Manager 还可以根据已经存在的表生成 SQL 语句作为输出,直接保存为 .sql 文件,以便备份和维护。

配置 RFT 开发环境

数据准备好之后,我们就用以下两个步骤轻松配置 RFT 的开发环境。

第一步,从 SQLite 官方网站下载 SQLitejdbc 的 jar 包;第二步,在你的测试工程中引用这个 jar 包,也就是把它加到你的测试工程的 buildpath 里面。如下图所示。这样,你就可以在你的代码中使用 jar 包里面的类和方法了。


图 3. 为工程设置 Build Path
图 3:为工程设置 Build Path

在脚本中使用 SQLite 数据库里的数据

接下来,我们就可以在测试脚本中使用 SQLite 数据库里面的数据了。和在 java 中调用其他类型的数据库一样,我们只要连接上数据库,给出所需的 SQL 命令,执行 SQL 就可以得到想要的查询结果了。

示例代码

下面给出一些示例代码来帮助读者了解使用 java 调用 SQLitejdbc,实现从数据库中读取数据的过程。

1. 连接数据库

注意:这里的 GVTData.db 是 SQLite 数据库的名字。SQLite DB 默认是用 .sqlite 的扩展名,当然读者可以使用任何其它的扩展名来代替之。


清单 1. 连接数据库
// Connect to SQLite JDBC
Class.forName("org.sqlite.JDBC");

// Create connection to GVTData.db 
conn = DriverManager.getConnection("jdbc:sqlite:../testdata/GVTData.db");

statement = conn.createStatement();

2. 读取数据

测试开发人员还可以尽情运用 SQL 技巧从表中来读取测试数据。因为 SQLite 支持绝大多数标准的 SQL 语句,所以我们的读者可以充分使用 SQL 的强大选取数据的功能来获得所需的测试数据。


清单 2. 读取数据
StringBuffer sb = new StringBuffer("select * from gvtdata where id=").append(iDataID);

ResultSet rs = statement.executeQuery(sb.toString());

3. 关闭连接

好的习惯关闭连接不可少,无需赘述。


清单 3. 关闭连接
// 关闭数据库连接
rs.close();

conn.close();

五、SQLite 数据库应用场景分析与示例

我们下面通过一个实际的应用场景来举例说明 SQLite 嵌入式数据库在自动化测试中的应用。

SQLite 的应用场景实例分析

在前面文章开始的部分,我们介绍了使用 RFT 进行自动化测试时测试数据读取的几种方式。对于软件自动化测试来讲,之所以引入数据库来存取测试数据,也是最大限度地考虑了数据库对数据存取操作的优势。

我们下面结合实际测试中的一个应用场景,来分析一下引入数据库存取测试数据给我们带来的好处,以及为何选择 SQLite 嵌入式数据库。

场景描述:

在 Web 应用中,实现对一个页面的创建操作。测试要求:以任何语言字符的命名的页面可以成功创建并正确显示。

场景分析:

在测试中,我们需要验证各种字符集的字符是否能在页面上正确地输入、保存和输出。这个测试本身并不是对产品功能的测试,而是验证产品对全球化的支持程度。所以,我们需要使用各种字符集的测试数据对这个功能点进行测试。

我们的测试数据被归类整理在几个二维的表中,按照字符集、验证点、语言等进行分类。我们可以根据测试的需要选择不同类型的测试数据。对数据库来说,在一个或多个表中按设定的条件查询是个再简单不过的事情。

分析得出:此场景是在测试环境,而非生产环境,所以我们需要的数据库要小巧,SQLite 正好满足。不需要安装,也不需要配置,当然再好不过的了。进一步分析,在整个测试过程中,测试数据是静态的,事先准备好的,我们只是根据需要去读取数据, 而不需要写入数据。所以,就这一点而言,正是迎合了 SQLite 的读取速度快的优势,规避了其写入速度慢的不足。另外,几千条的数据量,对于 SQLite 来讲,太轻松了。而对大部分标准 SQL 的支持,使得选取测试数据轻而易举。

下面的示例给出了在软件全球化测试应用中遇到的真实测试用例,以此更详尽的描述 SQLite 的应用以实现轻松读取测试数据。

软件全球化测试的应用场景示例

软件的全球化测试是功能测试的一部分,有时也被独立出来由单独的团队进行测试。全球化软件测试的一个重要方法就是使用一些语言相关的特殊字符作为测试数据。在测试中,通过验证多语言、不同字符集的测试数据的输入输出来发现软件产品对多语言的支持程度。

我们所使用的测试数据,都是经过详细地分类和整理,根据测试范围的不同,存放在数据库中,在测试的时候,根据测试用例中的测试范围或验证点或来自动 选取测试数据,从而达到灵活读取测试数据的目的。本例中,我们就是通过使用 SQLite 嵌入式数据库作为数据源,以 RFT 为测试框架,实现对多语言测试数据的读取。

测试用例:

在一个软件系统中,我们需要输入企业的 URL 信息。

测试数据:

我们的测试数据可以存放在 SQLite 数据库里,如下面两张表:


表 1. TestData 测试数据
ID TestArea Value Language
1 TA_2 http://www. 万网 .com zh_cn
2 TA_2 http://www.아사달.com ko
3 TA_2 http://www.Δωρεάν.gr el
4 TA_3 焦小龙 zh_cn
5 TA_3 あいかわ ja
6 TA_3 Абрамович Ru
...


表 2. TestArea 测试范围
ID Name Description
TA_1 Currency ...
TA_2 URL ...
TA_3 Username ...

选取测试数据:


清单 4. 测试范围为 URL 的代码示例
// 选取测试范围为 URL 的测试数据
String sTestAreaName = "URL";

StringBuffer sb = new StringBuffer("select a.value from testdata a, testarea b where 
    a.testarea=b.i and b.Name='").append(sTestAreaName).append("'");
    
ResultSet rs = statement.executeQuery(sb.toString());

在上面的代码中,根据查询条件,我们查询到所有 TestArea 是 URL 的测试数据 , 有下面三条。


表 3. 测试数据举例
ID TestArea Value Language
1 TA_2 http://www. 万网 .com zh_cn
2 TA_2 http://www.아사달.com ko
3 TA_2 http://www.Δωρεάν.gr el

我们将这些数据用于页面的测试,在用户界面上进行输入,就如下图所示:


图 4. 应用场景示例
图 4:应用场景示例

在这个例子中,我们需要验证每一条测试数据能够成功输入和显示,包括简体中文,韩文和希腊文。

当然,对于不同的测试用例,我们可以根据需要设置不同的查询条件。比如,现在需要只选取一个中文的 URL 测试数据。所以,我们可以修改测试条件为:


清单 5. 设置不同查询条件
// 选取测试范围为 URL,并且语言为中文的测试数据
String sTestAreaName = "URL";

String sLanguage = "zh_cn";

StringBuffer sb = new StringBuffer("select a.value from testdata a, testarea b where 
    a.testarea=b.i and b.Name='").append(sTestAreaName).append("' and 
    a.language='").append(sLanguage).append("'");

总之,在二维表中查询数据,对数据库来说是轻而易举的。尤其是当查询条件较多,表与表之间相互关联的时候,更显示出数据库的优势来。

六、结束语

通过这篇文章,我们了解了 RFT 中读取测试数据的几种方式,以及嵌入式数据库 SQLite 的一些介绍和其他数据库软件的比较。通过实际的测试场景分析,我们了解到,在 RFT 中使用 SQLite 来管理测试数据是一个值得尝试的方法。它使得测试数据的查询和维护变得更加容易,同时也使选取复杂的测试数据变得快速而轻松。更重要的是,这种方式对测试 数据的扩展和更新提供了更多的机会和可能。

文章来自 IBM developerWorks

举报
IBMdW
发帖于7年前 0回/746阅
顶部