午夜精品人妻久久久-成年美女很黄的网站-在线看片免费人成视久网app-国产精品美女无遮挡一区二区-91精品国产综合久久久久-国产的免费视频又猛又爽又刺激-在线看片免费人成视久网app-久久香蕉国产精品视频-av一区二区三区高清

軟件測(cè)試丨只懂黑盒測(cè)試也能學(xué)會(huì)的代碼覆蓋率及精準(zhǔn)化測(cè)試

測(cè)試覆蓋率是對(duì)測(cè)試完成程度的度量 。它通常依據(jù)某種覆蓋準(zhǔn)則來(lái)對(duì)測(cè)試用例執(zhí)行情況進(jìn)行衡量 , 以判斷測(cè)試執(zhí)行得是否充分 。
——出自《計(jì)算機(jī)科學(xué)技術(shù)名詞 》第三版
常見覆蓋率統(tǒng)計(jì)工具
emma 與是為單元測(cè)試而設(shè)計(jì)的覆蓋率統(tǒng)計(jì), 與 emma 同屬于一家公司,但是是為了更廣泛的覆蓋率統(tǒng)計(jì)而設(shè)計(jì)的工具 。
的文檔中有個(gè)章節(jié),里面對(duì)的定位描述的很好 。原文的大意是說(shuō)其他的工具沒有得到積極有效的維護(hù),而且其他的工具都是為了單一任務(wù)而設(shè)計(jì),他們不是為了 “集成” 而生 。從這一點(diǎn)上我們就可以看出的設(shè)計(jì)理念 。
得益于的設(shè)計(jì)理念,以及良好的 api 設(shè)計(jì),它可以輕松的與已有的工具集成 , 甚至進(jìn)行平臺(tái)化 。它也可以同時(shí)用于單元測(cè)試與集成測(cè)試,所以是一款非常優(yōu)秀的覆蓋率統(tǒng)計(jì)工具 , 很多公司的精準(zhǔn)化測(cè)試,就是重度依賴了。
覆蓋率分析原理
要了解代碼覆蓋率的統(tǒng)計(jì)原理,我們就需要去深入了解 jvm 的機(jī)制 。這方面的知識(shí)是 java 領(lǐng)域的高端進(jìn)階知識(shí),限于篇幅,我們只講解下大概的原理,完整內(nèi)容請(qǐng)參考 VM 虛擬機(jī)系列的書籍,以及早年發(fā)布的若干代碼插樁的資料 。
簡(jiǎn)單說(shuō)下原理,java 源代碼會(huì)被 javac 編譯為 class 文件,class 文件保存了 class 的基本信息與 jvm 的指令集 。java 的底層,也就是 jvm 在解析 class 的時(shí)候,會(huì)把文件格式的 class 讀取到內(nèi)存并運(yùn)行 。也是借鑒了這一整套的設(shè)計(jì)理念 ,  上的其實(shí)是與 art 。
當(dāng)我們要統(tǒng)計(jì)代碼覆蓋率的時(shí)候,就需要在代碼的執(zhí)行路徑上加入探針分析 。通常是在讀取類的時(shí)候,在關(guān)鍵的指令塊的出口與入口增加標(biāo)記 。當(dāng)指令塊被執(zhí)行后,就會(huì)命中探針并完成記錄 。
【軟件測(cè)試丨只懂黑盒測(cè)試也能學(xué)會(huì)的代碼覆蓋率及精準(zhǔn)化測(cè)試】要修改最底層的 jvm 字節(jié)碼往往是比較麻煩的,需要精通 jvm 的各種指令以及 java class 結(jié)構(gòu) 。這方面的處理目前已有有非常成熟的開源項(xiàng)目可以做大了,如下就是一些知名的字節(jié)碼修改工具 。
其中 ASM 是所有字節(jié)碼操作的底層基礎(chǔ),是最底層的字節(jié)碼修改工具 。其他工具是它之上的一些高級(jí)封裝 。借助于這些工具與 JVM 自身的一些調(diào)試特性,我們就可以對(duì) jvm 代碼或者進(jìn)程進(jìn)行便捷的操縱了 。
插樁方式
插樁方式有很多種,常見的方式如下
支持字節(jié)碼插樁與這兩種插樁方式 。也就是就算沒有源代碼也可以統(tǒng)計(jì)到覆蓋率數(shù)據(jù),但是最后分析的時(shí)候,還是要結(jié)合源代碼才能獲得更多的覆蓋率細(xì)節(jié)數(shù)據(jù) 。畢竟覆蓋率的統(tǒng)計(jì),并不是只是簡(jiǎn)單的覆蓋率數(shù)據(jù)本身的指標(biāo)高低 。
的工作方式
支持四種工作模式
很多人都會(huì)使用 file 模式,但是 tcp模式才是最易用的 。因?yàn)椴恍枰暾?qǐng)服務(wù)器的文件訪問權(quán)限就可控制覆蓋率數(shù)據(jù) 。你可以根據(jù)自己公司的部署情況選擇合適的工作模式 。
on the fly 插樁模式
on the fly 插樁模式是使用最多的 。首先需要在你的被測(cè) java 程序啟動(dòng)的時(shí)候,加入 jvm 的一些參數(shù) 。
-javaagent:[yourpath/]jacocoagent.jar=[option1]=[value1],[option2]=[value2]destfileoutput:file、tcpserver、tcpclient、noneaddressport
你可以自己設(shè)置適合的工作模式 。
離線插樁模式c語(yǔ)言apache下載配置,適合的覆蓋率統(tǒng)計(jì),需要借助于 maven、 等構(gòu)建工具的指令 。
on the fly 插樁模式

