基于用户输入的 Rational Functional Tester 测试用例自动选择和执行工具
 

2010-02-02 作者:张 旭,张 庆锋,章 岩 来源:IBM

 
本文内容包括:
用户在验证缺陷修补的过程或者在回归测试的项目中,常常需要从一个自动测试用例的全集合中选取某些测试用例来执行,而不是运行自动测试用例全集合。本文针对 IBM Rational Functional Tester 编写的测试用例脚本开发了一个自动化测试用例选取工具,此工具可以通过图形界面的形式或者提供测试用例号文本文件两种方式来筛选测试用例。该工具已经得到了一个实际项目的成功实践,希望对读者能起到一些抛砖引玉的作用。

背景

现如今随着软件产品的功能不断增强,软件的复杂度也在不断提升。为了保证可以提供高质量的软件给客户,软件测试人员肩负着主要的任务。在这样一个趋势下,软件测试又会有怎样的变化呢?

首先随着软件的功能增多和增强,软件测试人员需要编写并执行大量测试用例来检验产品功能和性能的可靠性。尤其在测试执行时,还要针对不同需求选择合适的测试用例,这对于测试人员来说是一个繁琐复杂的工作。

同时随着敏捷开发的推广和发展,软件生命周期在不断缩短,以便可以让客户更加迅速使用到软件的最新版本。敏捷开发就需要开发人员和测试人员的更加紧密地合作,从而才能更加高效的提供可靠的产品。

为了适应以上两个变化,测试人员需要大大提高工作效率。那么自动化测试就是我们提高工作效率的一个很好的手段。在众多的自动化测试软件中,IBM 的 Rational Functional Tester 是一款相当不错的软件产品,它可以满足用户的多种复杂的自动化软件测试代码开发需求。

本文针对 IBM Rational Functional Tester 编写的测试用例开发了两个工具,此工具可以从两种方式来实现测试的自动化。其一,Rational Functional Test Execution Engine 工具(简称 REE)是通过 GUI 来获取 RFT 工程路径,然后用户可以自由选取需要的测试用例,选取结束工具会自动生成被选测试用例的自动执行脚本并执行,最终提供一个测试执行的统计报告;其二,Rational Functional Tester Case Selection 工具(简称 RCS)是用户可以基于一定格式,提供待选测试用例的列表文件,工具会根据测试用例列表文件去测试包中寻找待选用例组织并执行,同样会有测试用例执行的报告。

通常的使用场景

IBM Rational Functional Tester 可以自动化测试 Java、.NET 以及基于 Web 的应用。针对被测产品(SUT)的测试用例(Test case)数量非常庞大,在一个测试周期内,就产生了以下两种情况:

(1) 用户在验证缺陷(Defect)修补的过程中,常常需要从一个自动测试用例的全集合中选取某些测试用例来做关于该缺陷修补的验证工作。而不是运行自动测试用例全集合。

(2) 在回归测试的项目中,用户常常需要选择某些测试组件的相关自动测试用例作测试,而不是运行自动测试用例全集合。

图 1 展示了一个测试或者脚本开发人员的工作流程。其中有两种方式来执行选中的测试用例。第一,在 RFT 集成开发环境中依次直接执行测试用例脚本。第二,编写批处理或者 shell 脚本,利用命令行的方式调用 RFT 脚本执行相应的测试用例。

图 1. 通常的使用场景
图 1. 通常的使用场景

2. 上述场景中的问题

(1) 在第一种场景中,用户需要手动选择待测用例,检查待测用例的依赖关系,在 RFT 工程路径中定位这些测试用例,然后在 RFT 工程环境下调动执行,再逐条人工分析测试结果。这些过程都是手工的,浪费测试人员的时间和精力。

(2) 在第二种场景中,由于回归测试频率要求高,需要更加迅速的完成测试,所以选择测试用例的工作更需要迅速准确,对自动化要求更高。用户根据所在测试阶段与测试覆盖率的指导原则下,需要从一个自动测试用例的全集合中选取某些测试用例。一般情况下,其中每个测试用例均有唯一且不重复的测试用例号 (ID),所开发测试脚本也是按照 ID 命名的,因此构造出批处理执行脚本的工作主要集中在编辑测试用例 ID 上,测试人员往往需要手工修改 bat 文件,不仅效率低而且会出现输入错误的风险。

3. 解决方案

3.1 通过 GUI 选取测试用例

方案描述

