《软件测试》实验指导书桂林电子科技大学计算机科学与工程学院汪华登编写修订日期:2013.6.2桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书1目录实验一单元测试及JUNIT的应用········································································3实验二性能测试及JMETER的应用······································································31实验三测试用例设计·····················································································59实验四黑盒测试中的等价类划分方法································································60桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书2《软件测试》实验要求和注意事项(根据学校相关教学管理规定)1、实验报告:按照学校实验规定,每个实验昀后都要交一份实验报告。大家每做完一个实验,回去后即利用课余时间写好实验报告。实验报告每个部分所论述的内容如下:一、实验目的与内容。二、测试过程或者测试方案、测试用例等的分析设计。三、测试结果与分析。四、问题与总结:所遇到的具体问题和分析解决过程,尚存在的一些问题,所获得的与课程相关、技术相关的心得与体会。五、附录:视需要附录代码或其它相关资料。【注意】:最终的实验报告可打印,但必须使用正规实验报告纸或A4大小的纸张。报告雷同者成绩为不及格!2、课堂纪律:请勿迟到早退。上课时请不要听歌或聊天,不要带耳塞,不要在实验室内吃东西和扔任何形式的废弃物。未经允许不能随便调整实验批次,有客观原因不能上课者必须有医院、年级主任等单位或领导的书面证明和签字盖章,随意口头请假者一般均视为无效。桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书3实验一单元测试及JUnit的应用一、实验目的1、掌握单元测试的基本理论和作用。2、掌握典型单元测试工具JUnit的使用。二、实验类型验证加设计。三、实验内容请按照以下关于单元测试的讲解说明,完成两个测试任务(即“实验任务1”和“实验任务2”),并在有时间的情况下,阅读后面关于单元测试和JUnit高级特性的内容,进一步了解单元测试的理论和JUnit测试的应用。测试对于保证软件开发质量有着非常重要的作用,单元测试更是必不可。JUnit是一个非常强大的单元测试包,可以对一个或多个类的单个或多个方法进行测试,还可将不同的TestCase组合成TestSuit,使测试任务自动化。Eclipse集成了JUnit,可以非常方便地编写TestCase。我们在编写大型程序的时候,需要编写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序中只用到该函数的一小部分功能,并且经过调试可以确定,这一小部分功能是正确的。但是,我们同时应该确保每一个函数都完全正确,因为如果我们今后如果对程序进行扩展,用到了某个函数的其他功能,而这个功能有bug的话,将会造成很多问题。所以说,每编写完一个函数之后,都应该对这个函数的方方面面进行测试,这样的测试我们称之为单元测试。传统的编程方式,进行单元测试是一件很麻烦的事情,你要重新写另外一个程序,在该程序中调用你需要测试的方法,并且仔细观察运行结果,看看是否有错。正因为如此麻烦,所以程序员们编写单元测试的热情不是很高。而类似JUnit这样的单元测试包的推出,大大简化了进行单元测试所要做的工作。实验任务1:请按以下说明完成一个基本的JUnit4测试实例。首先打开Eclipse编译器,创建一个Java项目,并在其中创建一个由File类构成的程序File.java,给该类添加一个abs方法,作用是返回一个给定整数参数的绝对值。其参考代码如下:publicclassFile{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub}publicintabs(intn){if(n=0)returnn;elsereturn(-n);}}2、下面我们准备对这个方法abs进行测试,确保其功能正常。右键点击File.java,选择new—other…,弹出如下对话框:桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书4选择JUnitTestCase。然后点击next到下一步,弹出如下窗口:默认本页内容(或者选上面的NewJUnit3Test,此时是使用JUnit3进行测试,生成的测试类会继承自系统包里面的junit.framework.TestCase类,自己可以试试)。其中的setUp方法和tearDown方法一般要选上(默认会勾选)。然后点next,弹出如下窗口:桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书5这个窗口主要是让我们选择要对哪些方法进行测试,选中以后就会在测试类中生成其对应的测试方法。这里我们主要是要测试abs方法,所以在其前面勾选即可。点击Finish,弹出昀后的窗口:是询问是否现在添加JUnit的库到编译路径下,选择添加(默认),点击ok即可。结果会发现项目类生成了FileTest文件,测试类的代码如下:importstaticorg.junit.Assert.*;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;publicclassFileTest{@BeforepublicvoidsetUp()throwsException{}桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书6@AfterpublicvoidtearDown()throwsException{}@TestpublicvoidtestAbs(){fail(Notyetimplemented);}}setUp()是建立测试环境,一般我们可以在setUp方法里面创建一个被测试类的实例;tearDown()用于清理资源,如释放打开的文件等等。以test开头的方法被认为是测试方法,JUnit会依次执行testXXX()方法。也就是说,JUnit大致会以如下流程进行执行:try{MyTestClassTest=newMyTestClass();//建立测试类实例Test.setUp();//初始化测试环境Test.testAbs();//测试某个方法Test.tearDown();//清理资源}catch(){}在testAbs()方法中,我们对abs()的测试分别选择正数,负数和0,如果方法返回值与期待结果相同,则assertEquals不会产生异常。将其代码完善为如下的测试代码:importstaticorg.junit.Assert.*;importorg.junit.After;importorg.junit.Before;importorg.junit.Test;publicclassFileTest{privateFilefile;@BeforepublicvoidsetUp()throwsException{file=newFile();}@AfterpublicvoidtearDown()throwsException{}@TestpublicvoidtestAbs(){assertEquals(file.abs(14),14);assertEquals(file.abs(-5),5);assertEquals(file.abs(0),0);}}桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书在测试类上右键单击,选择RunAs——JUnitTest,进行运行。如果没问题,则出现如下所示的提示:我们故意将File类中要测试的方法abs的returnn;改为returnn+1;再运行,则结果如下:请比较和体会一下有问题和没问题的测试提示有何不同。JUnit通过单元测试,能在开发阶段就找出许多Bug,并且,多个TestCase可以组合成TestSuite,让整个测试自动完成,尤其适合于XP方法。每增加一个小的新功能或者对代码进行了小的修改,就立刻运行一遍TestSuite,确保新增和修改的代码不会破坏原有的功能,大大增强软件的可维护性。至此实验任务1结束。下面继续实验任务2。7桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书8实验任务2:根据下面的说明,建立一个基于JUnit4的测试项目,对一个类当中的多个方法进行单元测试,进一步体验一下单元测试的作用和JUnit测试的应用。首先新建一个项目叫JUnitTest,我们编写一个Calculator类,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。这个类并不是很完美,我们故意保留了一些Bug用于演示,这些Bug在注释中都有说明。该类代码如下:publicclassCalculator{privatestaticintresult;//静态变量,用于存储运行结果publicvoidadd(intn){result=result+n;}publicvoidsubstract(intn){result=result-1;//故意的Bug,应该是result=result-n}publicvoidmultiply(intn){}//假设此方法在项目完成过程中尚未写好publicvoiddivide(intn){result=result/n;}publicvoidsquare(intn){result=n*n;}publicvoidsquareRoot(intn){//求平方根for(;;);//Bug:死循环}publicvoidclear(){//将结果清零result=0;}publicintgetResult(){returnresult;}}桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书第二步,将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:在弹出的属性窗口中,首先在左边选择“JavaBuildPath”,然后到右上选择“Libraries”标签,之后在昀右边点击“AddLibrary…”按钮,如下图所示:9桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书然后在新弹出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了(实际上在后面的第三步生成测试用例的过程中Eclipse这样的编译器也会让我们选择添加JUnit4包的)。第三步,生成JUnit测试框架:在Eclipse的PackageExplorer中用右键点击该类弹出菜单,选择“JUnit测试用例”。如下图所示:在弹出的对话框中,进行相应的选择,如下图所示:点击“下一步”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此例中,我们仅对“加、减、乘、除”四个方法进行测试。如下图所示:10桂林电子科技大学计算机科学与工程学院《软件测试》实验指导书11之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。完整的CalculatorTest代码如下:importstaticorg.junit.Assert.*;importorg.junit.Before;importorg.junit.Ignore;importorg.junit.Test;publicclassCalculatorTest{privatestaticCalculatorcalculator=newCalculator();@BeforepublicvoidsetUp()throwsExc