背景
搜狗商城现有的接口自动化测试框架是使用Python搭建的,共900多条case,每天都会运行一次,从而监控是否有因开发代码变更或者新功能添加而导致的遗漏的bug。但我们只是依照测试用例来转换成自动化脚本、case,实际上并没有度量的指标,也不能保证测试的完整性,所以我们打算引入代码覆盖率这一指标来度量测试完整性。
我们经常接触的是做单元测试的代码覆盖率,但jacoco也可以进行接口测试的代码覆盖率统计,本篇文章主要介绍使用jacoco+ant来统计tomcat服务的测试代码。其中:
环境部署
一、流程
二、安装jacoco
Jacoco安装比较简单,下载后,放到合适的位置,解压即可。
#下载并解压jacoco
wget http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.4/jacoco-0.8.4.zip
unzip jacoco-0.8.4.zip
目录结构如下图所示:
三、Tomcat配置(此处省略tomcat的安装,请自行安装)
(1)需要在tomcat/bin目录下的catalina.sh添加配置,打开该文件
cd $tomcat_path/bin
vi catalina.sh
(2)修改catalina.sh的JAVA_OPTS配置
JAVA_OPTS="-server -javaagent:/usr/local/jacoco/lib/jacocoagent.jar=includes=*,output=tcpserver,port=8044,address=127.0.0.1,append=true -Xverify:none"
# JAVA_OPTS="-javaagent:[yourPath/]jacocoagent.jar=includes=com.companyName.*,output=tcpserver,port=PORT,address=IP -Xverify:none"
(3)部署项目
将搜狗商城的java工程项目打包(可以通过maven 的package命令打成war包),之后直接上传到tomcat中的webapps目录下。
(4)启动tomcat服务并查看是否正确
service tomcat start
ps -ef | grep tomcat
包含jacocoagent.jar的使用参数,即配置成功。
四、访问API进行测试
(1)手工访问单一/多个接口
客户端访问项目中提供的API进行测试:
http://10.135.54.158/mall-server-api/api/product/sku/sku_stock_detail?product_id=1727504&stock_type=1
(2)运行接口自动化测试框架
我们在此步骤是运行的接口自动化测试框架。
五、Ant构建获取代码覆盖率
(1)安装Ant
#下载并解压ant
wget http://mirrors.koehn.com/apache//ant/binaries/apache-ant-1.9.14-bin.tar.gz
tar –vxzf apache-ant-1.9.14-bin.tar.gz
(2)修改系统配置文件
vi /etc/profile
#set Ant environment
export ANT_HOME=/usr/apache-ant-1.9.14
export PATH=$PATH:$ANT_HOME/bin
(3)立即将配置生效
source /etc/proifle
(4)测试ant是否生效
ant -version
(5)建立build.xml文件
ant的默认生成文件为build.xml,输入ant后,ant会在当前目录下搜索是否有build.xml,如果有,则执行;当然也可以自定义生成文件,通过ant -f a.xml即可指定a.xml为生成文件。
<?xml version="1.0" encoding="UTF-8" ?>
<project name="Jacoco" xmlns:jacoco="antlib:org.jacoco.ant" default="report">
<property name="result.dir" location="/usr/local/tomcat/apache-tomcat-8.5.38/webapps/mall-server-api/WEB-INF/" />
<property name="result.classes.dir" location="${result.dir}/classes" />
<property name="result.report.dir" location="/usr/local/jacoco/report/" />
<property name="resource.code" location="/usr/local/code/mall-server/mall-server-api/src/main/java/" />
<property name="jacocoantPath" value="/usr/local/jacoco/lib/jacocoant.jar/"/>
<property name="integrationJacocoexecPath" value="/usr/local/jacoco/jacoco.exec/"/>
<taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml">
<classpath path="${jacocoantPath}" />
</taskdef>
<target name="dump">
<!—port为之前server端tomcat服务打开的端口,要和上面配置的一样-->
<!—destfile指定生成的文件地址-->
<jacoco:dump address="127.0.0.1" port="8044" reset="false" destfile="${integrationJacocoexecPath}" append="false"/>
</target>
<target name="report" depends="dump">
<!-- Create coverage report -->
<jacoco:report>
<!-- This task needs the collected execution data and ... -->
<executiondata>
<file file="${integrationJacocoexecPath}" />
</executiondata>
<!-- the class files and optional source files ... -->
<structure name="API_CodeCoverage">
<group name="API">
<classfiles>
<fileset dir="${result.classes.dir}"/>
</classfiles>
<sourcefiles encoding="UTF-8">
<fileset dir="${resource.code}"/>
</sourcefiles>
</group>
</structure>
<!-- to produce reports in different formats. -->
<html destdir="${result.report.dir}" />
</jacoco:report>
</target>
</project>
(6)执行ant命令
#生成jacoco.exec文件,里面有覆盖率的数据
ant dump
#根据exec生成相应的覆盖率report文件(如果通过Jenkins插件这步骤可跳过)
ant report
(7)查看生成代码覆盖率报告
生成报告地址是build.xml 中配置的。红色表示未测试未覆盖到的代码,绿色表示测试已经覆盖到代码。下载生成的代码覆盖率文件夹中的index.html文件,如图所示:
总结
优点
局限: