精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

你們單測覆蓋率是如何統(tǒng)計的?原理是什么?

開發(fā) 前端
單元測試覆蓋率的統(tǒng)計原理實際上是通過字節(jié)碼插樁實現(xiàn)的。也就是說,在編譯期間會向代碼中注入一些特殊的監(jiān)控代碼,以記錄測試執(zhí)行過程中代碼的執(zhí)行情況,從而推斷代碼的覆蓋情況。

高手回答

我們在進(jìn)行單元測試時,經(jīng)常需要關(guān)注一個覆蓋率的指標(biāo),許多發(fā)布流程甚至要求達(dá)到特定的百分比。

那么,單元測試覆蓋率是如何統(tǒng)計的呢?其底層實現(xiàn)原理又是怎樣的呢?

單元測試覆蓋率的統(tǒng)計原理實際上是通過字節(jié)碼插樁實現(xiàn)的。也就是說,在編譯期間會向代碼中注入一些特殊的監(jiān)控代碼,以記錄測試執(zhí)行過程中代碼的執(zhí)行情況,從而推斷代碼的覆蓋情況。這些監(jiān)控代碼能在運行時記錄代碼的執(zhí)行情況,也能在編譯時生成代碼覆蓋率報告。

常見的單元測試覆蓋率統(tǒng)計工具包括JaCoCo、Emma、Cobertura等,這些工具能夠在編譯或運行時對代碼進(jìn)行插樁,并記錄代碼的執(zhí)行情況,最終生成覆蓋率報告。

具體見下表:

工具

Jacoco

Emma

Cobertura

原理

使用 ASM 修改字節(jié)碼

修改 jar 文件,class 文件字節(jié)碼文件

基于 jcoverage,基于 asm 框架對 class 文件插樁

覆蓋粒度

行,類,方法,指令,分支

行,類,方法,基本塊,指令,無分支覆蓋

項目,包,類,方法的語句覆蓋/分支覆蓋

插樁

on the fly、offline

on the fly、offline

offline,把統(tǒng)計代碼插入編譯好的class文件中

生成結(jié)果

在 Tomcat 的 catalina.sh 配置 javaangent 參數(shù),指出需要收集覆蓋率的文件,shutdown 時才收集,只能使用 kill 命令關(guān)閉 Tomcat,不要使用 kill -9

html、xml、txt,二進(jìn)制格式報表

html,xml

缺點

需要源代碼

1、需要 debug 版本,并打來 build.xml 中的 debug 編譯項;2、需要源代碼,且必須與插樁的代碼完全一致

