TestNG单元测试

1 . 简介

1.1 TestNG是什么?

1) TestNG是一个测试框架,其灵感来自JUnit和NUnit的,但引入了一些新的功能,使其功能更强大,使用更方便。

2) TestNG是一个开源自动化测试框架;TestNG表示下一代。 TestNG是类似于JUnit(特别是JUnit 4),但它不是一个JUnit扩展。它的灵感来源于JUnit。它的目的是优于JUnit的,尤其是当测试集成的类。

3) TestNG的创造者是Cedric Beust(塞德里克·博伊斯特)

4) TestNG消除了大部分的旧框架的限制,使开发人员能够编写更加灵活和强大的测试。因为它在很大程度上借鉴了Java注解(JDK5.0引入的)来定义的测试,它也可以告诉你如何使用这个新功能在真实的Java语言生产环境中。

1.2 TestNG的特点

1)注解

2) TestNG使用Java和面向对象的功能

3) 支持综合类测试(例如,默认情况下,没有必要创建一个新的测试每个测试方法的类的实例)

4) 独立的编译时间测试代码运行时配置/数据信息

5) 灵活的运行时配置

6)主要介绍“测试组”。当编译测试,只要问TestNG运行所有的“前端”的测试,或“快”,“慢”,“数据库”等

7) 支持依赖测试方法,并行测试,负载测试,局部故障

8) 灵活的插件API

9) 支持多线程测试

2 . Eclipse安装TestNG

2.1 下载

http://pan.baidu.com/s/1hsBClvQ

2.2 文件转移

1. 将解压后的文件..\eclipse-testng离线包\features\org.testng.eclipse_6.9.9.201510270734   文件夹 放到      eclipse-->features目录下

2. 将解压后的文件..\eclipse-testng离线包\plugins\org.testng.eclipse_6.9.8.201510130443  文件夹  放到                 eclipse-->plugins目录下

2.3 重启Eclipse

2.4 验证是否安装成功

file-->new-->other-->TestNg

3 . Maven安装TestNG插件

3.1 导包

<dependency>
         <groupId>org.testng</groupId>
         <artifactId>testng</artifactId>
         <version>6.9.10</version>
         <scope>test</scope>
</dependency>

3.2 配置插件

<plugin>
     <!-- testNG插件 -->
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-surefire-plugin</artifactId>
     <version>2.5</version>
     <configuration>
         <!-- 解决Maven test 乱码问题 -->
         <forkMode>once</forkMode>
         <argLine>-Dfile.encoding=UTF-8</argLine>
         <!-- true 关闭测试; false 开启测试; -->
         <skipTests>false</skipTests>
         <!-- 包含哪些测试java类 -->
         <includes>
              <!-- 任何子目录下包含Test的java类 -->
              <!--<include>**/*Test.java</include> -->
              <!-- 任何子目录下已Test开头的java类 -->
              <!--<include>**/Test*.java</include> -->
              <!-- 任何子目录下已Test结尾的java类 -->
              <!--<include>**/*Test.java</include> -->
         </includes>
         <!-- 排除哪些测试java类 -->
         <excludes>
              <!-- 同上includes -->
              <!--<exclude>**/*Test.java</exclude> -->
              </excludes>
              <!-- 使用XML文件导入需要的测试java类 -->
         <suiteXmlFiles>
             <suiteXmlFile>src/test/resources/testng/testng.xml</suiteXmlFile>
         </suiteXmlFiles>
     </configuration>
</plugin>

3.2 运行

进行测试:

mvn  test

打包跳过测试:

mvn  package  -Dmaven.test.skip=true

4 . TestNG注解

4.1 类与方法

