51Testing软件测试论坛

标题: 测试脚本自动生成工具实现 [打印本页]

作者: farrey    时间: 2010-5-5 22:14
标题: 测试脚本自动生成工具实现
我要做一个为Java的类文件自动生成Junit测试脚本框架的工具。主要利用了Java的反射机制,该工具用Java实现的。
有点类似JTest工具里自动生成测试用例的功能。下面是被测试类和生成的脚本代码。
假设被测试类Calculator的代码如下:
package testing;

public class Calculator {
        public double add(double number1,double number2)   //实现加法方法
        {
                return number1+number2;
        }

}

//生成测试脚本:CalculatorTest(这里省略了框架的一些基本内容,主要是下面构造函数和方法的测试框架)

public class CalculatorTest extends TestCase
{

  /**
   * Test the constructor: Calculator()
   */
//定义了一个testCalculator测试方法,用来测试测试类中的Calculator()构造函数
  public void testCalculator() {
    //期望值
    //expected=  ;
    //实际值
    //actual=  ;

  }

  /**
   * Test method: double add(double, double)
   */

  public void testAdd() {
//calculator = new Calculator();
    //Must test for the following parameters!
    //初始值为参数随机值
    doubleRandomParameterValue=0.7309316723106242
    //初始值为参数随机值
    doubleRandomParameterValue=0.8496063671639416
    //期望值
    //expected=  ;
    //实际值
    //actual=  ;
  }
}
这里我可以根据Java的反射机制获得类中方法的方法名,参数类型。我要根据方法的参数类型生成随机值(限于基本的数据类型),这个已经弄好了。
这里我不知道根据参数类型怎么用测试方法中的边界值方法生成边界值(这也是生成随机值的一种方法)?还有一般这类型工具还可以自动生成框架里的哪些内容?
因为我对单位测试了解不多,所以在这里请接触过这类型的工具的大侠帮我提点意见~~
作者: VisualUnit    时间: 2010-5-6 09:00
边界值有两类:自然边界值、业务边界值。

自然边界值:根据数据类型设定,如int类型有:最大值,最小值,0,1,-1。
生成自然边界值不难,为了便于修改,建议把值保存在文本文件中,工具启动时载入。
如有多个参数,可以用单循环组合来生成用例。

业务边界值:是指与代码功能有关的边界值,例如一个表示年龄的int类型参数,有效范围是0-200,中间可能还要分段处理,如小于10岁的为儿童,大于60岁的为老人,程序需要判断和处理。这个例子中,业务边界值有:-1、0、1、9、10、11、59、60、61、199、200、201,即有效范围边界、有效范围内的分段边界,以及这些边界值的加一、减一。这个需要人工介入,可以提供一个界面,由用户设定业务边界值再由工具生成。

工具可以生成测试驱动、桩、用户只需要填写或修改数据就可以了,但有些数据需要调用现有代码来完成初始化,这是工具无法生成的。

没有人工介入生成大量用例,意义不大,不要受一些工具厂商的误导,因为工具不可能自动了解代码功能,用根据数据类型来预设的值组合生成的大量用例,多数是垃圾,选择修改还不如直接填数据更快些,如果用例代码生成不全,更需要不少重复工作。建议只生成一个用例,编译并执行正常后,再拷贝修改来建立新用例,通常,不同用例间只是个别数据不同,拷贝修改是很简单高效的。

[ 本帖最后由 VisualUnit 于 2010-5-6 09:03 编辑 ]
作者: farrey    时间: 2010-5-7 14:45
标题: 回复 2# 的帖子
谢谢VisualUnit的指导~~对边界值法有了进一步的了解,您的建议让我对脚本自动生成工具的实现明白了很多,谢谢




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2