軟件測(cè)試丨只懂黑盒測(cè)試也能學(xué)會(huì)的代碼覆蓋率及精準(zhǔn)化測(cè)試

文章插圖
軟件測(cè)試丨只懂黑盒測(cè)試也能學(xué)會(huì)的代碼覆蓋率及精準(zhǔn)化測(cè)試

文章插圖
-cli 是的一個(gè)組件 , 可以在不依賴 maven、 構(gòu)建工具的情況下完成對(duì)代碼的分析 。主要用于工作模式下 。
用法如下
java -jar jacococli.jar dump [--address ] --destfile[--help] [--port ] [--quiet] [--reset] [--retry ]
項(xiàng)目演練
這是學(xué)院里的一個(gè)動(dòng)手演練的小場(chǎng)景,統(tǒng)計(jì)工具的啟動(dòng)覆蓋率
project_root=/Users/seveniruby/temp/java_2/jacoco/apache-jmeter-5.2.1jacoco_cli_jar=org.jacoco.cli-0.8.6-20200329.124045-45-nodeps.jarjava -javaagent:org.jacoco.agent-0.8.6-20200329.124039-45-runtime.jar-jar $project_root/bin/ApacheJMeter.jar#退出jmeter#生成覆蓋率報(bào)告java -jar $jacoco_cli_jar report jacoco.exec --classfiles "$project_root/bin/ApacheJMeter.jar" --classfiles $project_root/lib/ext/ApacheJMeter_http.jar --html jmeter_coverage/#生成帶有源代碼的覆蓋率報(bào)告 java -jar $jacoco_cli_jar reportjacoco.exec--classfiles "$project_root/bin/ApacheJMeter.jar"--classfiles $project_root/lib/ext/ApacheJMeter_http.jar--html jmeter_coverage/ --sourcefiles ~/projects/jmeter/src/#生成xml報(bào)告java -jar $jacoco_cli_jar report jacoco_tcpserver2.exec--classfiles "$project_root/bin/ApacheJMeter.jar" --classfiles $project_root/lib/ext/ApacheJMeter_http.jar --xmljmeter_coverage_tcpserver2/jacoco.xml
完整代碼請(qǐng)參考學(xué)員論壇中的課程帖中的源代碼 。
導(dǎo)入覆蓋率
可以分析的 exec 文件與 xml 文件c語(yǔ)言apache下載配置,并自動(dòng)導(dǎo)入覆蓋率 。exec 文件的分析后續(xù)會(huì)放棄支持,主支持 xml 文件的分析 。
sonar-scanner-Dsonar.host.url=http://sonarqube.testing-studio.com:9000-Dsonar.login=$SONARQUBE_TOKEN-Dsonar.projectKey=jmeter-Dsonar.projectVersion=1.0-Dsonar.coverage.jacoco.xmlReportPaths=$PWD/jmeter_coverage_tcpserver2/jacoco.xml-Dsonar.projectBaseDir=/Users/seveniruby/projects/jmeter/-Dsonar.java.binaries=/Users/seveniruby/projects/jmeter/
導(dǎo)入覆蓋率
可以通過(guò)如下參數(shù)限定要分析代碼的范圍 , 通常是指明要覆蓋的范圍
導(dǎo)入覆蓋率
可以智能分析新老版本之間的新增代碼的覆蓋率,這點(diǎn)非常不錯(cuò),以前一些分析代碼 diff 的工作就節(jié)省了 。他的代碼分析也比較智能,簡(jiǎn)單的換行并不會(huì)干擾代碼 diff 的分析范圍 。
通過(guò)覆蓋率數(shù)據(jù)
支持兩種通用的測(cè)試數(shù)據(jù)導(dǎo)入
這樣方便與各種框架進(jìn)行集成,也方便測(cè)試工程師二次定制 。
通用測(cè)試數(shù)據(jù)模板 。
通用覆蓋率數(shù)據(jù)模板
在的分析中,加入對(duì)應(yīng)的配置參數(shù)即可導(dǎo)入通用測(cè)試數(shù)據(jù) 。
通用測(cè)試數(shù)據(jù)導(dǎo)入的常見用途
代碼diff方法
代碼的 diff 分析是一個(gè)比較大的話題,diff 只是對(duì)代碼的最簡(jiǎn)單的一個(gè)分析策略,要想深入的理解代碼,我們還需要更進(jìn)一步的分析代碼的調(diào)用鏈 。我們先看最簡(jiǎn)單的代碼 diff 分析工具 。
代碼 diff 分析工具
本文到此結(jié)束,希望對(duì)大家有所幫助 。