注解	描述
@BeforeSuite	注解的方法将只运行一次,运行所有测试前此套件中。
@AfterSuite	注解的方法将只运行一次此套件中的所有测试都运行之后。
@BeforeClass	注解的方法将只运行一次先行先试在当前类中的方法调用。
@AfterClass	注解的方法将只运行一次后已经运行在当前类中的所有测试方法。
@BeforeTest	注解的方法将被运行之前的任何测试方法属于内部类的 <test>标签的运行。
@AfterTest	注解的方法将被运行后,所有的测试方法,属于内部类的<test>标签的运行。
@BeforeGroups	组的列表,这种配置方法将之前运行。此方法是保证在运行属于任何这些组第一个测试方法,该方法被调用。
@AfterGroups	组的名单,这种配置方法后,将运行。此方法是保证运行后不久,最后的测试方法,该方法属于任何这些组被调用。
@BeforeMethod	注解的方法将每个测试方法之前运行。
@AfterMethod	被注释的方法将被运行后,每个测试方法。
@DataProvider	标志着一个方法,提供数据的一个测试方法。注解的方法必须返回一个Object[] [],其中每个对象[]的测试方法的参数列表中可以分配。
该@Test 方法,希望从这个DataProvider的接收数据,需要使用一个dataProvider名称等于这个注解的名字。
@Factory	作为一个工厂,返回TestNG的测试类的对象将被用于标记的方法。该方法必须返回Object[]。
@Listeners	定义一个测试类的监听器。
@Parameters	介绍如何将参数传递给@Test方法。
@Test	标记一个类或方法作为测试的一部分。

4.2 @Test参数

TestNG中@Test参数详解

参数名	参数类型	备注
groups	String[]	分组测试组名
enabled	boolean	标识当前测试是否可用
parameters	String[]	和testng.xml配置文件相对应的参数名
dependsOnGroups	String[]	当前方法依赖的组列表
dependsOnMethods	String[]	当前方法依赖的方法列表
timeOut	long	超时时间,单位毫秒
invocationCount	int	表示执行的次数
threadPoolSize	int	表示线程池内的线程个数
successPercentage	int	当前方法期望的成功率
dataProvider	String	当前测试方法的dataProvider名称
dataProviderClass	Class<?>	当前测试方法用于查找dataProvider的类,
和dataProvider一起出现,
dataPrividerClass中的获取参数方法必须为static,
否则出异常
alwaysRun	boolean	为true时,总是执行,依赖源执行失败,
方法不被标记为Skips
为false时,依赖源执行失败,方法被标记为Skips
description	String	当前方法的描述
expectedExceptions	Class[]	测试方法期望抛出的异常列表
expectedExceptionsMessageRegExp	String	测试方法抛出异常的message信息
suiteName	String	测试套件使用的默认名称
testName	String	测试使用的默认名称
sequential	boolean	为true,当前测试类上的所有方法保证按照顺序运行。
singleThreaded	boolean	为true时,表示在这个测试类中的所有方法
在同一个线程中执行
retryAnalyzer	Class
skipFailedInvocations	boolean	invocationCount>2时,
其为true时,出现异常时,失败一次,其它的为Skips
ignoreMissingDependencies	boolean	为true,找不到依赖继续执行
priority	int	调度优先级。越小的将被优先调用

5 . Testng配置文件说明

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<!-- 当前测试套件名称 -->
<suite name="testNG">
     <!-- 加载第一个测试类 -->
     <!-- name :  当前测试名称 -->
     <!-- verbose:  日子显示级别,0表示不显示,10最高级别 -->
     <!-- enabled:  当前测试是否可用,true 可用,false 不可用 -->
     <test name="testParam" verbose="0" enabled="false">
           <!-- name :  测试方法参数名,value :测试方法参数值 -->
         <parameter name="param0" value="第一个参数"></parameter>
         <parameter name="param1" value="第二个参数"></parameter>
         <classes>
                 <!-- 加载测试类 -->
              <class name="com.zzwx.test.testng.TestNGTestParam"/>
         </classes>
     </test>
    <!-- 加载第二个测试类 -->
    <test name="testGroup" verbose="0" enabled="true" >
           <!-- 加载测试组信息 -->
         <groups>
                 <!-- 添加运行组 -->
              <run>
                       <!-- 需要运行的组名 -->
                   <include name="adminGroup" />
                      <!-- 不需要运行的组名 -->
                   <exclude name="userGroup" />
              </run>
         </groups>
         <classes>
                 <!-- 加载测试类 -->
              <class name="com.zzwx.test.testng.TestNGTestGroup"/>
         </classes>
     </test>
</suite>

6 . 测试

6.1 TestNG simple test

6.1.1 code

package com.zzwx.test.testng;
 
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc TestNG常规测试
 */
publicclass TestNGTest {
 
     /**
      * 开始测试方法前执行的代码
      */
     @BeforeTest
     publicvoid testBefore() {
         System.out.println(this.getClassName() + "before!");
     }
 
     /**
      * 执行测试方法
      */
     @Test
     publicvoid testNgTest() {
         System.out.println("helloTestNg");
     }
 
     /**
      * 测试方法执行后执行的代码
      */
     @AfterTest
     publicvoid testAfter() {
         System.out.println(this.getClassName() + "after!");
     }
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
}

