Ant and TestNG Task example

摘要: In this tutorial, we will show you how to run a TestNG test in Ant build.

In this tutorial, we will show you how to run a TestNG test in Ant build.

1. Run by Classes

build.xml

  <taskdef name="testng" classname="org.testng.TestNGAntTask">
	<classpath location="lib/testng-6.8.14.jar" />
  </taskdef>
  <target name="testng" depends="compile">
	<!-- Assume test.path contains the project library dependencies -->
	<testng classpathref="test.path"
		outputDir="${report.dir}" 
		haltOnFailure="true">
		<!-- Extra project classpath, which is not included in above "test.path" -->
		<!-- Tell Ant where is the project and test classes -->
		<classpath location="${test.classes.dir}" />
		<classpath location="${src.classes.dir}" />
		<!-- Tell Ant what test classes need to run -->
		<classfileset dir="${test.classes.dir}" includes="**/*Test*.class" />
	</testng>
  </target>

2. Run by XML

${resources.dir}/testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">
    <test name="anyname">
	<classes>
		<class name="com.mkyong.test.TestMessage" />
	</classes>
    </test>
</suite>

build.xml

  <taskdef name="testng" classname="org.testng.TestNGAntTask">
	<classpath location="lib/testng-6.8.14.jar" />
  </taskdef>
  <target name="testng" depends="compile">
	<testng classpathref="test.path"
		outputDir="${report.dir}" 
		haltOnFailure="true">
		<classpath location="${test.classes.dir}" />
		<!-- Tell Ant where is testng.xml -->
		<xmlfileset dir="${resources.dir}" includes="testng.xml"/>
	</testng>
  </target>

3. Example

A web application example to show you how to run a set of TestNG tests.

3.1 Return a message

MessageGenerator.java

package com.mkyong.message;
import org.springframework.stereotype.Component;
@Component
public class MessageGenerator {
	public String getWelcomeMessage() {
		return "welcome";

3.2 Two TestNG tests.

TestMessage.java

package com.mkyong.test;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.mkyong.message.MessageGenerator;
public class TestMessage {
	@Test
	public void test_welcome_message() {
		MessageGenerator obj = new MessageGenerator();
		Assert.assertEquals(obj.getWelcomeMessage(), "welcome");

TestMessage2.java

package com.mkyong.test;
import org.testng.Assert;
import org.testng.annotations.Test;
import com.mkyong.message.MessageGenerator;
public class TestMessage2 {
	@Test
	public void test_welcome_message_2() {
		MessageGenerator obj = new MessageGenerator();
		Assert.assertEquals(obj.getWelcomeMessage(), "welcome");

3.3 Use ivy to get the project dependencies, and declares the project scope.

ivy.xml

<ivy-module version="2.0">
	<info organisation="org.apache" module="WebProject" />
	<configurations>
        <conf name="compile" description="Required to compile application"/>
        <conf name="runtime" description="Additional run-time dependencies" extends="compile"/>
        <conf name="test"    description="Required for test only" extends="runtime"/>
    </configurations>
	<dependencies>
		<dependency org="org.testng" name="testng" rev="6.8.14" conf="test->default" />
	</dependencies>
</ivy-module>

3.4 Run unit test

build.xml

<project xmlns:ivy="antlib:org.apache.ivy.ant" 
	name="HelloProject" default="main" basedir=".">
	<description>
		Running TestNG Test 
	</description>
	<!-- Project Structure -->
	<property name="jdk.version" value="1.7" />
	<property name="projectName" value="WebProject" />
	<property name="src.dir" location="src" />
	<property name="test.dir" location="src" />
	<property name="report.dir" location="report" />
	<property name="web.dir" value="war" />
	<property name="web.classes.dir" location="${web.dir}/WEB-INF/classes" />
	<!-- ivy start -->
	<target name="resolve" description="retrieve dependencies with ivy">
		<echo message="Getting dependencies..." />
		<ivy:retrieve />
		<ivy:cachepath pathid="compile.path" conf="compile" />
		<ivy:cachepath pathid="runtime.path" conf="runtime" />
		<ivy:cachepath pathid="test.path" conf="test" />
	</target>
	<!-- Compile Java source from ${src.dir} and output it to ${web.classes.dir} -->
	<target name="compile" depends="init, resolve" description="compile source code">
		<mkdir dir="${web.classes.dir}" />
		<javac destdir="${web.classes.dir}" source="${jdk.version}" 
			target="${jdk.version}" debug="true" includeantruntime="false" classpathref="compile.path">
			<src path="${src.dir}" />
		</javac>
	</target>
	<!-- Run TestNG -->
	<target name="testng" depends="compile">
	  <testng classpathref="test.path"
		outputDir="${report.dir}" 
		haltOnFailure="true">
		<classpath location="${web.classes.dir}" />
		<xmlfileset dir="${resources.dir}" includes="testng.xml"/>
                <!--
		  <classfileset dir="${web.classes.dir}" includes="**/*Test*.class" />
		-->
	  </testng>
	</target>
	<!-- Create folders -->
	<target name="init">
		<mkdir dir="${src.dir}" />
		<mkdir dir="${web.classes.dir}" />
		<mkdir dir="${report.dir}" />
	</target>
	<!-- Delete folders -->
	<target name="clean" description="clean up">
		<delete dir="${web.classes.dir}" />
		<delete dir="${report.dir}" />
	</target>
	<target name="main" depends="testng" />
</project>

${resources.dir}/testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll">
	<test name="example1">
		<classes>
			<class name="com.mkyong.test.TestMessage" />
			<class name="com.mkyong.test.TestMessage2" />
		</classes>
	</test>
</suite>

Run it

$ ant testng

Output

testng:
   [testng] [TestNG] Running:
   [testng]   /Users/mkyong/Documents/workspace/AntSpringMVC/resources/testng.xml
   [testng] 
   [testng] 
   [testng] ===============================================
   [testng] TestAll
   [testng] Total tests run: 2, Failures: 0, Skips: 0
   [testng] ===============================================
   [testng] 
BUILD SUCCESSFUL
Total time: 3 seconds

Done.

References

  1. Ant – TestNG task

  2. Ang and jUnit Task

  3. TestNG – suite test

上一篇: Maven + Cobertura code coverage example
下一篇: Eclipse java.lang.OutOfMemoryError: Java heap space
 评论 ( What Do You Think )
名称
邮箱
网址
评论
验证
   
 

 


  • 微信公众号

  • 我的微信

站点声明:

1、一号门博客CMS,由Python, MySQL, Nginx, Wsgi 强力驱动

2、部分文章或者资源来源于互联网, 有时候很难判断是否侵权, 若有侵权, 请联系邮箱:summer@yihaomen.com, 同时欢迎大家注册用户,主动发布无版权争议的 文章/资源.

3、鄂ICP备14001754号-3, 鄂公网安备 42280202422812号