


@Test(groups="method1")public void testingMethod1() {System.out.println("Method - testingMethod1()");}@Test(groups="method2")public void testingMethod2() {System.out.println("Method - testingMethod2()");}@Test(groups="method1")public void testingMethod1_1() {System.out.println("Method - testingMethod1_1()");}@Test(groups="method3")public void testingMethod3() {System.out.println("Method - testingMethod3()");}
<suite name="My test suite"><test name="testing"><groups><run><include name="method1"/></run></groups><classes><class name="com.super.qa.demoTestng.TestNGTest" ></classes></test></suite>
@Testpublic void method1() {System.out.println("This is method 1");}@Test(dependsOnMethods={"method1"})public void method2() {System.out.println("This is method 2");}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"><test name="test1" preserve-order="true"><classes><class name="super.qa.TestNGLearn1"><methods><include name="TestNgLearn3" ><include name="TestNgLearn1" ><include name="TestNgLearn2" ></methods></class></classes></test></suite>
package super.qa;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class ParameterizedTest1 {@Test@Parameters("test1")public void ParaTest(String test1){System.out.println("This is " + test1);}}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" ><suite name="Suite1"><parameter name="test1" value="A" ><parameter name="test2" value="B" ><test name="test"><classes><class name="super.qa.ParameterizedTest1" ></classes></test></suite>
@Listeners({ OSFilter.class, ProgressTracker.class })public class SampleTest {@Test(groups = { OSNames.OS_LINUX })public void test1() {sleep(5000);System.out.println(">>>test1");}}
java org.testng.TestNG -listener MyListener testng1.xml [testng2.xml testng3.xml ...]
package ec.qa.autotest.ui.testng.listener;import org.testng.IRetryAnalyzer;import org.testng.ITestResult;import org.testng.Reporter;import ec.qa.autotest.ui.constants.CommonConstants;import ec.qa.autotest.ui.testbase.TestBase;public class RetryToRunCase implements IRetryAnalyzer{private int retryCount = 1;private static int maxRetryCount;public int getRetryCount() {return retryCount;}public static int getMaxRetryCount() {return maxRetryCount;}@SuppressWarnings("static-access")public RetryToRunCase(){this.maxRetryCount = CommonConstants.RETRY_COUNT;}public boolean retry(ITestResult result) {if (retryCount <= maxRetryCount) {Reporter.setCurrentTestResult(result);TestBase.success = false;retryCount++;return true;}return false;}}
package ec.qa.autotest.ui.testng.listener;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;import java.util.Iterator;import java.util.Set;import org.testng.IAnnotationTransformer;import org.testng.IRetryAnalyzer;import org.testng.ITestContext;import org.testng.ITestListener;import org.testng.ITestResult;import org.testng.annotations.ITestAnnotation;public class TestngRetryListener implements IAnnotationTransformer,ITestListener {@SuppressWarnings("rawtypes")public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) {IRetryAnalyzer retry = annotation.getRetryAnalyzer();if (retry == null) {annotation.setRetryAnalyzer(RetryToRunCase.class);}}public void onFinish(ITestContext testContext) {ArrayList<ITestResult> testsToBeRemoved = new ArrayList<ITestResult>();Set<Integer> passedTestIds = new HashSet<Integer>();for (ITestResult passedTest : testContext.getPassedTests().getAllResults()) {passedTestIds.add(getId(passedTest));}Set<Integer> failedTestIds = new HashSet<Integer>();for (ITestResult failedTest : testContext.getFailedTests().getAllResults()) {int failedTestId = getId(failedTest);if (failedTestIds.contains(failedTestId) || passedTestIds.contains(failedTestId)) {testsToBeRemoved.add(failedTest);} else {failedTestIds.add(failedTestId);}}for (Iterator<ITestResult> iterator = testContext.getFailedTests().getAllResults().iterator(); iterator.hasNext();) {ITestResult testResult = iterator.next();if (testsToBeRemoved.contains(testResult)) {iterator.remove();}}}private int getId(ITestResult result) {int id = result.getTestClass().getName().hashCode();id = id + result.getMethod().getMethodName().hashCode();id = id + (result.getParameters() != null ? Arrays.hashCode(result.getParameters()) : 0);return id;}public void onTestFailure(ITestResult result) {}public void onTestSuccess(ITestResult result) {TODO Auto-generated method stub}...}
import org.testng.Assert;import org.testng.annotations.Test;public class SampleTest {@Testpublic void testMethodOne(){Assert.assertTrue(true);}@Testpublic void testMethodTwo(){Assert.assertTrue(false);}@Test(dependsOnMethods={"testMethodTwo"})public void testMethodThree(){Assert.assertTrue(true);}}
import java.util.List;import java.util.Map;import org.testng.IReporter;import org.testng.ISuite;import org.testng.ISuiteResult;import org.testng.ITestContext;import org.testng.xml.XmlSuite;public class CustomReporter implements IReporter{@Overridepublic void generateReport(List xmlSuites, List suites, String outputDirectory) {Iterating over each suite included in the testfor (ISuite suite : suites) {Following code gets the suite nameString suiteName = suite.getName();Getting the results for the said suiteMap suiteResults = suite.getResults();for(ISuiteResult sr : suiteResults.values()) {ITestContext tc = sr.getTestContext();System.out.println("Passed tests for suite '" + suiteName + "' is:" + tc.getPassedTests().getAllResults().size());System.out.println("Failed tests for suite '" + suiteName + "' is:" + tc.getFailedTests().getAllResults().size());System.out.println("Skipped tests for suite '" + suiteName + "' is:" + tc.getSkippedTests().getAllResults().size());}}}}
<?xml version="1.0" encoding="UTF-8"?><suite name="Simple Reporter Suite"><listeners><listener class-name="CustomReporter" ></listeners><test name="Simple Reporter test"><classes><class name="SampleTest" ></classes></test></suite>
===============================================Simple Reporter Suite Total tests run: 3, Failures: 1, Skips: 1===============================================Passed tests for suite 'Simple Reporter Suite' is:1Failed tests for suite 'Simple Reporter Suite' is:1Skipped tests for suite 'Simple Reporter Suite' is:1
java org.testng.TestNG -suitethreadpoolsize 3 testng1.xml testng2.xml testng3.xml
<suite name="Testng Parallel Test" parallel="tests" thread-count="5"><suite name="Testng Parallel Test" parallel="classes" thread-count="5"><suite name="Testng Parallel Test" parallel="methods" thread-count="5">
import org.testng.annotations.DataProvider;import testdata.ScenarioTestData;public class ScenarioDataProvider {@DataProvider(name = "hadoopTest", parallel=true)public static Object [][] hadoopTest(){return new Object[][]{ScenarioTestData.hadoopMain,ScenarioTestData.hadoopRun,ScenarioTestData.hadoopDeliverProps};}@DataProvider(name = "sparkTest", parallel=true)public static Object [][] sparkTest(){return new Object[][]{ScenarioTestData.spark_java_version_default,ScenarioTestData.spark_java_version_162,ScenarioTestData.spark_java_version_200,ScenarioTestData.spark_python};}@DataProvider(name = "sqoopTest", parallel=true)public static Object [][] sqoopTest(){return new Object[][]{ScenarioTestData.sqoop_mysql2hive,ScenarioTestData.sqoop_mysql2hdfs};}}
<suitename="Testng Parallel Test"parallel="methods"thread-count="5"data-provider-thread-count="20" >
@Test(enabled=true, dataProvider="testdp", threadPoolSize=5, invocationCount=10)
package testng.parallel.test;import java.text.SimpleDateFormat;import java.util.Date;import org.testng.annotations.AfterClass;import org.testng.annotations.BeforeClass;import org.testng.annotations.DataProvider;import org.testng.annotations.Test;public class TestClass1 {private SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式@BeforeClasspublic void beforeClass(){System.out.println("Start Time: " + df.format(new Date()));}@Test(enabled=true, dataProvider="testdp", threadPoolSize=2, invocationCount=5)public void test(String dpNumber) throws InterruptedException{System.out.println("Current Thread Id: " + Thread.currentThread().getId() + ". Dataprovider number: "+ dpNumber);Thread.sleep(5000);}@DataProvider(name = "testdp", parallel = true)public static Object[][]testdp(){return new Object[][]{{"1"},{"2"}};}@AfterClasspublic void afterClass(){System.out.println("End Time: " + df.format(new Date()));}}
wStart Time: 2018-09-24 14:10:43[ThreadUtil] Starting executor timeOut:0ms workers:5 threadPoolSize:2Current Thread Id: 14. Dataprovider number: 2Current Thread Id: 15. Dataprovider number: 2Current Thread Id: 12. Dataprovider number: 1Current Thread Id: 13. Dataprovider number: 1Current Thread Id: 16. Dataprovider number: 1Current Thread Id: 18. Dataprovider number: 1Current Thread Id: 17. Dataprovider number: 2Current Thread Id: 19. Dataprovider number: 2Current Thread Id: 21. Dataprovider number: 2Current Thread Id: 20. Dataprovider number: 1End Time: 2018-09-24 14:10:58
TestNG官方文档 http://testng.org/doc/documentation-main.html



搜集总结于网络,联系侵删!


文章转载自唤我三郎便可,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