6.1.2 run

6.1.3 result

生成默认的一个testng.xml执行配置

[TestNG] Running:
  C:\Users\Administrator.PC-201603081032\AppData\Local\Temp\testng-eclipse-1037823621\testng-customsuite.xml

TestNGTest before!
hello TestNg
TestNGTest after!
PASSED: testNgTest

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by [email protected]: 15 ms
[TestNG] Time taken by [email protected]: 0 ms
[TestNG] Time taken by [email protected]: 61 ms
[TestNG] Time taken by [email protected]: 11 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 4 ms
[TestNG] Time taken by [email protected]: 16 ms

6.2 TestNG组测试

6.2.1 code

package com.zzwx.test.testng;
 
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc测试分组
 */
publicclass TestNGTestGroup{
 
     @Test(groups = { "adminGroup" })
     publicvoid testGroup1() {
         System.out.println(this.getClassName() + " :adminGroup 1");
     }
 
     @Test(groups = { "adminGroup" })
     publicvoid testGroup11() {
         System.out.println(this.getClassName() + " :adminGroup 2");
     }
 
     @Test(groups = { "userGroup" })
     publicvoid testGroup2() {
         System.out.println(this.getClassName() + " :userGroup 1");
     }
 
     @Test(groups = { "userGroup" })
     publicvoid testGroup22() {
         System.out.println(this.getClassName() + " :userGroup 2");
     }
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
}

6.2.2 xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="testNG_group">
     <!-- TestNG测试组 -->
     <test name="testGroup" verbose="0" enabled="true" >
         <groups>
              <run>
                   <!-- 需要测试的组名 -->
                   <include name="adminGroup" />
                   <!-- 不需要测试的组名 -->
                   <exclude name="userGroup" />
              </run>
         </groups>
         <classes>
              <class name="com.zzwx.test.testng.TestNGTestGroup"/>
         </classes>
     </test>
</suite>

6.2.3 run

选择配置文件 -- > Run As --> TestNG Suite

6.2.4 result

[TestNG] Running:
  D:\workspace\EclipseWorkSpaceTestNG\testNG-parent\testNG-controller\src\test\resources\testng\testng-module\testng-group.xml

TestNGTestGroup : adminGroup 1
TestNGTestGroup : adminGroup 2

===============================================
testNG_group
Total tests run: 2, Failures: 0, Skips: 0
===============================================

6.3 TestNG异常测试

6.3.1 code

package com.zzwx.test.testng;
 
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc异常测试
 */
publicclassTestNGTestException {
 
     @BeforeTest
     publicvoid before() {
         System.out.println(this.getClassName() + "before!");
     }
 
     /**
      * 测试异常,并验证异常信息是否匹配
      */
     @Test(expectedExceptions= NullPointerException.class,expectedExceptionsMessageRegExp = "this is null point")
     publicvoid testException() {
         thrownew NullPointerException("this is null point");
     }
 
     @AfterTest
     publicvoid after() {
         System.out.println(this.getClassName() + "after!");
     }
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
 
}

6.3.2 run

6.3.3 result

[TestNG] Running:
  C:\Users\Administrator.PC-201603081032\AppData\Local\Temp\testng-eclipse-1504143100\testng-customsuite.xml

TestNGTestException before!
TestNGTestException after!
PASSED: testException

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by [email protected]: 15 ms
[TestNG] Time taken by [email protected]: 0 ms
[TestNG] Time taken by [email protected]: 47 ms
[TestNG] Time taken by [email protected]: 16 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by [email protected]: 15 ms

6.4 TestNG 依赖测试

6.4.1 code

package com.zzwx.test.testng;
 
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc TestNG依赖测试
 */
publicclassTestNGTestDepends {
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
 
     /**
      * @alwaysRun = true -- > 依赖源失败后继续执行,方法不被标记为Skips
      * @alwaysRun = false -- > 依赖源失败后继续执行,方法被标记为Skips,
      */
     @Test(alwaysRun = false, dependsOnMethods = { "testNGTestDepends" })
     publicvoid testNGTestBy() {
         System.out.println(this.getClassName() + " -testNGTestBy");
     }
 
     @Test
     publicvoid testNGTestDepends() {
         System.out.println(this.getClassName() + " -testNGTestDepends");
     }
}