1、不能捕獲測試用例中未考慮的異常;2、關(guān)閉服務(wù)器才能輸出覆蓋率信息(已有修改源代碼的解決方案,定時輸出結(jié)果;輸出結(jié)果之前設(shè)置了 hook,會與某些服務(wù)器的 hook 沖突,web 測試中需要將 cobertura.ser 文件來回 copy

性能


小巧

插入的字節(jié)碼信息更多

執(zhí)行方式

maven,ant,命令行

命令行

maven,ant

Jenkins 集成

生成 html 報告,直接與 hudson 集成,展示報告,無趨勢圖

無法與 hudson 集成

有集成的插件,美觀的報告,有趨勢圖

報告實時性

默認(rèn)關(guān)閉,可以動態(tài)從 jvm dump 出數(shù)據(jù)

可以不關(guān)閉服務(wù)器

默認(rèn)是在關(guān)閉服務(wù)器時才寫結(jié)果

維護(hù)狀態(tài)

持續(xù)更新中

停止維護(hù)

停止維護(hù),不支持java1.8的lamda表達(dá)式

什么是字節(jié)碼插樁

Java字節(jié)碼插樁技術(shù)是指在編譯期或運行期,通過修改Java字節(jié)碼的方式,在代碼中插入額外的代碼。這種技術(shù)可以在不改變Java源代碼的情況下,對Java應(yīng)用程序的運行時行為進(jìn)行監(jiān)控、調(diào)試、分析和優(yōu)化等操作。舉例來說,它可以用于實現(xiàn)性能監(jiān)控、代碼覆蓋率檢測、代碼安全掃描等功能。

字節(jié)碼插樁技術(shù)通常包括以下幾個步驟:

  1. 生成目標(biāo)類的字節(jié)碼,這一步可以通過Java編譯器(如javac)或其他工具(如AspectJ)來完成。
  2. 解析字節(jié)碼,識別需要進(jìn)行插樁的代碼區(qū)域(如方法、循環(huán)、異常處理等)。
  3. 插入額外的字節(jié)碼,通常通過編寫Java代碼來實現(xiàn)這一步,然后利用字節(jié)碼生成庫(如ASM、Javassist等)生成相應(yīng)的字節(jié)碼。
  4. 將修改后的字節(jié)碼重新寫回到磁盤或內(nèi)存中,以供后續(xù)使用。

假設(shè)我們希望對一個Java方法進(jìn)行性能監(jiān)控,我們可以在方法的入口和出口處分別插入計時器,以統(tǒng)計方法的執(zhí)行時間。以下代碼展示了如何實現(xiàn)這一功能:

public class Monitor {
    public static void start() {
        long startTime = System.nanoTime();
        // 將起始時間記錄到ThreadLocal中,以便在方法返回時進(jìn)行計算
        ThreadLocalHolder.set("startTime", startTime);
    }

    public static void end() {
        long endTime = System.nanoTime();
        // 獲取起始時間
        long startTime = (long) ThreadLocalHolder.get("startTime");
        // 計算方法執(zhí)行時間
        long elapsedTime = endTime - startTime;
        System.out.println("Method execution time: " + elapsedTime + "ns");
    }
}

public class Example {
    public void method() {
        Monitor.start();
        // 執(zhí)行方法邏輯
        Monitor.end();
    }
}

然而,若需監(jiān)控多個方法的性能,分別在每個方法中插入Monitor.start()和Monitor.end()將導(dǎo)致代碼重復(fù)、可讀性下降,并存在遺漏的風(fēng)險。在這種情況下,可以借助字節(jié)碼插樁技術(shù),在編譯期或運行期間自動向每個方法的入口和出口處插入Monitor.start()和Monitor.end(),以確保代碼的統(tǒng)一性和可維護(hù)性。

具體實現(xiàn)可借助字節(jié)碼生成庫ASM或Javassist來實現(xiàn),此處以ASM為例。以下代碼展示了如何使用ASM對Example類進(jìn)行字節(jié)碼插樁:

import org.objectweb.asm.ClassReader;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.ClassWriter;
import org.objectweb.asm.MethodVisitor;
import org.objectweb.asm.Opcodes;

import java.io.IOException;

public class MonitorTransformer implements Opcodes {

    public static byte[] transform(byte[] classBytes) throws IOException {
        ClassReader reader = new ClassReader(classBytes);
        ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS | ClassWriter.COMPUTE_FRAMES);
        ClassVisitor visitor = new ClassVisitor(Opcodes.ASM5, writer) {
            @Override
            public MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) {
                MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions);
                // 只為指定方法添加字節(jié)碼插樁
                if ("method".equals(name) && "()V".equals(desc)) {
                    mv = new MethodVisitor(Opcodes.ASM5, mv) {
                        @Override
                        public void visitCode() {
                            super.visitCode();
                            // 在方法執(zhí)行之前插入字節(jié)碼
                            mv.visitMethodInsn(INVOKESTATIC, "Monitor", "start", "()V", false);
                        }

                        @Override
                        public void visitInsn(int opcode) {
                            // 在方法返回之前插入字節(jié)碼
                            if (opcode == RETURN) {
                                mv.visitMethodInsn(INVOKESTATIC, "Monitor", "end", "()V", false);
                            }
                            super.visitInsn(opcode);
                        }
                    };
                }
                return mv;
            }
        };
        reader.accept(visitor, ClassReader.EXPAND_FRAMES);
        return writer.toByteArray();
    }
}


責(zé)任編輯:武曉燕 來源: 碼上遇見你
相關(guān)推薦

2022-03-29 11:32:32

單元測試覆蓋率框架

2021-10-15 13:47:19

覆蓋率檢測 istanbul 總代碼的比例

2024-09-03 14:10:00

模型測試

2019-09-25 09:20:41

谷歌代碼開發(fā)者

2011-11-01 10:10:48

ScriptCover

2023-10-27 08:49:00

JCovOpenJDK

2022-05-31 09:01:18

SwiftApp 項目

2025-03-11 09:04:26

2022-10-21 15:29:32

5G網(wǎng)絡(luò)

2023-04-06 08:03:43

Spock插件Surefire

2022-08-25 06:27:39

vivoJaCoCo代碼覆蓋率

2021-12-25 22:30:27

