背景javascript
搜狗商城現有的接口自動化測試框架是使用Python搭建的,共900多條case,天天都會運行一次,從而監控是否有因開發代碼變動或者新功能添加而致使的遺漏的bug。但咱們只是依照測試用例來轉換成自動化腳本、case,實際上並無度量的指標,也不能保證測試的完整性,因此咱們打算引入代碼覆蓋率這一指標來度量測試完整性。html
咱們常常接觸的是作單元測試的代碼覆蓋率,但jacoco也能夠進行接口測試的代碼覆蓋率統計,本篇文章主要介紹使用jacoco+ant來統計tomcat服務的測試代碼。其中:java
Jacoco是一個開源的覆蓋率工具,經過插樁方式來記錄代碼執行軌跡。nginx
Ant 是Java的生成工具,相似於Unix中的Make工具,都是用來編譯、生成,ant運行時須要一個XML文件(構建文件)。web
環境部署apache
1、流程api
啓動服務攜帶jacocoagent參數tomcat
生成jacoco.execruby
ant任務生成覆蓋率bash
2、安裝jacoco
Jacoco安裝比較簡單,下載後,放到合適的位置,解壓便可。
#下載並解壓jacocowget http://search.maven.org/remotecontent?filepath=org/jacoco/jacoco/0.8.4/jacoco-0.8.4.zipunzip jacoco-0.8.4.zip
目錄結構以下圖所示:
jacocoagent:運行時啓動tcp服務監控代碼覆蓋,dump出覆蓋率數據。
jacocoant:jacoco的任務是ant驅動的,因此這個包用來執行jacoco的任務,向tcp服務發送請求。
3、Tomcat配置(此處省略tomcat的安裝,請自行安裝)
(1)須要在tomcat/bin目錄下的catalina.sh添加配置,打開該文件
cd $tomcat_path/binvi 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"
yourPath :放 jacocoagent.jar 文件的目錄路徑;
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 startps -ef | grep tomcat
包含jacocoagent.jar的使用參數,即配置成功。
4、訪問API進行測試
(1)手工訪問單一/多個接口
客戶端訪問項目中提供的API進行測試:
http://10.135.54.158/mall-server-api/api/product/sku/sku_stock_detail?product_id=1727504&stock_type=1
(2)運行接口自動化測試框架
咱們在此步驟是運行的接口自動化測試框架。
5、Ant構建獲取代碼覆蓋率
(1)安裝Ant
#下載並解壓antwget http://mirrors.koehn.com/apache//ant/binaries/apache-ant-1.9.14-bin.tar.gztar –vxzf apache-ant-1.9.14-bin.tar.gz
(2)修改系統配置文件
vi /etc/profile#set Ant environmentexport ANT_HOME=/usr/apache-ant-1.9.14export 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爲生成文件。
<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文件,如圖所示:
總結
優勢
簡單易學;
時間成本低,短時間內可得到收益;
解決不會Java的困擾。
侷限:
測試深度:目前的測試層次維持在對外提供的接口,僅爲入口級別,對於接口內部的深層邏輯,沒法有效驗證。
歡迎添加咱們的搜狗測試微信號,與咱們一塊兒聊聊測試。
本文分享自微信公衆號 - 搜狗測試(SogouQA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。