6.4.2 run

6.4.3 result

[TestNG] Running:
  C:\Users\Administrator.PC-201603081032\AppData\Local\Temp\testng-eclipse-1236448166\testng-customsuite.xml

TestNGTestDepends - testNGTestDepends
TestNGTestDepends - testNGTestBy
PASSED: testNGTestDepends
PASSED: testNGTestBy

===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 2, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 16 ms
[TestNG] Time taken by [email protected]: 31 ms
[TestNG] Time taken by [email protected]: 0 ms
[TestNG] Time taken by [email protected]: 47 ms
[TestNG] Time taken by [email protected]: 15 ms
[TestNG] Time taken by org.testng.reporters.[email protected]: 0 ms

6.5 TestNG DataProvider参数传递

6.5.1 code

package com.zzwx.test.entity;
 
import org.testng.annotations.DataProvider;
 
publicclass DataAdmin {
 
     @DataProvider(name = "admin")
     publicstatic Object[][] admin() {
         returnnew Object[][] { { 10, "admin10", "adminPwd10", false },
                   {11, "admin11", "adminPwd11", false } };
     }
 
}
package com.zzwx.test.testng;
 
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
 
import com.zzwx.test.entity.Admin;
import com.zzwx.test.entity.DataAdmin;
 
/**
 * @author Roger
 * @desc通过DataProvider传递参数
 */
publicclassTestNGTestDataProvider {
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
 
     /**
      * 参数定义格式必须是一个二维数组,否则抛异常
      * 
      * @return Object[][]
      */
     @DataProvider(name = "user")
     public Object[][] user() {
         returnnew Object[][] { { "line", "linePassword" },
                   {"tomcat", "tomcatPassword" } };
     }
 
     @Test(dataProvider = "user", enabled = false)
     publicvoid testNGTestDataProvider(String name, String password) {
         System.out.println(this.getClassName() + "\t name :" + name
                   +" ; password : " + password);
     }
 
     @Test(dataProvider = "admin",dataProviderClass = DataAdmin.class)
     publicvoid testNGTestDataProviderAdmin(intid,String userName,String password,booleangender) {
         Adminadmin = new Admin();
         admin.setUserName(userName);
         admin.setGender(gender);
         admin.setId(id);
         admin.setPassword(password);
         System.out.println(admin != null ? admin.toString() : " admin isnull");
     }
}

6.5.2 run

6.5.3 result

[TestNG] Running:
  C:\Users\Administrator.PC-201603081032\AppData\Local\Temp\testng-eclipse--224274842\testng-customsuite.xml

TestNGTestDataProvider	 name : line ; password : linePassword
TestNGTestDataProvider	 name : tomcat ; password : tomcatPassword
Admin [id=10, userName=admin10, password=adminPwd10, gender=false]
Admin [id=11, userName=admin11, password=adminPwd11, gender=false]
PASSED: testNGTestDataProvider("line", "linePassword")
PASSED: testNGTestDataProvider("tomcat", "tomcatPassword")
PASSED: testNGTestDataProviderAdmin(10, "admin10", "adminPwd10", false)
PASSED: testNGTestDataProviderAdmin(11, "admin11", "adminPwd11", false)

===============================================
    Default test
    Tests run: 4, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 4, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by [email protected]: 16 ms
[TestNG] Time taken by [email protected]: 0 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by [email protected]: 16 ms
[TestNG] Time taken by [email protected]: 15 ms
[TestNG] Time taken by [email protected]: 47 ms

6.6 TestNG 参数化测试

6.6.1 code

package com.zzwx.test.testng;
 
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc测试参数化
 */
publicclass TestNGTestParam{
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
 
     /**
      * [Parameters] 数组中的参数名必须和testng.xml中的参数名一致,最好的是顺序都一致,以免有影响
      * 
      * @param param0
      *           此处的参数值与配置文件的参数位置第一个等值
      * @param param1
      *           此处的参数值与配置文件的参数位置第二个等值
      */
     @Test
     @Parameters({ "param0", "param1", "intParam", "boolParam" })
     publicvoid testNGTestParam(String param0, String param1, intintParam,
              booleanboolParam) {
         System.out.println(this.getClassName() + " \tparam0 : " + param0
                   +" ; param1 : " + param1 + " ; intParam : " + intParam
                   +" ; boolParam : " + boolParam);
     }
 
}

