Page History
Info | ||
---|---|---|
| ||
There is a more up-to-date tutorial using Selenium providing additional capabilities. Please check it instead. |
Overview
In this tutorial, we will create a Java Test class with multiple Test Cases, implemented in Java.
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.xpand.java; import org.testng.Assert; import org.testng.annotations.Test; import org.testng.annotations.BeforeSuite; import org.testng.annotations.AfterSuite; import org.testng.annotations.DataProvider; import org.testng.Reporter; import org.testng.reporters.XMLReporter; import org.testng.ITestResult; import com.xpandit.xpandtestng.annotations.Xray; public class CalcTest { @BeforeSuite public void setUp() throws Exception { } @AfterSuite public void tearDown() throws Exception { } @DataProvider public Object[][] ValidDataProvider() { return new Object[][]{ { 1, 2, 3 }, { 2, 3, 4 }, // error or the data itself :) { -1, 1, 0 } }; } @Test(dataProvider = "ValidDataProvider") @Xray(requirement = "CALC-1234", test = "CALC-1") public void CanAddNumbersFromGivenData(final int a, final int b, final int c) { Assert.assertEquals(Calculator.Add(a, b), c); } @Test @Xray(requirement = "CALC-1234", test = "CALC-2", labels = "core addition") public void CanAddNumbers() { Assert.assertEquals(Calculator.Add(1, 1),2); Assert.assertEquals(Calculator.Add(-1, 1),0); } @Test @Xray(requirement = "CALC-1235", labels = "core") public void CanSubtract() { Assert.assertEquals(Calculator.Subtract(1, 1), 0); Assert.assertEquals(Calculator.Subtract(-1, -1), 0); Assert.assertEquals(Calculator.Subtract(100, 5), 95); } @Test @Xray(requirement = "CALC-1236") public void CanMultiplyX() { Assert.assertEquals(Calculator.Multiply(1, 1), 1); Assert.assertEquals(Calculator.Multiply(-1, -1), 1); Assert.assertEquals(Calculator.Multiply(100, 5), 500); } @Test @Xray(requirement = "CALC-1237") public void CanDivide() { Assert.assertEquals(Calculator.Divide(1, 1), 1); Assert.assertEquals(Calculator.Divide(-1, -1), 1); Assert.assertEquals(Calculator.Divide(100, 5), 20); } @Test public void CanDoStuff() { Assert.assertNotEquals(true, true); } } |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.xpandit.xpandtestng.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * A Custom Annotation to inject additional information into a TestNG Test */ @Retention(RetentionPolicy.RUNTIME) public @interface Xray { String requirement() default ""; String test() default ""; String labels() default ""; } |
...
Code Block | ||
---|---|---|
| ||
com.xpandit.testngxpand.annotations.XrayListener |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
package com.xpandit.xpandtestng.annotations; import java.lang.reflect.Method; import org.testng.IInvokedMethod; import org.testng.IInvokedMethodListener; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestNGMethod; import org.testng.ITestResult; import static java.lang.System.out; import static java.lang.System.err; /** * The listener interface for receiving Xray events. * The Listener can be automatically invoked when TestNG tests are run by using ServiceLoader mechanism. * You can also add this listener to a TestNG Test class by adding * <code>@Listeners({com.xpand.java.XrayAnnotationListener.class})</code> * before the test class * * @see Xray */ public class XrayListener implements IInvokedMethodListener, ITestListener { boolean testSuccess = true; /* (non-Javadoc) * @see org.testng.IInvokedMethodListener#beforeInvocation(org.testng.IInvokedMethod, org.testng.ITestResult) */ public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { if(method.isTestMethod() && annotationPresent(method, Xray.class) ) { testResult.setAttribute("requirement", method.getTestMethod().getConstructorOrMethod().getMethod().getAnnotation(Xray.class).requirement()); testResult.setAttribute("test", method.getTestMethod().getConstructorOrMethod().getMethod().getAnnotation(Xray.class).test()); testResult.setAttribute("labels", method.getTestMethod().getConstructorOrMethod().getMethod().getAnnotation(Xray.class).labels()); } } private boolean annotationPresent(IInvokedMethod method, Class clazz) { boolean retVal = method.getTestMethod().getConstructorOrMethod().getMethod().isAnnotationPresent(clazz) ? true : false; return retVal; } /* (non-Javadoc) * @see org.testng.IInvokedMethodListener#afterInvocation(org.testng.IInvokedMethod, org.testng.ITestResult) */ public void afterInvocation(IInvokedMethod method, ITestResult testResult) { if(method.isTestMethod()) { if( !testSuccess ) { testResult.setStatus(ITestResult.FAILURE); } } } public void onTestStart(ITestResult result) { // TODO Auto-generated method stub } public void onTestSuccess(ITestResult result) { // TODO Auto-generated method stub } public void onTestFailure(ITestResult result) { // TODO Auto-generated method stub } public void onTestSkipped(ITestResult result) { // TODO Auto-generated method stub } public void onTestFailedButWithinSuccessPercentage(ITestResult result) { // TODO Auto-generated method stub } public void onStart(ITestContext context) { } public void onFinish(ITestContext context) { // TODO Auto-generated method stub } } |
...
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.xpand.java</groupId> <artifactId>xpand-test</artifactId> <version>1.0-SNAPSHOT</version> <properties> <!--XRay Properties --> <!--IN PROFILE ~.m2/settings.xml--> <!--<xray.jiraURL></xray.jiraURL> <xray.resultsFormat>JUNIT</xray.resultsFormat> <xray.username>admin</xray.username> <xray.password>123qwe</xray.password>--> <xray.projectKey>CALC</xray.projectKey> <!-- <xray.testExecKey></xray.testExecKey> <xray.testPlanKey></xray.testPlanKey> <xray.testEnvironments></xray.testEnvironments> <xray.revision></xray.revision> --> <xray.surefire.location>${basedir}/target/surefire-reports</xray.surefire.location> <!--End Xray Properties --> </properties> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <debug>true</debug> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version> 2<version>2.20.1</version> <configuration> <testFailureIgnore>true</testFailureIgnore> <suiteXmlFiles> <suiteXmlFile>testng.xml</suiteXmlFile> </suiteXmlFiles> <properties> <property> <name>reporter</name> <value>org.testng.reporters.XMLReporter:generateTestResultAttributes=true,generateGroupsAttribute=true</value> </property> </properties> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6<version>7.4.11<0</version> <scope>test</scope> </dependency> <dependency> <groupId>com.xpandit.xray</groupId> <artifactId>xray-maven-plugin</artifactId> <version>1.0.0</version> <scope>test</scope> </dependency> </dependencies> <repositories> <repository> <id>xpandit</id> <name>xpand-releases</name> <url>http://maven.xpand-it.com/artifactory/releases</url> <releases> <enabled>true</enabled> </releases> </repository> </repositories> <reporting> <plugins> <plugin> <artifactId>maven-surefire-report-plugin</artifactId> </plugin> <plugin> <groupId>com.xpandit.xray</groupId> <artifactId>xray-maven-plugin</artifactId> <version>1.01.0</version> </plugin> </plugins> </reporting> </project> |
...