Chrome DevTJavaScript調(diào)試工具

2012-04-11 11:21:57

ibmdw

2019-09-30 10:27:52

變異測試評估

2022-04-10 11:52:43

前端單測程序

2024-08-21 08:22:33

2020-08-18 08:10:02

單元測試Java

2018-02-27 14:50:20

大數(shù)據(jù)公廁城市

2024-11-25 12:20:00

Hystrix微服務(wù)架構(gòu)

2024-06-14 12:04:33

點贊
收藏

51CTO技術(shù)棧公眾號

久久精品www| 久久婷婷五月综合色国产香蕉| 久久久久久久久久毛片| 污污的网站在线看| 91色综合久久久久婷婷| 国产视频福利一区| 在线免费观看毛片| 日本在线电影一区二区三区| 亚洲电影免费观看高清完整版在线观看| 久久99久久精品国产| 国产精品久久久久久久久夜色| 99re6热只有精品免费观看| 狠狠躁夜夜躁人人躁婷婷91| 亚洲国产精品视频一区| 亚洲精品国产av| 免费在线视频一区| 97人人做人人爱| 欧美一级特黄高清视频| 伊人久久大香线蕉av不卡| 91精品国产综合久久久久久漫画| 一本久道久久综合| 亚洲 小说区 图片区 都市| 久久草av在线| 奇米影视亚洲狠狠色| 劲爆欧美第一页| 欧美岛国激情| 亚洲无线码在线一区观看| 95视频在线观看| 欧美电影网址| 国产精品入口麻豆九色| 久久久久久99| 视频污在线观看| 国产精品小仙女| 91美女片黄在线观看游戏| 日本特级黄色片| 欧美精品国产| 久久国内精品一国内精品| 日本成人免费视频| 久久不卡国产精品一区二区| 亚洲激情第一页| 亚洲色偷偷色噜噜狠狠99网| 清纯唯美激情亚洲| 欧美一区二区精品| 一级淫片在线观看| 国产香蕉久久| 欧美日本在线看| 黄色手机在线视频| 国产91在线播放精品| 欧美在线观看视频在线| 国产视频一区二区三区在线播放| 色网站免费在线观看| 2023国产精品自拍| 欧美大香线蕉线伊人久久国产精品| 91精品国产高清一区二区三密臀| 视频小说一区二区| 亚洲第一av在线| 一本色道综合久久欧美日韩精品| 国产综合色激情| 欧美日产在线观看| 无套内谢丰满少妇中文字幕| 亚洲专区**| 亚洲精品短视频| 亚洲国产欧美视频| 久久av免费| 色妞久久福利网| 国产suv精品一区二区68| 亚洲天堂免费| 久久久久久午夜| 中文字字幕在线中文| 日韩avvvv在线播放| 国产精品一区二区性色av| 国产精品久久影视| 国产美女精品在线| 国产精华一区二区三区| 四虎在线视频免费观看| 91免费视频网| 亚洲综合视频一区| 黄色小说在线播放| 色婷婷国产精品| 永久免费的av网站| www.亚洲一二| 亚洲欧美变态国产另类| 潮喷失禁大喷水aⅴ无码| 中文字幕午夜精品一区二区三区 | 日韩在线综合网| 日韩精品极品| 欧美人xxxx| 中文字幕天堂av| 国产一区二区三区四区二区 | 国产精品视频内| 国产精品女同一区二区| 成人毛片在线观看| 日本一区二区三区四区高清视频| 天天干天天摸天天操| 久久精品视频一区二区三区| 一本久道久久综合狠狠爱亚洲精品| 国产黄色在线| 一区二区日韩电影| 免费大片在线观看| 视频欧美一区| 在线精品国产成人综合| 久久久久噜噜噜亚洲熟女综合| 99精品视频精品精品视频| 久久久久久国产精品| 中文字幕亚洲乱码熟女1区2区| 亚洲一区二区三区免费在线观看| 欧美激情国产日韩精品一区18| 国产稀缺精品盗摄盗拍| 亚洲小说区图片区| 国产欧美精品一区二区三区-老狼 国产欧美精品一区二区三区介绍 国产欧美精品一区二区 | 希岛爱理中文字幕| 99精品国产在热久久婷婷| 国产日产欧美精品| 欧美女v视频| 亚洲一区二区三区四区在线观看 | 99精品欧美一区二区| 66国产精品| 国产精品第一视频| 天天操天天干天天| 亚洲激情一二三区| 依人在线免费视频| 国产乱码精品一区二区亚洲| 久久免费视频在线观看| 国产精品久久欧美久久一区| 欧美激情在线一区二区| 99999精品视频| 国产精品毛片av| 色综合五月天导航| 国产乱码精品一区二区三区精东| 国产精品一区二区在线观看不卡| 99中文字幕| 日本综合在线| 精品视频一区三区九区| 国产精品亚洲无码| 亚洲美女一区| 国产在线精品一区二区中文| 影音先锋男人在线资源| 91精品在线观看入口| 三级影片在线观看| 久久爱另类一区二区小说| 亚洲欧美国产精品桃花| 国产经典一区| 在线观看国产精品日韩av| 好看的av在线| 久久综合色8888| 日韩免费毛片视频| 国产一区三区在线播放| 国产成人拍精品视频午夜网站 | 亚洲性受xxx喷奶水| 亚洲国产高清福利视频| 国产午夜精品无码| 成人午夜短视频| 国产美女主播在线播放| 超碰成人在线观看| 欧美激情免费看| 日本成人动漫在线观看| 精品magnet| 高潮毛片无遮挡| 日本特黄久久久高潮| 四虎影院一区二区三区| 黄色欧美视频| 久久国产精品电影| 刘亦菲毛片一区二区三区| 无吗不卡中文字幕| 免费在线观看你懂的| 奇米在线7777在线精品| 伊人久久av导航| 秋霞一区二区三区| 69久久夜色精品国产69乱青草| 97caocao| 亚洲一区在线观看视频| 亚洲制服丝袜在线播放| 亚洲自啪免费| 亚洲国产精品一区二区第一页| 欧美freesex黑人又粗又大| 日韩久久午夜影院| 中文字幕一区二区三区四区视频| 99精品黄色片免费大全| heyzo国产| 日韩电影二区| 国产精品毛片va一区二区三区| 黄色网址免费在线观看| 日韩精品在线一区二区| 四虎精品永久在线| 国产精品成人在线观看| 亚洲成年人在线观看| 日韩激情av在线| 在线播放豆国产99亚洲| 久久精品色综合| 国产成人在线一区| 宅男在线观看免费高清网站| 日韩va亚洲va欧洲va国产| 伊人久久一区二区| 五月天激情综合| 91久久久久久久久久久久久久| 久久er99热精品一区二区| 国产精品videossex国产高清| 亚洲伦理网站| 欧美在线观看日本一区| 97超碰在线公开在线看免费| 亚洲精品自拍偷拍| 国产福利视频导航| 色爱区综合激月婷婷| 精品人妻伦九区久久aaa片| 97se亚洲国产综合自在线 | 日本美女一区二区三区| 中文字幕日韩精品无码内射| 国产一区二区三区网| 国产精品国产亚洲精品看不卡15| 天堂8中文在线| 亚洲欧美激情四射在线日| 精品人妻一区二区三区四区不卡 | 亚洲中文一区二区三区| 亚洲妇女屁股眼交7| 波多野结衣喷潮| 久久久综合精品| 成人在线观看一区二区| 国产一区亚洲一区| 丝袜制服一区二区三区| 亚洲免费在线| 欧美日韩性生活片| 欧美1区视频| 一区二区三区四区五区视频| 亚洲精品国产动漫| 国产日韩在线一区二区三区| 国产精品亚洲欧美一级在线 | 免费成人av电影| 欧美精选在线播放| 国产视频1区2区| 在线成人直播| 亚洲人成电影在线播放| 亚洲国产www| 欧美日韩三级在线| www.亚洲激情| 欧美粗暴jizz性欧美20| 一区二区三区四区欧美日韩| 欧美一区电影| 日韩欧美国产二区| 中国av一区| 欧美三级华人主播| 国产精品天天看天天狠| 一区二区三区自拍| 中国1级黄色片| 久久久精品人体av艺术| 偷拍女澡堂一区二区三区| 少妇高潮一区二区三区99| 91成人性视频| 色多多在线观看| 欧美最顶级丰满的aⅴ艳星| bl视频在线免费观看| 久久久久久久国产精品视频| 蜜臀av在线| 亚洲免费av网站| 综合 欧美 亚洲日本| 2024国产精品视频| 国产又黄又粗又猛又爽的视频| 99久热在线精品996热是什么| 国产一区二区伦理片| 邪恶网站在线观看| 极品少妇xxxx精品少妇| 伦伦影院午夜理论片| 国产成人精品亚洲午夜麻豆| 在线观看亚洲免费视频| 97久久超碰国产精品| 亚洲精品色午夜无码专区日韩| 成人一区二区三区视频在线观看 | 日韩av在线看免费观看| 久久久电影一区二区三区| 国产三级在线观看完整版| 亚洲欧洲美洲综合色网| 国产a免费视频| 午夜av一区二区三区| 无码视频在线观看| 666欧美在线视频| 黄色片一区二区三区| 亚洲久久久久久久久久| 一级毛片视频在线| 欧美黄色三级网站| 成人激情综合| 亚洲一区久久久| 欧美亚洲国产日韩| 中文字幕久精品免| 一级成人国产| 色播五月激情五月| av一区二区不卡| 影音先锋男人看片资源| 亚洲妇女屁股眼交7| 国产成人精品亚洲| 欧美成人伊人久久综合网| 青青草观看免费视频在线 | 91九色单男在线观看| 亚洲大奶少妇| 日韩三级电影| 最新日韩av| 一起操在线视频| 91麻豆swag| 激情综合五月网| 在线精品国精品国产尤物884a | 欧美群妇大交群中文字幕| 亚洲精品国偷拍自产在线观看蜜桃 | 麻豆映画在线观看| 美女诱惑一区| 亚洲精品无码久久久久久久| 久久亚洲综合色| 久久久无码一区二区三区| 在线观看视频一区二区| 国产香蕉在线观看| 久久精品成人一区二区三区| 色老头在线一区二区三区| 91久久伊人青青碰碰婷婷| 欧美日韩在线二区| 91九色在线观看视频| 国产一区亚洲一区| 人妻互换一区二区激情偷拍| 精品日本高清在线播放| 国产黄色av片| 久久福利视频导航| www.久久.com| 免费日韩电影在线观看| 精品动漫一区| 亚洲熟女乱综合一区二区| 国产精品美女久久久久久久久久久 | 性一交一乱一透一a级| 中文字幕在线看视频国产欧美在线看完整 | 欧美日韩卡一| 久久精品国产美女| 精品动漫av| www.四虎在线| 亚洲一区二区高清| 性生活视频软件| 久久99国产精品自在自在app| wwww亚洲| 国产激情一区二区三区在线观看 | 另类中文字幕国产精品| 久久99精品久久久久子伦| 黄色欧美日韩| 亚洲精品第二页| 一区二区三区久久| 99久久精品无免国产免费| 中文字幕亚洲欧美日韩高清| 亚洲天堂一区二区| 欧美中日韩免费视频| 久久精品麻豆| 三级视频网站在线观看| 亚洲 欧美综合在线网络| 黑人精品一区二区| 国内外成人免费激情在线视频 | 国产美女精品免费电影| 神马影视一区二区| 欧美污视频网站| 国产午夜精品在线观看| 无码人妻丰满熟妇区五十路| 亚洲午夜女主播在线直播| 全球最大av网站久久| 五月天久久狠狠| 久久66热偷产精品| 波多野结衣亚洲色图| 精品不卡在线视频| sis001欧美| 香蕉久久夜色| 国产在线精品免费| 欧美日韩人妻精品一区二区三区 | 精品区在线观看| 九色91av视频| 欧美一级二级三级视频| av免费在线播放网站| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲精品无amm毛片| 性色av一区二区三区免费| 九九免费精品视频在线观看| 成人精品小视频| 日韩毛片高清在线播放| 国产999久久久| 欧美亚洲在线观看| 日韩精品一卡| 亚洲av综合色区无码另类小说| 国产精品久久久久桃色tv| av一区二区三| 欧美一区二区视频97| 天堂网在线观看国产精品| 国产人妖在线观看| 欧美在线观看一区二区| 羞羞网站在线看| 麻豆成人av| 国产伦精品一区二区三区视频青涩 | 久久成人av| 一级日本黄色片| 日韩欧美高清视频| 黄色网址在线免费| 玛丽玛丽电影原版免费观看1977| 精品成人免费| 国产精品69久久久久孕妇欧美| 日韩欧美在线看| 黄色成年人视频在线观看| 国产区二精品视| 蜜臀av一区二区三区| 四虎成人精品永久免费av| 夜夜嗨av一区二区三区免费区 | 艳妇乳肉豪妇荡乳xxx| 一本色道久久加勒比精品|