6.6.2 xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="testNG_param">
     <!-- TestNG 参数化测试 -->
     <test name="testParam" verbose="0" enabled="true">
         <parameter name="param0" value="第一个参数"></parameter>
         <parameter name="param1" value="第二个参数"></parameter>
         <parameter name="intParam" value="1"></parameter>
         <parameter name="boolParam" value="false"></parameter>
         <classes>
              <class name="com.zzwx.test.testng.TestNGTestParam"/>
         </classes>
     </test>
</suite>

6.6.3 run

6.6.4 result

[TestNG] Running:
  D:\workspace\EclipseWorkSpaceTestNG\testNG-parent\testNG-controller\src\test\resources\testng\testng-module\testng-param.xml

TestNGTestParam 	 param0 : 第一个参数 ; param1 : 第二个参数 ; intParam : 1 ; boolParam : false

===============================================
testNG_param
Total tests run: 1, Failures: 0, Skips: 0
===============================================

6.7 TestNG 多线程测试

6.7.1 code

package com.zzwx.test.testng;
 
import java.util.concurrent.atomic.AtomicInteger;
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc TestNG多线程测试
 */
publicclass TestNGTestThread{
 
     privatestatic AtomicInteger sum = newAtomicInteger(1);
 
     privatestaticintb = 0;
 
     /**
      * @threadPoolSize-->表示执行的线程池的大小
      * @invocationCount-->表示执行的次数
      * @timeOut-->超时时间(毫秒)
      */
     @Test(threadPoolSize =3, invocationCount = 10, timeOut = 1000)
     publicvoid testNGTestThread() {
         System.out.println("[ " + this.getcurrentThreadId() + " ]........"
                   +sum.getAndIncrement() + ".........." + (b++));
     }
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
 
     public String getcurrentThreadName() {
         return Thread.currentThread().getName();
     }
 
     publiclong getcurrentThreadId(){
         return Thread.currentThread().getId();
     }
}

6.7.2 run

6.7.3 result

[TestNG] Running:
  C:\Users\Administrator.PC-201603081032\AppData\Local\Temp\testng-eclipse-989053503\testng-customsuite.xml

[ThreadUtil] Starting executor timeOut:1000ms workers:10 threadPoolSize:3
[ 10 ]........1..........0
[ 12 ]........3..........1
[ 11 ]........2..........0
[ 11 ]........4..........2
[ 12 ]........5..........3
[ 11 ]........6..........4
[ 12 ]........7..........5
[ 10 ]........8..........6
[ 11 ]........9..........7
[ 12 ]........10..........8
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread
PASSED: testNGTestThread

===============================================
    Default test
    Tests run: 10, Failures: 0, Skips: 0
===============================================

===============================================
Default suite
Total tests run: 10, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by [email protected]: 64 ms
[TestNG] Time taken by [email protected]: 15 ms
[TestNG] Time taken by [email protected]: 16 ms
[TestNG] Time taken by [email protected]: 15 ms
[TestNG] Time taken by [email protected]: 0 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms

6.8 Main Run TestNG

6.8.1 code

package com.zzwx.test.testng;
 
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
 
/**
 * @author Roger
 * @desc TestNG常规测试
 */
publicclass TestNGTest {
 
     /**
      * 开始测试方法前执行的代码
      */
     @BeforeTest
     publicvoid testBefore() {
         System.out.println(this.getClassName() + "before!");
     }
 
     /**
      * 执行测试方法
      */
     @Test
     publicvoid testNgTest() {
         System.out.println("helloTestNg");
     }
 
     /**
      * 测试方法执行后执行的代码
      */
     @AfterTest
     publicvoid testAfter() {
         System.out.println(this.getClassName() + "after!");
     }
 
     public String getClassName() {
         returnthis.getClass().getSimpleName();
     }
}
package com.zzwx.test.testng;
 
import org.testng.TestNG;
 
/**
 * @author Roger
 * @desc通过Main函数调用TestNG测试方法
 */
publicclass TestMain {
 
     publicstaticvoid main(String[] args) {
 
         TestNGtestng = new TestNG();
         testng.setTestClasses(new Class[]{TestNGTest.class});
         testng.run();
 
     }
}

6.8.2 run

6.8.3 result

