1)利用ANT来自动化执行测试用例,并优化testNG报告
TestNG有三种运行测试用例的方式:
1、使用testng.xml文件
2、使用ant
3、使用命令行的方式
这里介绍下前两种方式。
下载testNG-xslt(用于优化testNG报告):
1. 下载地址:http://www.antepedia.com/detail/p/testng-xslt.html
2. 解压后把saxon-8.7.jar放到project的libs目录下
3. 然后再把testng-results.xsl 放到工程的test-output 目录下
安装ANT:
下载1.9.7后, 解压到某个目录;
添加环境变量ANT_HOME,在系统变量PATH里面添加%ANT_HOME%\bin;
根据需要,下载相关jar包,放到lib里面。
配置ANT:
生成build.xml 和testng.xml(方法见本文附录);
配置testng.xml:
这里,按class来批量跑case。testNG还可以按包(package)和组(group)来跑case。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="classes">
<test name="Test">
<classes>
<class name="common.ScreenShort"/>
<class name="testBD.TestHighlight"/>
<class name="testBD.A123"/>
<class name="testBD.testBD"/>
<class name="common.InitialDriver"/>
<class name="testBD.test1"/>
</classes>
</test> <!-- Test -->
</suite> <!-- Suite -->
说明:配置好testng.xml后,我们直接右键testng.xml, Run As --->TestNG Suit 即可按所配置的来批量跑cases。
配置build.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- WARNING: Eclipse auto-generated file.
Any modifications will be overwritten.
To include a user specific buildfile here, simply create one in the same
directory with the processing instruction <?eclipse.ant.import?>
as the first entry and export the buildfile again. -->
<project basedir="." default="build" name="webTest">
<property environment="env"/>
<property name="AntHome" value="C:\Tools\apache-ant-1.9.7"/>
<property name="ECLIPSE_HOME" value="C:/Tools/eclipse-luna-with-plugin/eclipse/"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<path id="AntHome.classpath">
<span style="color:#ff0000;"> <fileset dir="${AntHome}/lib/">
<include name="*.jar"/>
</fileset></span>
</path>
<target name="init">
<mkdir dir="target/test-classes"/>
<mkdir dir="target/classes"/>
<copy includeemptydirs="false" todir="target/test-classes">
<fileset dir="src/test/java">
<exclude name="**/*.java"/>
</fileset>
</copy>
<copy includeemptydirs="false" todir="target/classes">
<fileset dir="src/main/java">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="target/test-classes"/>
<delete dir="target/classes"/>
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="target/test-classes" includeantruntime="false" source="${source}" target="${target}" <span style="color:#ff0000;">encoding="UTF-8"</span>>
<src path="src/test/java"/>
<classpath refid="webTest.classpath"/>
</javac>
<javac debug="true" debuglevel="${debuglevel}" destdir="target/classes" includeantruntime="false" source="${source}" target="${target}" <span style="color:#ff0000;">encoding="UTF-8"</span>>
<src path="src/main/java"/>
<classpath refid="webTest.classpath"/>
</javac>
</target>
<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
<copy todir="${ant.library.dir}">
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</copy>
<unzip dest="${ant.library.dir}">
<patternset includes="jdtCompilerAdapter.jar"/>
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<antcall target="build"/>
</target>
<!-- Config for testng -->
<taskdef name="testng" classname="org.testng.TestNGAntTask">
<classpath>
<pathelement location="${AntHome}/lib/testng/testng/6.8/testng-6.8.jar"/>
</classpath>
</taskdef>
<!-- execute testng after compile, then generate report -->
<span style="color:#ff0000;"> <target name="Run">
<!-- config testng -->
<testng outputdir="${basedir}" useDefaultListeners="true">
<!-- execute testcase follow testng.xml -->
<classpath refid="webTest.classpath"/>
<xmlfileset dir="." includes="testng.xml"/>
<!-- generate report title -->
<sysproperty key="org.uncommons.reportng.title" value="Test Automation"/>
<sysproperty key="org.uncommons.reportng.escape-output" value="false"/>
</testng>
</target>
<target name="transform">
<xslt in="${basedir}/test-output/testng-results.xml" style="${basedir}/test-output/testng-results.xsl" out="${basedir}/test-output/xsltresult.html" processor="SaxonLiaison">
<!-- you need to specify the directory here again -->
<param name="testNgXslt.outputDir" expression="${basedir}/test-output/"/>
<classpath refid="AntHome.classpath"/>
</xslt>
</target></span>
</project>
每个人的工程不一样,生成的build.xml会稍有差别。
强调一下以下几点:(自己根据生成的build.xml做的修改)
<fileset dir="${AntHome}/lib/">
<include name="*.jar"/>
</fileset>
这个是说引入AntHome/lib路径下所有的jar文件;
在javac里面加encoding="UTF-8"是为了设置编码格式,因为要跑的case里面有中文字符;
还要在Eclipse里面设置UTF-8编码:右键build.xml, 选择Run As--->External Tools Configration...--->Common--->Encoding, 选择UTF-8,如下图:
TestNG报告的优化:
后面两个target就是testNG相关的了:
name="Run"这个target是为了跑testng.xml里面配置的class。
name="transfer"这个target是为了优化testNG的报告。
说明:这里把testng.xml配置到build.xml里面是为了让批量跑case和生成优化报告一次完成。
(你也可以不配置name="Run"这个target,执行的时候,先运行testng.xml完成case的批量执行,再运行build.xml完成报告的优化)
默认情况下,在工程的test-output目录,testNG会生成两种html的报告:index.html和emailable-report.html
比如之前的例子,执行完会有下面两种报告:
这两种报告都不够美观。
生成优化后的TestNG报告:
配置好build.xml后,右键, Run AS--->Ant Build。控制台可以看到以下输出:
.................
Run:
[testng] Starting ChromeDriver (v2.9.248315) on port 17652
[testng] [TestNG] Running:
[testng] H:\work\workspace\webTest\testng.xml
[testng] ===============================================
[testng] Suite
[testng] Total tests run: 5, Failures: 1, Skips: 1
[testng] ===============================================
[testng] The tests failed.
BUILD SUCCESSFUL
Total time: 1 minute 8 seconds
有BUILD SUCCESSFUL说明执行成功。
(注意:本人执行的过程中会报各种classnotfound的错误, 那是因为相关jar包没有下载的原因,只要按提示下载相关jar包, 放到AntHome/lib下面即可)
来看优化后的报告:
根据build.xml的配置,在test-output下面会生成xsltresult.html,这个就是优化后的报告:
1)首先它带有Failed,Passed和Skipped的统计(图):
2)查看细节:
点击上图的左下方的Test,勾选Group by class:
会看到更详细的执行信息:Passed的方法会标绿;Failed的方法会标红;Skipped的方法会标黄;对于fail的case, 点击对应标红的信息即能看到fail的具体信息。
(点击Results overview 会切换到上面的统计图模式)
至此,就完成了testNG 用例的批量执行(配置testNG.xml)以及testNG报告的优化(结合Ant的build.xml)
附:利用Eclipse生成一些xml的方法
(网上很多做法都是自己去创建xml, 然后进行配置, 其实Eclipse都有生成这些xml的方法,小结如下)
TestNG: Eclipse生成testng.xml: 在工程上右键,选择TestNG --->Convert to TestNG;
Maven: Eclipse生成pom.xml: 在工程上右键,选择Configure ---> Convert to Maven Project;
Ant: Eclipse生成build.xml: 在工程上右键,选择Export... ---> General ---> Ant Buildfiles;