|
有时候由于公司网络或其它原因,无法采用maven,这时ant是一个比较理想的选择。以下是以ant为例,搭
建一个测试框架
项目结构如下图:
build.properties代码如下:
复制代码
- # The source code for the examples can be found in this directory
- src.dir=src/main/java
- test.dir=src/test/java
- # The path of the jar
- jar.dir=lib
- # Classes generated by the javac compiler are deposited in this directory
- target.dir=target
- src.class=${target.dir}/classes
- test.class=${target.dir}/test-classes
- # Instrumented classes are deposited into this directory
- generated.dir=${target.dir}/generated-classes
- instrument.class=${generated.dir}/cobertura
- report.dir=${target.dir}/surefire-reports
- testng.report=${report.dir}/testng
- junit.report=${report.dir}/junit
- junit.report.html=${report.dir}/junit-html
- coverage.xml.report=${report.dir}/cobertura-xml
- coverage.summaryxml.report=${report.dir}/cobertura-summary-xml
- site.dir=${target.dir}/site
- cobertura.dir=${site.dir}/cobertura
- #sonar configration
- sonar.projectName=testFrameWork
- sonar.projectKey=com.zghome.mvndemo
- sonar.projectVersion=1.0
- sonar.host.url=http://localhost:9000
- sonar.sourceEncoding=UTF-8
- sonar.language=java
- 复制代码
- build.xml代码如下:
- 复制代码
- <project name="test" default="test" basedir="." >
- <!-- Define <testng> task -->
- <property file="build.properties" />
- <taskdef name="testng" classname="org.testng.TestNGAntTask">
- <classpath>
- <pathelement location="${jar.dir}/testng-6.9.9.jar"/>
- </classpath>
- </taskdef>
- <path id="jar.classpath">
- <fileset dir="${jar.dir}">
- <include name="*.jar" />
- </fileset>
- </path>
- <path id="class.classpath">
- <pathelement location="${src.class}"/>
- </path>
- <taskdef classpathref="jar.classpath" resource="tasks.properties" />
- <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml">
- <classpath path="${cobertura.dir}/sonar-ant-task-2.3.jar"/>
- </taskdef>
- <target name="init">
- <delete dir="${target.dir}" />
- <mkdir dir="${target.dir}" />
- <mkdir dir="${src.class}" />
- <mkdir dir="${test.class}" />
- <mkdir dir="${generated.dir}" />
- <mkdir dir="${instrument.class}" />
- <mkdir dir="${report.dir}" />
- <mkdir dir="${testng.report}" />
- <mkdir dir="${junit.report}" />
- <mkdir dir="${junit.report.html}" />
- <mkdir dir="${coverage.xml.report}" />
- <mkdir dir="${coverage.summaryxml.report}" />
- <mkdir dir="${site.dir}" />
- <mkdir dir="${cobertura.dir}" />
- </target>
- <target name="compile" depends="init">
- <javac srcdir="${src.dir}" destdir="${src.class}" debug="on" failonerror="false" includeAntRuntime="false" >
- <classpath refid="jar.classpath"/>
- </javac>
- <javac srcdir="${test.dir}" destdir="${test.class}" debug="on" includeAntRuntime="false">
- <classpath refid="jar.classpath"/>
- <classpath refid="class.classpath"/>
- </javac>
- </target>
- <target name="compile.test" >
- <delete dir="${test.class}" />
- <mkdir dir="${test.class}" />
- <javac srcdir="${test.dir}" destdir="${test.class}" debug="on" includeAntRuntime="false">
- <classpath refid="jar.classpath"/>
- <classpath refid="class.classpath"/>
- </javac>
- </target>
- <target name="instrument" depends="compile">
- <!--
- Remove the coverage data file and any old instrumentation.
- -->
- <delete file="cobertura.ser"/>
- <delete dir="${instrument.class}" />
- <!--
- Instrument the application classes, writing the
- instrumented classes into ${build.instrumented.dir}.
- -->
- <cobertura-instrument todir="${instrument.class}" ignoreTrivial="true" >
- <!--
- The following line causes instrument to ignore any
- source line containing a reference to slf4j/logback, for the
- purposes of coverage reporting.
- -->
- <ignore regex="org.slf4j.*" />
- <classpath refid="jar.classpath"/>
- <fileset dir="${src.class}">
- <!--
- Instrument all the application classes, but
- don't instrument the test classes.
- -->
- <include name="**/*.class" />
- <exclude name="**/*Test.class" />
- <exclude name="**/*testCase.class" />
- </fileset>
- <auxClasspath refid="class.classpath" />
- </cobertura-instrument>
- </target>
- <target name="test" depends="compile">
- <testng outputdir="${testng.report}">
- <xmlfileset dir="${basedir}" includes="testng*.xml"/>
- <classpath location="${src.class}" />
- <classpath location="${test.class}" />
- <classpath refid="jar.classpath"/>
- </testng>
- <junitreport todir="${junit.report}">
- <fileset dir="${testng.report}/junitreports">
- <include name="TEST-*.xml" />
- </fileset>
- <report format="frames" todir="${junit.report.html}" />
- </junitreport>
- </target>
- <target name="testfail" depends="compile.test">
- <testng outputdir="${testng.report}">
- <xmlfileset dir="${testng.report}" includes="testng-failed.xml"/>
- <classpath location="${src.class}" />
- <classpath location="${test.class}" />
- <classpath refid="jar.classpath"/>
- </testng>
- </target>
- <target name="test-covery">
- <testng outputdir="${testng.report}">
- <xmlfileset dir="${basedir}" includes="testng*.xml"/>
- <classpath location="${instrument.class}" />
- <classpath location="${src.class}" />
- <classpath location="${test.class}" />
- <classpath refid="jar.classpath"/>
- </testng>
- <junitreport todir="${junit.report}">
- <fileset dir="${testng.report}/junitreports">
- <include name="TEST-*.xml" />
- </fileset>
- <report format="frames" todir="${junit.report.html}" />
- </junitreport>
- </target>
- <target name="coverage-check">
- <cobertura-check branchrate="34" totallinerate="100" />
- </target>
- <target name="coverage-report">
- <!--
- Generate an XML file containing the coverage data using
- the "srcdir" attribute.
- -->
- <cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.report}" format="xml" />
- </target>
- <target name="summary-coverage-report">
- <!--
- Generate an summary XML file containing the coverage data using
- the "srcdir" attribute.
- -->
- <cobertura-report srcdir="${src.dir}" destdir="${coverage.summaryxml.report}" format="summaryXml" />
- </target>
- <target name="alternate-coverage-report">
- <!--
- Generate a series of HTML files containing the coverage
- data in a user-readable form using nested source filesets.
- -->
- <cobertura-report destdir="${cobertura.dir}">
- <fileset dir="${src.dir}">
- <include name="**/*.java"/>
- </fileset>
- </cobertura-report>
- </target>
- <target name="coverage" depends="instrument,test-covery,coverage-report,summary-coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/>
- <target name="coverage-test" depends="compile.test,test-covery,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/>
- <target name="sonar" >
- <!-- list of mandatories Sonar properties -->
- <mkdir dir="sonar-src"/>
- <copy todir="sonar-src">
- <fileset dir="${src.dir}" includes="**/*.java"/>
- </copy>
- <property name="sonar.sources" value="sonar-src"/>
- <!-- list of optional Sonar properties -->
- <property name="sonar.projectName" value="${sonar.projectName}"/>
- <property name="sonar.projectKey" value="${sonar.projectKey}" />
- <property name="sonar.projectVersion" value="${sonar.projectVersion}" />
- <property name="sonar.tests" value="${test.dir}"/>
- <property name="sonar.cobertura.reportPath" value="${coverage.xml.report}/coverage.xml"/>
- <property name="sonar.junit.reportsPath" value="${junit.report}" />
- <property name="sonar.host.url" value="${sonar.host.url}"/>
- <property name="sonar.sourceEncoding" value="${sonar.sourceEncoding}" />
- <property name="sonar.language" value="${sonar.language}" />
- <sonar:sonar xmlns:sonar="antlib:org.sonar.ant"/>
- <delete dir="sonar-src"/>
- </target>
- </project>
复制代码
复制代码
简单说明以上的内容:
init:初始化工程的目录结构
compile:编译源码及测试用例
compile.test:仅编译测试用例
instrument:修改源码的class,计算测试用例覆盖率
test:运行测试用例
test-covery:计算测试用例覆盖率
coverage-report,summary-coverage-report,alternate-coverage-report:生成不同格式的测试报告
coverage:调用上述任务,生成测试报告
sonar:上传sonar服务器
sonar服务器的配置请参照:
测试覆盖率截图:
sonar服务器截图:
|
|