[TestNG] Running:
 Command line suite
 
TestNGTest before!
hello TestNg
TestNGTest after!
 
===============================================
Command line suite
Total tests run: 1, Failures: 0,Skips: 0
===============================================
时间: 2024-11-08 21:08:54

TestNG单元测试的相关文章

Eclipse中怎么安装TestNG单元测试框架

在进行使用的eclipse的进行开发的代码中,必然就会需要进行单元测试,在单元测试的情况提供较多的框架单元测试,例如使用junit单元测试,而在国外进行开发较好的单元测试,提供了较好的测试的报告,junit和testng是类似差别上不是很多,而testng提供了较多的功能. 进行常用的eclipse的开发的工具,进行到了eclipse的界面中之后,进行点击菜单中的"Help",弹出下拉菜单中进行选择为install new software的选项. 进入到了install的选项界面中,

TestNG单元测试与使用详解

TestNG的基本注解与执行顺序 在类里编辑程序时,在@Test后面,摁 alt+回车,选择对应的插件,可以把目前用到的插件自动添加到 pom.xml 文件中,如下面的testng,每摁一次,就多添加一次 当使用的类里,用到的方法没有导入类包时,可以在 类的大括号 后面,摁 alt+回车 ,可以自动导入目前的类中,需要用到的类包,如 import org.testng.annotations.Test; 1.注解实战BeforeMethod和AfterMethod @BeforeMethod,在

Java单元测试 - TestNG

官网 Eclipse安装TestNG插件 与Junit相比 从Junit发展而来,开发者就是Junit小组的一个人 Test Suite不再需要硬编码,就像cf自动登录的脚本中一样,可以写到一个xml文件中 Eclipse或STS中需要安装TestNG插件 貌似在线安装网站经常不能用,从eclipse网站拖Install按钮到eclipse中同样经常不能用,可能是代理等问题.可以离线安装,去http://beust.com/eclipse下载 安装了插件后,就可以Run As或者Debug As

TestNG 集成Spring-test

需要集成上一篇博客 <TestNG单元测试> 导包              <dependency>                    <groupId>org.springframework</groupId>                    <artifactId>spring-test</artifactId>                    <version>4.1.9.RELEASE</v

单元测试框架的基本使用介绍

测试人员一般用TestNG来写自动化测试.  开发人员一般用JUnit写单元测试. TestNG 单元测试框架 http://www.cnblogs.com/TankXiao/p/3888070.html

Java后端程序员1年工作经验总结

java后端1年经验和技术总结(1) 1.引言 毕业已经一年有余,这一年里特别感谢技术管理人员的器重,以及同事的帮忙,学到了不少东西.这一年里走过一些弯路,也碰到一些难题,也受到过做为一名开发却经常为系统维护和发布当救火队员的苦恼.遂决定梳理一下自己所学的东西,为大家分享一下. 经过一年意识到以前也有很多认识误区,比如: 偏爱收集,经常收集各种资料视频塞满一个个硬盘,然后心满意足的看着容量不行动. 不重基础,总觉得很多基础东西不需要再看了,其实不懂的地方很多,计算机程序方面任何一个结果都必有原因

junit4框架——webdriver脚本

后续会带来testNG单元测试框架比junit框架更强大: package cn.helloselenium; import org.openqa.selenium.*; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.By; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; impor

自动化基础普及之selenium是啥?

Selenium 并不像QTP那样让人一下子就明白是什么?它是编程人员的最爱,但它却对测试新手产生了很大的阻碍. Selenium 是啥? Selenium RC是啥? Webdriver 又是啥? RC 和 Webdriver 是啥关系? Webdriver 和编程语言啥关系? Selenium 能并行执行脚本嘛? Selenium 能做移动端自动化么? 这里虫师用简单方式,告诉你,他们错综复杂的关系.理顺了它们之间的关系才能真正使用它. Selenium 是什么? Selenium 是web

[译]3-Spring架构

Spring本可以设计成为一个“一站式”的框架(fat jar.uber jar),但是Spring的开发者没有这么做,而是以模块化 的方式开发Spring,这样的话用户就可以根据实际情况引入需要的Spring模块,而不必引入其他模块.本节我们将会 介绍Spring中所有的模块. 概览 Spring4.1.6包括20个模块,如下: Core Container(核心容器) core container包括core模块.beans模块.context模块.SpEL表达式模块,作用分别如下: cor