`
longgangbai
  • 浏览: 7331943 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

TestNG简单的学习(二)参数化测试并发且多方法测试方法判定

阅读更多

TestNG官方网站:

http://testng.org/doc/documentation-main.html

 

官方文档:

5.6.2 - Parameters with DataProviders

Specifying parameters in testng.xml might not be sufficient if you need to pass complex parameters, or parameters that need to be created from Java (complex objects, objects read from a property file or a database, etc...). In this case, you can use a Data Provider to supply the values you need to test. A Data Provider is a method on your class that returns an array of array of objects. This method is annotated with @DataProvider:

 

Java

 

//This method will provide data to
any test method that declares that its Data Provider
//is named "test1"
@DataProvider(name = "test1")
public Object[][] createData1() {
return new Object[][] {
   {
"Cedric",
new Integer(36) },
   {
"Anne",
new Integer(37)}, 
};
}
 
//This test method declares that
its data should be supplied by the Data Provider
//named "test1"
@Test(dataProvider = "test1")
public void verifyData1(String n1,
Integer n2) {
System.out.println(n1 + "
"
+ n2);
}

will print

Cedric 36
Anne
37

A @Test method specifies its Data Provider with the dataProvider attribute. This name must correspond to a method on the same class annotated with @DataProvider(name="...") with a matching name.

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:

 

StaticProvider.java

 

public 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) {
    //
...
  }
}

The Data Provider method can return one of the following two types:

  • An array of array of objects (Object[][]) where the first dimension's size is the number of times the test method will be invoked and the second dimension size contains an array of objects that must be compatible with the parameter types of the test method. This is the cast illustrated by the example above.
  • An Iterator<Object[]>. The only difference with Object[][] is that an Iterator lets you create your test data lazily. TestNG will invoke the iterator and then the test method with the parameters returned by this iterator one by one. This is particularly useful if you have a lot of parameter sets to pass to the method and you don't want to create all of them upfront.

Here is an example of this feature:

@DataProvider(name = "test1")
public Iterator<Object[]> createData() {
  return new MyIterator(DATA);
}

If you declare your @DataProvider as taking a java.lang.reflect.Method as first parameter, TestNG will pass the current test method for this first parameter. This is particularly useful when several test methods use the same @DataProvider and you want it to return different values depending on which test method it is supplying data for.

For example, the following code prints the name of the test method inside its @DataProvider:

 

@DataProvider(name = "dp")
public Object[][] createData(Method m) {
  System.out.println(m.getName());  // print test method name
  return new Object[][] { new Object[] { "Cedric" }};
}
 
@Test(dataProvider = "dp")
public void test1(String s) {
}
 
@Test(dataProvider = "dp")
public void test2(String s) {
}

and will therefore display:

test1
test2

Data providers can run in parallel with the attribute parallel:

@DataProvider(parallel = true)
//
...

Parallel data providers running from an XML file share the same pool of threads, which has a size of 10 by default. You can modify this value in the <suite> tag of your XML file:

<suite name="Suite1" data-provider-thread-count="20" >
...

If you want to run a few specific data providers in a different thread pool, you need to run them from a different XML file.

5.6.3 - Parameters in reports

Parameters used to invoke your test methods are shown in the HTML reports generated by TestNG. Here is an example:

 

       在测试中如果参数数据集被多个测试方法调用并且并发情况下,我们怎么知道是那个方法执行了出现错误呢?那么我们可以采用带参数的数据集测试即可。

package com.easyway.testng;

import java.lang.reflect.Method;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * 
 * 参数化测试,并发且指定方法的Method用于在测试时候判断执行的方法的名称。
 * 
 * @author longgangbai
 * 2013-11-19  下午2:49:25
 *
 */
public class DynamicDataTest {
	@DataProvider(name = "dp",parallel=true)  
	public Object[][] createData(Method m) {
		//用于在数据集合在多个测试方法使用时候知道那个方法调用。
	  System.out.println(m.getName());  // print test method name  
	  return new Object[][] { new Object[] { "Cedric" }};  
	}  

	   
	@Test(dataProvider = "dp")  
	public void test1(String s) {  
	}  

	   

	@Test(dataProvider = "dp")  
	public void test2(String s) {  
	} 

}

 

 测试结果:

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

test1
test2
PASSED: test1("Cedric")
PASSED: test2("Cedric")

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


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

[TestNG] Time taken by org.testng.reporters.XMLReporter@33a6b8: 10 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@a14c53: 0 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@17035c6: 20 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@773a1: 0 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@94837a: 0 ms

分享到:
评论

相关推荐

    java+selenium+testng参数化打开百度搜索

    我们定义了一个名为 `testng` 的测试方法,该方法将读取 Xml 配置文件中的参数并实现自动化测试。 在测试方法中,我们首先获取了 Xml 配置文件中的参数,然后使用这些参数来实现自动化测试。我们使用 Selenium ...

    java+selenium+maven+testng自动化测试框架实例(实际项目)

    **TestNG**: TestNG是另一个流行的测试框架,提供了比JUnit更高级的功能,如并发测试、参数化测试、测试套件和报告。TestNG可以和Selenium结合使用,用于组织和运行测试用例,以及生成详细的测试报告。它支持注解,...

    集成 Jenkins 和 TestNG 实现自助式自动化测试平台

    ### 集成 Jenkins 和 ...综上所述,通过集成Jenkins和TestNG,可以构建一个高效、灵活且易于维护的“自助式”自动化测试平台。这一方案不仅能提高测试效率,还能降低维护成本,非常适合于大型项目的自动化测试场景。

    全栈自动化测试实战 基于testng,httpclient,selenium.appium

    此外,TestNG还支持并发测试,可以同时运行多个测试,提高了测试效率。在实际项目中,我们可以利用TestNG创建详细的测试报告,以便分析测试结果和定位问题。 HttpClient是Apache开源项目的一个组件,主要用于发送...

    TestNG接口自动化测试步骤.pptx

    TestNG是一款强大的自动化测试框架,尤其适用于接口自动化测试。它提供了丰富的注解、灵活的测试配置和报告功能,使得测试工作更加高效。以下是对TestNG接口自动化测试的详细步骤的阐述: 1. **环境准备**:首先,...

    testng测试报告模板BeautifulReport.7z

    总而言之,这个压缩包提供了一套完整的解决方案,帮助TestNG用户生成美观且定制化的测试报告,提升测试过程的专业性和效率。通过深入理解和运用这些资源,你可以更好地管理和优化你的测试框架,确保测试过程的透明度...

    基于java+testng+数据库的接口自动化测试.zip

    在接口自动化测试领域,Java、TestNG和数据库的结合是一个常用且强大的组合。这个压缩包“基于java+testng+数据库的接口自动化测试.zip”很可能包含了一套完整的接口自动化测试框架,用于验证后端服务的功能性和数据...

    java测试新技术-TestNG和高级概念

    6. 参数化测试(Parameterized Tests):TestNG支持参数化测试,允许使用参数化数据来运行同一个测试方法多次。这可以用来测试同一方法在不同输入下的行为,从而提高测试覆盖率。 7. 数据提供者(Data Providers):...

    Maven+Selenium+TestNG+TestNG-xslt实现数据驱动测试框架

    TestNG 是一个功能强大的测试框架,它扩展了JUnit的功能,提供了更多高级特性,如并发测试、参数化测试、分组测试和报告生成。在这个数据驱动测试框架中,TestNG用于组织测试用例和执行它们。通过使用TestNG的`@Test...

    testNG单元测试学习总结

    ### TestNG单元测试学习总结 #### 一、TestNG框架简介 **1.1 概念** TestNG(Test Next Generation)是一个高级测试框架,它继承了JUnit与NUnit的优点,并在此基础上添加了许多新的功能。TestNG是一个开源的、...

    Appium+TestNG自动化测试

    Appium+TestNG自动化测试是现代移动应用测试领域中一种高效的方法,尤其在Android平台上。这个主题涵盖了如何结合这两个强大的工具来构建一个自动化测试框架,从而提高测试效率和质量。 Appium是一个开源的自动化...

    Httpclient+testng接口测试小例子

    在"FirstAPITest"这个文件中,很可能是包含了一个或多个具体的接口测试用例,每个用例对应一个TestNG的测试方法。通过运行这个测试类,我们可以验证所测试接口的功能是否符合预期。 总之,结合HttpClient的强大功能...

    TestNG-6.3 测试框架

    总的来说,TestNG 6.3是一个强大且灵活的测试框架,它的特性如并行测试、丰富的注解、测试分组、参数化测试以及详细的报告,使得它在软件测试领域具有很高的价值。对于正在学习和使用TestNG的开发者来说,深入理解并...

    spring集成TestNG与Mockito框架单元测试方法.pdf

    Spring集成TestNG与Mockito框架单元测试方法的文档详细介绍了如何在Java Spring项目中,利用TestNG和Mockito框架进行单元测试。这种测试方法可以帮助开发者快速上手单元测试,并确保代码质量。文档涉及了多个方面,...

    JAVA 接口自动化测试Demo_testng

    主要对举例对国家气象局接口自动化测试进行讲解(Get请求及结果断言),以达到自动化测试入门目的,需要有一定的JAVA知识(HTTP相关)。

    Java测试新技术:TestNG和高级概念

    7. **数据驱动测试**:通过@DataProvider,TestNG可以为测试方法提供多组输入数据,实现数据驱动的测试,方便进行参数化测试。 8. **配置方法**:@Before/After系列注解允许定义在测试执行前后的配置方法,如初始化...

    TestNG中文手册学习笔记

    TestNG 是一个强大的自动化测试框架,受到 JUnit 和 NUnit 的启发,但在功能和灵活性上有所增强,特别适合进行单元测试、功能测试、端到端测试和集成测试。它需要 JDK 5 或更高版本来运行。TestNG 的设计目标是为...

    spring集成TestNG与Mockito框架单元测试方法

    TestNG是一个强大的测试框架,它扩展了JUnit的功能,提供了更灵活的测试配置,如并发测试、更丰富的注解、更详尽的测试报告等。首先,你需要在你的项目中引入TestNG的依赖。在Maven项目中,可以在pom.xml文件中添加...

Global site tag (gtag.js) - Google Analytics