通过该方案,测试人员的所有操作均在 Rational Functional Test Execution Engine (REE) 工具中执行。由于 RFT 脚本的开发是基于 Eclipse 平台的 RFT 集成开发环境的,因此所有的脚本文件均位于工作空间(workspace)下。使用 REE,用户只需要打开工作空间中的项目文件,选择欲想执行的测试用例(Test case),利用工作自带的导出工具便可以生成批处理脚本,并保存在本地。REE 提供执行该批处理脚本的功能,测试人员启动批处理脚本后,RFT 脚本即开始运行,REE 会自动检查 RFT 脚本运行状态与是否通过,并将解析日志,将 RFT 脚本执行结果展现给用户。

图 2 展示了 REE 工具的用户界面。左栏用于选取测试用例。右栏中,”Batch script”标签页展示批处理脚本内容,”Log viewer”标签页展示日志信息。

适用范围

该方案实现的工具适用于利用 IBM Rational Functional Tester 开发的测试用例工程。定位于工作空间下任意一个项目。

图 2. REE 用户界面
图 2. REE 用户界面

REE 工具使用

(1) 单击菜单栏 File -> Open Workspace,选择项目文件夹根目录路径。

图 3. 选取项目文件夹根目录
图 3. 选取项目文件夹根目录

(2) 选取了项目文件夹根路径后,程序会自动遍历该目录下所有的 java 文件,通常 RFT 脚本即是一个实现了 RFT API 的 java 程序。所有的 java 文件以树状形式展现,用户只需要勾选相应的测试用例便选中了该测试用例。

