python接⼝测试覆盖率统计_Jacoco统计接⼝测试的代码覆盖
背景
搜狗商城现有的接⼝⾃动化测试框架是使⽤Python搭建的,共900多条case,每天都会运⾏⼀次,从⽽监控是否有因开发代码变更或者新功能添加⽽导致的遗漏的bug。但我们只是依照测试⽤例来转换成⾃动化脚本、case,实际上并没有度量的指标,也不能保证测试的完整性,所以我们打算引⼊代码覆盖率这⼀指标来度量测试完整性。
我们经常接触的是做单元测试的代码覆盖率,但jacoco也可以进⾏接⼝测试的代码覆盖率统计,本篇⽂章主要介绍使⽤jacoco+ant来统计tomcat服务的测试代码。其中:
Jacoco是⼀个开源的覆盖率⼯具,通过插桩⽅式来记录代码执⾏轨迹。
Ant 是Java的⽣成⼯具,类似于Unix中的Make⼯具,都是⽤来编译、⽣成,ant运⾏时需要⼀个XML⽂件(构建⽂件)。
环境部署
⼀、流程
启动服务携带jacocoagent参数
⽣成
ant任务⽣成覆盖率
⼆、安装jacoco
Jacoco安装⽐较简单,下载后,放到合适的位置,解压即可。
#下载并解压jacoco
unzip jacoco-0.8.4.zip
⽬录结构如下图所⽰:
jacocoagent:运⾏时启动tcp服务监控代码覆盖,dump出覆盖率数据。
jacocoant:jacoco的任务是ant驱动的,所以这个包⽤来执⾏jacoco的任务,向tcp服务发送请求。
三、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=companyName.*,output=tcpserver,port=PORT,address=IP -Xverify:none"
yourPath :放 jacocoagent.jar ⽂件的⽬录路径;python处理xml文件
includes 是指要收集哪些类(注意不要光写包名,最后要写.*),不写的话默认是*,会收集应⽤服务上所有的类,包括服务器和其他中间件的类,⼀般要过滤(当然如果你愿意写*也完全没有问题,如:"includes=com.*" or "includes=*");
output 有 4 个值,分别是 file、tcpserver、tcpclient、mbean,默认是 file。使⽤ file 的⽅式只有在停掉应⽤服务的时候才能产⽣覆盖率⽂件,⽽使⽤ tcpserver 的⽅式可以在不停⽌应⽤服务的情况下下载覆盖率⽂件;
address 是 IP 地址,IP 就是 Tomcat 服务器的机器的 IP,⾄于是写 `服务器本机的 IP` 还是写 "127.0.0.1" 要看情况:1) 如果是在Tomcat 服务器上执⾏" ant dump"的话,就直接写 address=127.0.0.1;2) 如果执⾏ "ant dump" 不是在 Tomcat 服务器上执⾏的,就得写服务器本机的IP;
port 是端⼝;
`-Xverify:none`:这个参数是防⽌启动主程序异常才加的(也可以不加)。
(3)部署项⽬
将搜狗商城的java⼯程项⽬打包(可以通过maven 的package命令打成war包),之后直接上传到tomcat
中的webapps⽬录下。
(4)启动tomcat服务并查看是否正确
service tomcat start
ps -ef | grep tomcat
包含jacocoagent.jar的使⽤参数,即配置成功。
四、访问API进⾏测试
(1)⼿⼯访问单⼀/多个接⼝
客户端访问项⽬中提供的API进⾏测试:
(2)运⾏接⼝⾃动化测试框架
我们在此步骤是运⾏的接⼝⾃动化测试框架。
五、Ant构建获取代码覆盖率
(1)安装Ant
#下载并解压ant
tar –vxzf apache-ant-1.9.
(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)建⽴l⽂件
ant的默认⽣成⽂件为l,输⼊ant后,ant会在当前⽬录下搜索是否有l,如果有,则执⾏;当然也可以⾃定义⽣成⽂件,通过ant -l即可指定a.xml为⽣成⽂件。
(6)执⾏ant命令
#⽣成⽂件,⾥⾯有覆盖率的数据
ant dump
#根据exec⽣成相应的覆盖率report⽂件(如果通过Jenkins插件这步骤可跳过)
ant report
(7)查看⽣成代码覆盖率报告
⽣成报告地址是l 中配置的。红⾊表⽰未测试未覆盖到的代码,绿⾊表⽰测试已经覆盖到代码。下载⽣成的代码覆盖率⽂件夹中的index.html⽂件,如图所⽰:
总结
优点
简单易学;
时间成本低,短期内可获得收益;
解决不会Java的困扰。
局限:
测试深度:⽬前的测试层次维持在对外提供的接⼝,仅为⼊⼝级别,对于接⼝内部的深层逻辑,⽆法有效验证。
上⽂内容不⽤于商业⽬的,如涉及知识产权问题,请权利⼈联系博为峰⼩编(021-********-8017),我们将⽴即处理