- 浏览: 1230800 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
lankk:
lankk 写道事实上,在运行String s1=new St ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
事实上,在运行String s1=new String(&qu ...
理解String 及 String.intern() 在实际中的应用 -
lankk:
同意1楼的说法http://docs.oracle.com/j ...
理解String 及 String.intern() 在实际中的应用 -
raoyutao:
...
jdk 线程池 ThreadPoolExecutor -
hongdanning:
理解了。之前困惑的一些明白了。谢谢分享。
理解String 及 String.intern() 在实际中的应用
1.overview
TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use, such as:
- JDK 5 Annotations (JDK 1.4 is also supported with JavaDoc annotations).
- Support for data-driven testing (with @DataProvider ).
- Support for parameters.
- Embeds BeanShell for further flexibility.
- Default JDK functions for runtime and logging (no dependencies).
- Dependent methods for application server testing.
Here is a very simple test:
package example1;
import org.testng.annotations.*;
public class SimpleTest {
@BeforeClass
public void setUp() {
// code that will be invoked when this test is instantiated
}
@Test(groups = { "fast" })
public void aFastTest() {
System.out.println("Fast test");
}
@Test(groups = { "slow" })
public void aSlowTest() {
System.out.println("Slow test");
}
}
ant.xml
<project default="test">
<path id="cp">
<pathelement location="lib/testng-testng-4.4-jdk15.jar"/>
<pathelement location="build"/>
</path>
<taskdef name="testng" classpathref="cp"
classname="org.testng.TestNGAntTask" />
<target name="test">
<testng classpathref="cp" groups="fast">
<classfileset dir="build" includes="example1/*.class"/>
</testng>
</target>
</project>
Here is a quick overview of the annotations available in TestNG along with their attributes.
@BeforeSuite |
Configuration
information for a TestNG class:
|
|
|
alwaysRun |
For
before methods (beforeSuite, beforeTest, beforeTestClass and
beforeTestMethod, but not beforeGroups): If set to true, this configuration
method will be run regardless of what groups it belongs to. |
|
dependsOnGroups |
The list of groups this method depends on. |
|
dependsOnMethods |
The list of methods this method depends on. |
|
enabled |
Whether methods on this class/method are enabled. |
|
groups |
The list of groups this class/method belongs to. |
|
inheritGroups |
If true, this method will belong to groups specified in the @Test annotation at the class level. |
|
||
@DataProvider |
Marks a method as supplying data for a test method. The annotated method must return an Object[][] where each Object[] can be assigned the parameter list of the test method. The @Test method that wants to receive data from this DataProvider needs to use a dataProvider name equals to the name of this annotation. |
|
|
name |
The name of this DataProvider. |
|
||
@Factory |
Marks a method as a factory that returns objects that will be used by TestNG as Test classes. The method must return Object[]. |
|
|
||
@Parameters |
Describes how to pass parameters to a @Test method. |
|
|
value |
The list of variables used to fill the parameters of this method. |
|
||
@Test |
Marks a class or a method as part of the test. |
|
|
alwaysRun |
If set to true, this test method will always be run even if it depends on a method that failed. |
|
dataProvider |
The name of the data provider for this test method. |
|
dataProviderClass |
The class where to look for the data provider. If not specified, the data provider will be looked on the class of the current test method or one of its base classes. If this attribute is specified, the data provider method needs to be static on the specified class. |
|
dependsOnGroups |
The list of groups this method depends on. |
|
dependsOnMethods |
The list of methods this method depends on. |
|
description |
The description for this method. |
|
enabled |
Whether methods on this class/method are enabled. |
|
expectedExceptions |
The list of exceptions that a test method is expected to throw. If no exception or a different than one on this list is thrown, this test will be marked a failure. |
|
groups |
The list of groups this class/method belongs to. |
|
invocationCount |
The number of times this method should be invoked. |
|
invocationTimeOut |
The maximum number of milliseconds this test should take for the cumulated time of all the invocationcounts. This attribute will be ignored if invocationCount is not specified. |
|
successPercentage |
The percentage of success expected from this method |
|
sequential |
If set to true, all the methods on this test class are guaranteed to run sequentially, even if the tests are currently being run with parallel="methods". This attribute can only be used at the class level and it will be ignored if used at the method level. |
|
timeOut |
The maximum number of milliseconds this test should take. |
|
threadPoolSize |
The
size of the thread pool for this method. The method will be invoked from
multiple threads as specified by invocationCount. |
3. Test groups
public class Test1 {
@Test(groups = { "functest", "checkintest" })
public void testMethod1() {
}
@Test(groups = {"functest", "checkintest"} )
public void testMethod2() {
}
@Test(groups = { "functest" })
public void testMethod3() {
}
}
Invoking TestNG with
<test name="Test1">
<groups>
<run>
<include name="functest"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
a test method or class could be unit test, dao test, regression test at the same time.
Here is another example, using regular expressions this time. Assume that some of your test methods should not be run on Linux, your test would look like:
@Test
public class Test1 {
@Test(groups = { "windows.checkintest" })
public void testWindowsOnly() {
}
@Test(groups = {"linux.checkintest"} )
public void testLinuxOnly() {
}
@Test(groups = { "windows.functest" )
public void testWindowsToo() {
}
}
You could use the following testng.xml to launch only the Windows methods:
<test name="Test1">
<groups>
<run>
<include name="windows.*"/>
</run>
</groups>
<classes>
<class name="example1.Test1"/>
</classes>
</test>
Note: TestNG uses regular expressions , and not wildmats . Be aware of the difference (for example, "anything" is matched by ".*" -- dot star -- and not "*").
You can also exclude or include individual methods:
<test name="Test1">
<classes>
<class name="example1.Test1">
<methods>
<include name=".*enabledTestMethod.*"/>
<exclude name=".*brokenTestMethod.*"/>
</methods>
</class>
</classes>
</test>
You can define groups at the class level and then add groups at the method level:
@Test(groups = { "checkin-test" })
public class All {
@Test(groups = { "func-test" )
public void method1() { ... }
public void method2() { ... }
}
In this class, method2() is part of the group "checkin-test", which is defined at the class level, while method1() belongs to both "checkin-test" and "func-test".
@Parameters({ "first-name" })
@Test
public void testSingleString(String firstName) {
System.out.println("Invoked testString " + firstName);
assert "Cedric".equals(firstName);
}
<suite name="My suite">
<parameter name="first-name"
value="Cedric"/>
<test name="Simple example">
<-- ... -->
The same technique can be used for @Before/After and @Factory annotations:
@Parameters({ "datasource", "jdbcDriver" })
@BeforeMethod
public void beforeTest(String ds, String driver) {
m_dataSource = ...;
// look up the value of datasource
m_jdbcDriver = driver;
}
@Parameters("db")
@Test
public void testNonExistentParameter(@Optional("mysql") String db) { ... }
If no parameter named "db" is found in your testng.xml file, your test method will receive the default value specified inside the @Optional annotation: "mysql".
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
{ "Cedric", new Integer(36) },
{ "Anne", new Integer(37)},
};
}
@Test(dataProvider = "test1")
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
will print
Cedric 36
Anne 37
@Test(dataProvider = "test1",invocationCount=3)
public void verifyData1(String n1, Integer n2) {
System.out.println(n1 + " " + n2);
}
Total tests run: 6, Failures: 0, Skips: 0
By default, the data provider will be looked for in the current test class or one of its base classes. If you want to put your data provider in a different class, it needs to be a static method and you specify the class where it can be found in the dataProviderClass attribute:
public static class StaticProvider {
@DataProvider(name = "create")
public static Object[][] createData() {
return new Object[][] {
new Object[] { new Integer(42) }
}
}
}
public class MyTest {
@Test(dataProvider = "create", dataProviderClass = StaticProvider.class)
public void test(Integer n) {
// ...
}
}
ps. StaticProvider 类 不一定必须是static, 方法必须是static
dataprovider提供的是一个二维数组,只算count一次
new Object[][] {
{ "Cedric", new Integer(36) }, 一组测试数据
{ "Anne", new Integer(37)},
一组测试数据
};
@DataProvider(parallel = true)
dependent on method
@Test
public void serverStartedOk() {}
@Test(dependsOnMethods = { "serverStartedOk" })
public void method1() {}
dependent on group
@Test(groups = { "init" })
public void serverStartedOk() {}
@Test(groups = { "init" })
public void initEnvironment() {}
@Test(dependsOnGroups = { "init.* })
public void method1() {}
public class WebTestFactory {
@Factory
public Object[] createInstances() {
Object[] result = new Object[10];
for (int i = 0; i < 10; i++) {
result[i] = new WebTest(i * 10);
return result;
}
}
public class WebTest {
private int m_numberOfTimes;
public WebTest(int numberOfTimes) {
m_numberOfTimes = numberOfTimes;
}
@Test
public void testServer() {
for (int i = 0; i < m_numberOfTimes; i++) {
// access the web page
}
}
}
@Test(threadPoolSize = 3, invocationCount = 10,
timeOut = 10000)
public void testServer() {
java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs testng.xml
java -classpath testng.jar;%CLASSPATH% org.testng.TestNG -d test-outputs test-outputs\testng-failed.xml
相关推荐
TestNG 是一个强大的自动化测试框架,受到JUnit和NUnit的启发,但增加了许多创新特性,使其更适合各种测试需求,包括单元、功能、端到端和集成测试。TestNG需要Java Development Kit (JDK) 5或更高版本才能运行。本...
TestNG 是一个强大的自动化测试框架,受到 JUnit 和 NUnit 的启发,但在功能和灵活性上有所增强,特别适合进行单元测试、功能测试、端到端测试和集成测试。它需要 JDK 5 或更高版本来运行。TestNG 的设计目标是为...
### TestNG 学习笔记概览 #### 一、JUnit 的局限性与 TestNG 的优势 ##### JUnit 缺陷概述 - **最初的用途限制**:JUnit 最初被设计为一个仅适用于单元测试的框架,但随着时间的发展,其功能已扩展至支持多种类型...
TestNG自动测试框架是当今流行的自动化测试框架之一 它可以帮助自动化测试工程师把精力集中在编写和实施测试用例和测试脚本上,提升软件测试执行和回归测试效率 分成4大模块 第一模块java 基础知识:JDK安装以及环境...
### Selenium+Eclipse+JUnit+TestNG自动化测试学习笔记 #### 一、环境搭建与配置 **1. 安装 JDK** - **版本**: JDK 1.7 - **下载地址**: ...
11. **单元测试与集成测试**:为了确保代码质量,项目可能包含了JUnit或TestNG进行单元测试,而Spring Boot提供的MockMvc可用于模拟HTTP请求进行集成测试。 12. **版本控制**:项目可能使用Git进行版本控制,便于...
测试是任何软件项目的重要组成部分,可能会使用JUnit或TestNG进行单元测试,确保每个独立的代码模块都能正常工作。而Spring Boot自带的MockMVC可以用来进行模拟HTTP请求的集成测试。 在部署方面,项目可能使用...
- **spring-test**:提供了对 JUnit 或 TestNG 进行集成测试的支持。 - **junit**:一个常用的单元测试框架。 ### 二、数据库访问 #### Spring JDBC 模块 - **spring-jdbc**:提供了对 JDBC 的封装,使得数据访问...
5. **自动化测试**:随着敏捷开发的普及,自动化测试工具如Selenium、JUnit、TestNG、Appium等的使用变得尤为重要。笔记会介绍如何创建测试脚本,进行回归测试,以及持续集成。 6. **性能测试**:包括负载测试、...
- 创建TestNG测试类:在Package中创建一个TestNG测试类,使用注解`@BeforeMethod`和`@AfterMethod`来定义测试前后的操作。 **编写测试代码** 1. 引入必要的类库,如`org.openqa.selenium.WebDriver`,`org.openqa....
- **测试工具**:JUnit、TestNG 等工具用于进行单元测试和集成测试。 - **项目库**:Maven Central Repository 等仓库提供大量的 Java 项目依赖。 - **论坛与文档**:Stack Overflow、Oracle Java 文档等资源对于...
Eclipse、IntelliJ IDEA等IDE为Java开发提供了强大的集成环境,Maven或Gradle用于项目构建和依赖管理,Junit、TestNG等支持单元测试。 本Java体系笔记覆盖了从基础知识到高级特性的全面内容,帮助读者建立扎实的...
4. **开发工具**:标签中的"工具"可能指的是开发者在Web开发过程中使用的各种辅助软件,如IDE(IntelliJ IDEA、Eclipse)、版本控制系统(Git)、构建工具(Maven、Gradle)、调试器、测试框架(JUnit、TestNG)等。...
5. **测试框架集成**:Selenium可以与JUnit、TestNG等测试框架结合,构建更复杂的测试套件。这样,你可以编写结构化的测试用例,方便管理和执行。 6. **浏览器模拟**:Selenium支持多种浏览器,如Chrome、Firefox、...
- **Test**:支持测试Spring应用,包括JUnit和TestNG集成。 2. **Spring框架的搭建** 搭建Spring环境首先需要引入必要的依赖库,例如:aopalliance、commons-logging、spring-aop、spring-beans、spring-context...
5. 自动化测试套件:组织和管理多个测试用例,便于执行整个测试流程,例如JUnit或TestNG。 6. 报告和日志:提供详尽的测试结果,包括通过、失败、错误等信息,有助于问题定位和持续改进。 7. 集成与协作:与版本...
同时,IDEA也支持JUnit和TestNG等单元测试框架,方便进行测试编写和运行。 9. **插件安装**: IDEA的扩展性极强,可以在"File" -> "Settings" -> "Plugins"中搜索并安装各种插件,以满足特定需求,如Lombok插件、...
软件测试学习笔记001 software testing是软件生命周期中的一种质量保证活动,旨在评估软件产品是否满足要求和预期结果。software testing是软件开发过程中的一个重要步骤,可以帮助开发团队发现和修复软件中的错误...