图 4. 选择欲执行的测试用例(查看大图
图 4. 选择欲执行的测试用例

(3) 单击菜单栏 Toolkit -> Config Path,设置 RFT 运行时参数。

图 5. 设置 RFT 运行时参数
图 5. 设置 RFT 运行时参数

(4) 单击菜单栏 Toolkit -> Generate Script,生成批处理脚本。

我们生成的批处理脚本时利用命令行的方式调用 RFT 脚本的。如下。

%jre_bin%\java.exe -Drational_ft.install.dir=%ft_install_dir% 
  -classpath %rft_classpath% com.rational.test.ft.rational_ft 
  -datastore %scriptdir% 
  -playback DashboardPortal.Alert.DASHPA0003 & 
  echo DashboardPortal.Alert.DASHPA0003>> c:\cases.txt

图 6. 生成批处理执行脚本(查看大图
图 6. 生成批处理执行脚本

(5) 单击菜单栏 Toolkit -> Execute Script,执行批处理脚本。

图 7. 执行批处理脚本
图 7. 执行批处理脚本

(6) 批处理脚本执行完毕,可以跟踪每个测试用例的具体日志信息,双击即可打开浏览器查看。信息统计下表格如下。

表 1. 日志信息统计表格
 
Case Name Status

第一列说明测试用例名称,第二列说明了该测试用例的运行结果 PASS(通过), VP FAIL(验证点失败), CASE FAIL(RFT 脚本抛出异常或者运行失败), UNDONE(用户终止了批处理脚本的运行,该 RFT 脚本未运行), Read_Log_Fail(读取日志失败)。

图 8. 日志信息
图 8. 日志信息

(7) 单击菜单栏 File -> Save log,可以保存”Log viewer”标签页中的日志信息到本地。

示例代码

本小节包含了对上述方案的详细解释以及部分示例代码,供读者参考。

REE 工具的基本步骤包括:

获取工作空间下具体项目的文件结构;

根据选中的测试用例生成批处理脚本;

保存自动化执行脚本到本地;

执行本地批处理脚本;

收集测试用例状态;

保存日志信息。

清单 1. 获取工作空间下具体项目的文件结构
 
protected ArrayList<String> calculate(File dir,CheckTreeNode root) 
{
 if(dir.isDirectory())
  {
   //child 是工具图形化界面中的树形文件结构中的节点对象
    CheckTreeNode child = new CheckTreeNode(dir.getName());
     root.add(child);
      // 得到该目录下所有的文件,包括二级目录与文件
       File [] fileList = UtilHelper.getFileList(dir);
        for(int i = 0; i < fileList.length; i++)
         {
          // 递归地调用 calculate 方法
           calculate(fileList[i],child); 
         }
   }
   else if(dir.isFile())
   {
        // 如果检测到以 .java 结尾的文件则进入条件
        if(dir.getName().endsWith(".java"))
        {
		    CheckTreeNode child = new CheckTreeNode(dir.getName());
            // 加入到树中
            root.add(child);
        }
    }
    return list;
}

清单 2. 根据选中的测试用例生成批处理脚本
 
public void exportBATScript(CheckTreeNode root)
{
 // 以根为起点,广度优先遍历树
  Enumeration en = root.depthFirstEnumeration();
   while (en.hasMoreElements()) 
    {
     CheckTreeNode node = (CheckTreeNode)en.nextElement();
      // 如果该结点被选择并且是叶子结点
       if (node.isSelected() && node.isLeaf()) 
        {
         // 处理节点
        }
    }
}

清单 3. 保存自动化执行脚本到本地
 
File batScript = path;
FileWriter fw = new FileWriter(batScript);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.println(text.getText());
pw.close();
fw.close();

清单 4. 执行本地批处理脚本
 
Process process = Runtime.getRuntime().exec("cmd.exe /c start " + path);
BufferedReader reader= new BufferedReader(
new InputStreamReader(process.getInputStream()));
String str=reader.readLine();
while (str!=null)
{
 str=reader.readLine();
}
reader.close();
process.destroy();

清单 5. 收集测试用例状态
 
// 实例化一个测试用例模型,该模型是个 POJO 的 Javabean 对象,默认其状态为通过
Testcase tc = new Testcase(caseName,Testcase.PASS);
// 根据实际扫面日志的结果,设置该测试用例的状态
if (UtilHelper.containSpecificWords(scriptdir,caseName, "exception"))
tc.setStatus(Testcase.CASE_FAIL);
if (UtilHelper.containSpecificWords(scriptdir,caseName, "failed"))
tc.setStatus(Testcase.VP_FAIL);
if (UtilHelper.containSpecificWords(scriptdir,caseName,
  "SCRIPT SHUTDOWN"))
tc.setStatus(Testcase.STOP);

3.2 通过 Web GUI 选取测试用例

第一种解决方案适用于单纯的 RFT 工程,而现今 IBM 的测试人员会在基本的 RFT 框架上做一些符合自身项目需要的改动,这样会对测试脚本以及生成的测试结果产生影响。这时就需要更加灵活,适应性更高的解决方案。

方案描述

用户根据所在测试阶段与测试覆盖率的指导原则下,需要从一个自动测试用例的全集合中选取某些测试用例。一般情况下,每个测试用例均有唯一且不重复的测试用例号 (ID),在很多项目中,测试人员往往是根据模板编写批处理执行脚本 (bat 文件 ) 来完成批量测试工作的,而 bat 文件中的主要是测试用例号的编辑工作。下面是一个通常测试环境下批处理执行脚本的举例。

适用范围

如果您利用 IBM Rational Functional Tester 开发的工程,测试用例号(ID)与 RFT 脚本号是一一对应的,测试用例是添加到测试套装(test suite)中执行的,并且想跨不同的项目或者模块来运行测试用例脚本,那么该方案将适用于以上情况。否则需要针对您的项目做适当的修改。

清单 6. 一个通常测试环境下的批处理脚本
 
@echo off
rem run testsuite package in Rational Functional Tester 
rem
rem build number 5674-0034
rem runRFT 是一个已经写好的批处理脚本,其参数为测试用例名称的列表,可以依次执行测试用例

call runRFT WFCL0010,WFCL0011,WFCL0012,WFCL0013,WFCL0014,WFCL0015,WFCL0016,WFCL0017,
            WFCL0018,WFCL0019,WFCL0020,WFCL0031,WFCL0033,WFCL0035,WFCL0038,WFCL0040,
            WFCL0042,WFCL0045

call runRFT LPCT0001,LPCT0002,LPCT0003

call runRFT
LPDC0101,LPDC0102,LPDC0103,LPDC0104,LPDC0105,LPDC0106,LPDC0107,LPDC0111,LPDC0112,
LPDC0201,LPDC0202,LPDC0203,LPDC0204,LPDC0205

可以看出测试用例 ID 号的编辑工作量及其庞大繁琐,容易造成手工输入错误,导致脚本运行失败。

通过该方案,测试人员只需要编辑一个包括测试用例号的 txt 文本文件,通过 Web 文件上传的方式,系统在后台根据模板生成批处理执行脚本,用户即可下载这样一个完整的可以用来执行的文件。下面是包含测试用例号的 txt 文本文件。用户只需要上传这样的一个文件即可。

清单 7. 包含测试用例号的文本文件
 
#WFCL
WFCL0000
WFCL0010
WFCL0021
WFCL0032

#LPCT
LPCT0000
LPCT0011

图 9. 解决方案流程图
图 9 解决方案流程图

对于生成的自动化执行批处理脚本,可以在本地执行或者通过 STAF/STAX、Rational Build Forge 等工具远程在测试机上执行。同时该脚本还可以提供收集功能,系统还提供了日志解析模块供开发人员调用。

成功实践

上述解决问题的思路已经在 MDM SERVER FOR PIM 产品的 GUI 自动化回归测试中成功实践。现已开发出基于 WEB 的 RFT Case Selection 工具(简称 RCS)并且打包成 war 文件,可以很方便的部署到任何 J2EE 的服务器上。附源码下载供学习使用。

图 10. 上传测试用例号文本文件界面(查看大图
图 10 上传测试用例号文本文件界面
图 11. 当测试用例文本文件中的 ID 错误时的异常处理(查看大图
图 11 当测试用例文本文件中的 ID 错误时的异常处理
图 . 上传成功的下载界面(查看大图
图 12 上传成功的下载界面

MDM SERVER FOR PIM GUI 测试框架简介

针对 MDM SERVER FOR PIM 产品开发的 GUI RFT 测试脚本位于某一工作空间(workspace)下,每一个项目(project)文件都是一个测试模块,名为 testcases 文件夹下是测试套件(testsuite),在测试套件目录下是每个测试用例(testcase)的 RFT 脚本,每个脚本均以测试用例 ID 命名。

图 13. MDM SERVER FOR PIM GUI 测试工作空间截图
图 13 MDM SERVER FOR PIM GUI 测试工作空间截图

MDM SERVER FOR PIM QA 组自行开发了自动化执行框架来调用 RFT 测试脚本,该框架提供两个批处理脚本供调用,分别为 setvars.bat 和 runRFT.bat,其使用方法如下。

清单 8. MDM SERVER FOR PIM 的 RFT 测试框架批处理脚本使用方法
 
>>-setvars.bat----projectName -----><


>>-runRFT.bat----testSuiteName ----configFileName ----->

>--+--------------+---------------testIDlist-----------------><
 ‘----- -p -----‘
 ‘----- -r -----‘
 ‘----- -s -----‘

一个典型的自动化执行批处理文件 run.bat 如下。

清单 9. 典型的自动化执行批处理文件 run.bat
 
call setvars workflow
call runRFT Workflow.TestSuite_WFCL db2_config -p -s –r WFCL0001,WFCL0002
call setvars leftpane
call runRFT Leftpane.TestSuite_LPCT oracle_config -p -s –r LPCT0001,LPCT0002

测试用例与测试套件的映射关系模块

通过对 MDM SERVER FOR PIM 批处理执行脚本的分析可以看出对于输入的测试用例号,需要其相应的工程名(project)与测试套件名(testsuite)才可以组装成批处理脚本。因此得到整个工作空间下各个 RFT 脚本的所在工程与测试套件的信息是必要的。GenMapByPath 类实现的功能就是根据输入的工作空间路径获取测试用例与测试套件的映射关系。由于所有的 RFT 脚本均是 .java 文件,所以遍历工作空间只需要搜索到 java 源文件可以当作一个测试用例 RFT 脚本。所生成的映射文件如下。这个映射文件的作用不仅在于获取信息,在接下来的批处理脚本生成环节还能提供检查测试用例是否存在等合法性信息。

注:部署完 RCS.war 包后,需要将该 map.properties 文件拷贝到 c:\RCS(WindowsOS)或者 /opt/RCS(Unix/LinuxOS)路径下。

map.properties 文件格式举例如下。

清单 10. 测试用例号于路径映射文件 map.properties
 
LPLW0005=leftpane,LeftPane.LPLW0005.LPLW0005
LPLW0004=leftpane,LeftPane.LPLW0004.LPLW0004
LPLW0003=leftpane,LeftPane.LPLW0003.LPLW0003
LPLW0002=leftpane,LeftPane.LPLW0002.LPLW0002
LPLW0001=leftpane,LeftPane.LPLW0001.LPLW0001
LPLW0000=leftpane,LeftPane.LPLW0000.LPLW0000

GenMapByPath 类的主要方法如下。

清单 11. 根据工作空间,生成测试用例与测试套件映射关系文件
 
// projectNames 存储所有项目的名称
String[] projectNames = getFiles(workspaceDir);
// 遍历所有项目
for(int i = 0; i < projectNames.length; i++) 
{
 // 默认每个项目下以 testcase 命名的文件夹存储了所有的 RFT 脚本
 File testcaseDir = new File(workspaceDir.getAbsolutePath() + "\\" + 
 projectNames[i] + "\\testcases"); 
 if (testcaseDir.exists()) 
 {
 componentNames = getFiles(testcaseDir);
 // 遍历各个模块
 for(int j = 0; j < componentNames.length; j++) 
 {
 File component = new File(testcaseDir + "\\" + componentNames[j]);
 // 添加测试套装名称到 testsuites 链表
 testsuites = traverseComponents(component);
 }
 }
}

批处理执行脚本生成模块

GenCaseSelectionScriptForMDM SERVER FOR PIM 类是针对 MDM SERVER FOR PIM GUI 测试框架定制的批处理脚本生成适配器。其类图如下。它的主要功能是根据用户上传的测试用例号文本文件,生成相应的满足项目需求的批处理可执行 bat 脚本。

图 14. 批处理执行脚本生成模块 UML 类图
图 14 批处理执行脚本生成模块 UML 类图

该类的主要方法是 generateBatchScript(File idList, File batToRun, File properties, File resultFolder) : void。idList 是用户输入的包含测试用例号的文本文件,batToRun 是 MDM SERVER FOR PIM 产品 GUI 测试的批处理执行脚本,properties 是 MDM SERVER FOR PIM GUI 测试用例与测试套件映射文件,resultFolder 是收集测试报告的路径。方法执行完毕即可写入 batToRun 所指定的批处理脚本,即所需的 run.bat 文件。

清单 12. 生成批处理执行脚本 run.bat
 
// 按行读取包含测试用例名的 idList 文件
while((id = bufr.readLine())!= null)
{
 // 取出测试用例相关信息,存储在 idValue 变量中
 idValue = Utility.getProperties(properties.toString(),id);
 // 取出项目名称
 projectName = idValue.split(",")[0];
 // 根据测试用例相关信息寻找其对应的测试套装名
 suiteName = getTestsuiteNameInCmd(properties, id);
 // 写入执行命令
 bufw.write("call RFT " + id);
} 

日志收集与解析

在上一模块生成的批处理执行脚本中,可以打包所执行过的测试用例的日志。并保存在 resultFolder 所指定的路径下。GenRFTResult 类用来解析所有测试用例日志,它会调用 RFTLogParser 类来解析单个日志,RFTLog 是一个具有 getter 与 setter 方法的 Javabean。其类图如下。

图 15. 日志收集与解析模块 UML 类图(查看大图
图 15 日志收集与解析模块 UML 类图

GenRFTResult 类的主要方法是 traverseLogs(File dir, File resultFolder)。其提供的在完成测试后的日志统计文件,间接的提供了扩展应用程序的接口。执行完毕该方法在 resultFolder 路径下会生成结构如下的信息。

$RESULTFOLDER
 |____TestSuite_1
 | |____baseline.txt
 | |____summary.txt
 | |____result.txt
 |____TestSuite_2
 | |____baseline.txt
 | |____summary.txt
 | |____result.txt
 |____TestSuite_3
 |____baseline.txt
 |____summary.txt
 |____result.txt

baseline.txt 是一个标准对照文件,result.txt 是一个实际执行完毕后的文件。它们都分为三行。第一行为该 testsuite 执行的测试用例总数。第二行为执行成功测试用例数,第三行为失败测试用例数。例如,

baseline.txt:
10
10
0
result.txt:
10
7
3

表示该 testsuite 共执行 10 个测试用例,预期成功 10 个,失败 0 个。实际执行结果成功 7 个,失败 3 个。

清单 13. 遍历收集起来的所有日志,并解析它们
 
protected void traverseLogs(File dir) 
{
 // dir 是日志存储的根目录
 if (dir.isDirectory()) 
 {
  String[] subDirs = getFiles(dir);
  for(int j = 0; j < subDirs.length; j++) 
   {
    // 如果文件是目录则递归地调用该方法
    traverseLogs(subDirs[j]));
   }
 }
 // 如果文件文件名为 rational_ft_logframe.html,则说明该目录下保存了日志
 else if (dir.getName().equals("rational_ft_logframe.html"))
 {
  // 构造并实例化一个该日志的 RFTLog 类
  RFTLog rftLog = new RFTLog(dir.getAbsolutePath());
  // rftParser 是一个解析 RFT 日志的实例,在此解析该日志
  rftParser.parseRFTReport(rftLog);
  // 取出该日志中成功、失败和测试用例数量信息
  int passedNum = rftLog.getTcPassedNum();
  int failedNum = rftLog.getTcFailedNum();
  int totalNum = rftLog.getTcExecutedNum();
 }
}

RFTLogParser 类的主要方法是 parseRFTReport(RFTLog rftLog)。其功能是根据关键字过滤 RFT 日志,收集相关信息。

清单 14. 解析 RFT 日志
 
// 依次读取日志的每一行
while ((singleLine = bufr.readLine()) != null) 
{
 // 根据关键字,过滤每一行信息并进行统计
 if (isLineMatchKeyword(singleLine, keyword_tcExecutedNum)) {
rftLog.setTcExecutedNum(Integer.parseInt(getSummaryKeyword(singleLine)));
 } else if (isLineMatchKeyword(singleLine, keyword_tcPassedNum)) {
rftLog.setTcPassedNum(Integer.parseInt(getSummaryKeyword(singleLine)));
 } else if (isLineMatchKeyword(singleLine, keyword_tcFailedNum)) {
rftLog.setTcFailedNum(Integer.parseInt(getSummaryKeyword(singleLine)));
 } 
}

Web 服务模块

RCS 工具基于 J2EE 的 servlet 技术提供对外服务。上传与下载模块利用了 SmarterDownload 工具所提供的 jar 包。表现层为 JSP 文件,提交 HTTP 请求后即可执行服务方法。具体的编辑过程见源代码,在此不在赘述。

清单 15. 上传测试用例 ID 文本文件的 Servlet 类的 doPost 方法
 
// 重写该 servlet 的 doPost 方法
public void doPost(HttpServletRequest request, HttpServletResponse response){
 SmartUpload su = new SmartUpload();
 su.initialize(config, request, response);
 su.upload();
 com.jspsmart.upload.File file = su.getFiles().getFile(0);
 File idList = new File(file.getFileName());
 File properties = new File(UPLOAD_PATH + "map.properties");
 File batToRun = new File("run.bat");
 GenCaseSelectionScriptForMDM_SERVER_FOR_PIM gen = new
 GenCaseSelectionScriptForWPCMDM_SERVER_FOR_PIM();
 gen.generateBatchScript(idList, batToRun, properties);
 response.sendRedirect("upload_success.jsp");
}

整体工作流程

整体工作流程利用 UML 序列图展示如下。

图 16. RCS 工具 UML 序列图(查看大图
图 16 RCS 工具 UML 序列图

3.3 未来构想

本文针对 IBM Rational Functional Tester 编写的测试用例开发了两个工具,此工具可以从两种方式来实现测试的自动化。

目前的 REE(Rational Functional Test Execution Engine 工具(简称 REE))工具具备以下功能:

  1. 通过 GUI 图形界面的选择方式选取并执行本地的 RFT 测试用例。
  2. 收集测试日志。
  3. 生成日志统计信息报告。

RCS(Rational Functional Tester Case Selection 工具(简称 RCS)工具具备以下功能:

  1. 测试用例选择展示门户。
  2. 测试用例号文本文件上传以及根据其生成批处理可执行脚本。
  3. 收集测试日志。
  4. 生成日志统计信息报告。

在未来,该工具可以扩展到分布式环境中,利用现在流行的远程执行工具,例如 STAF/STAX 或者 Rational Build Forge 等等来远程地在测试机执行系统所生成的批处理执行脚本。系统还可以提供给用户批处理脚本模板供配置,从而实现按需定制,自动生成的功能。

下图是 RCS 工具的框架图。

图 17. RCS 工具的框架图
图 17 RCS 工具的框架图

总结

本文通过一个简单的应用场景描述了基于 RFT 所开发的测试用例选择工具,这个工具帮助测试人员以更加简单快捷的方式选择和执行 RFT 中的测试用例,在面对测试用例爆发的现今,测试人员可以通过这种方式节省工作量,提高工作效率,增加测试人员的信心。

下载

描述 名字
大小
下载方法
GenCaseSelectionScriptForWPC.java GenCaseSelectionScriptForWPC.java
14 KB
GenMapByPath.java GenMapByPath.java
5 KB
GenRFTResult.java GenRFTResult.java
9 KB
RFTLogParser.java RFTLogParser.java
5 KB
UploadTxtService.java UploadTxtService.java
4 KB

参考资料

学习 获得产品和技术 讨论
火龙果软件/UML软件工程组织致力于提高您的软件工程实践能力,我们不断地吸取业界的宝贵经验,向您提供经过数百家企业验证的有效的工程技术实践经验,同时关注最新的理论进展,帮助您“领跑您所在行业的软件世界”。

资源网站: UML软件工程组织