小工具知识网

当前位置: 首页 > 行业知识 > IOS覆盖率报告info文件解读

行业知识

IOS覆盖率报告info文件解读

2026-11-12 18:40:43 来源:互联网转载

一,IOS覆盖率报告的生成

在做前���精准测试的时候,对于iOS端,通常会做如下操作:

(1)合并覆盖率数据

如下操作:

xcrun llvm-profdata merge coverage_file1657885040728.profraw coverage_file1657885829980.profraw test.profraw -output merged.profraw

(2)翻译覆盖率数据

xcrun llvm-profdata merge -sparse test.profraw -o test.profdata

(3)生成info文件

xcrun llvm-cov export ./shoppingCart --instr-profile=test.profdata -use-color --format=lcov > ./newreport.info

(4)生成html报告

./lcov-1.14/bin/genhtml -o html ./newreport.info

其中这个info文件非常重要,我们可以根据需求的diff代码,对其进行过滤,进行生成增量报告。同时在合并覆盖率报告的时候,也会处理这个info文件。但是在网上很难找到完整的info文件信息解读,经过我多方查找,不断测试,总结出info文件各个信息段的含义。

二,覆盖率报告info文件解读

一个Swift 项目的覆盖率报告Info文件,具体的内容如下:

SF:/Users/sxf/Documents/精准测试/KimCode/iOSSDKInject/kim-ios/packages/kim-ios/Kim/DataHelper/KImPinYin.swiftFN:16,$s4Kima9KimPinYinC7preloadyyFZFN:20,$s4Kima9KimPinYinCACycfcFN:24,$s4Kima9KimPinYinCfDFN:28,$s4Kima9KimPinYinC12pinyinLoadedyyFFN:33,$s4Kima9KimPinYinC7convertyS2SFFN:42,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFFN:49,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FN:52,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FN:60,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFFN:67,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FN:70,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FN:78,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFFN:85,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_FN:88,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_FNDA:2,$s4Kima9KimPinYinC7preloadyyFZFNDA:0,$s4Kima9KimPinYinCACycfcFNDA:0,$s4Kima9KimPinYinCfDFNDA:0,$s4Kima9KimPinYinC12pinyinLoadedyyFFNDA:0,$s4Kima9KimPinYinC7convertyS2SFFNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFFNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFFNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFFNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_FNF:14FNH:1DA:16,2DA:17,2DA:18,2DA:20,0DA:21,0DA:22,0DA:23,0DA:24,0DA:25,0DA:26,0DA:28,0DA:29,0DA:30,0DA:31,0DA:33,0DA:34,0DA:35,0DA:36,0DA:37,0DA:38,0DA:42,0DA:43,0DA:44,0DA:45,0DA:46,0DA:47,0DA:48,0DA:49,0DA:50,0DA:51,0DA:52,0DA:53,0DA:54,0DA:55,0DA:56,0DA:60,0DA:61,0DA:62,0DA:63,0DA:64,0DA:65,0DA:66,0DA:67,0DA:68,0DA:69,0DA:70,0DA:71,0DA:72,0DA:73,0DA:74,0DA:78,0DA:79,0DA:80,0DA:81,0DA:82,0DA:83,0DA:84,0DA:85,0DA:86,0DA:87,0DA:88,0DA:89,0DA:90,0DA:91,0DA:92,0DA:93,0DA:94,0DA:95,0DA:96,0DA:97,0DA:98,0DA:99,0DA:100,0BRF:0BRH:0LF:91LH:3end_of_record

    文件中有多个这样的数据块组成,现在需要对这个数据块进行分析,以便进行跨版本的覆盖率合并。但是,从网上搜索相关介绍的时候,几乎是没有的。于是我们只能借助于其他的数据进行比对,比如说,生成html报告,使用如下命令:

xcrun llvm-cov show ./Kima --instr-profile=./commitA/coverage_mergedA.profdata --format=html -use-color --output-dir=./commitA/checkreport

打开报告,内容如下:

然后对照着这两份数据,就可以大概了解一下相关的内容了:

(1)类相关的信息

SF:/Users/sxf/Documents/精准测试/KimCode/iOSSDKInject/kim-ios/packages/kim-ios/Kim/DataHelper/KImPinYin.swiftFN:16,$s4Kima9KimPinYinC7preloadyyFZFN:20,$s4Kima9KimPinYinCACycfcFN:24,$s4Kima9KimPinYinCfDFN:28,$s4Kima9KimPinYinC12pinyinLoadedyyFFN:33,$s4Kima9KimPinYinC7convertyS2SFFN:42,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFFN:49,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FN:52,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FN:60,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFFN:67,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FN:70,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FN:78,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFFN:85,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_FN:88,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_FNDA:2,$s4Kima9KimPinYinC7preloadyyFZFNDA:0,$s4Kima9KimPinYinCACycfcFNDA:0,$s4Kima9KimPinYinCfDFNDA:0,$s4Kima9KimPinYinC12pinyinLoadedyyFFNDA:0,$s4Kima9KimPinYinC7convertyS2SFFNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFFNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFFNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFFNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_FN:16,$s4Kima9KimPinYinC7preloadyyFZ
  • FN:代表方法

  • 16:代表开始行号

  • 后面的是方法名以及模块相关的信息。

    FNDA:2,$s4Kima9KimPinYinC7preloadyyFZ

    • FNDA:代码方法的覆盖情况

    • 2:代表方法中的代码可能执行的次数,但不一定是所有的行都执行了,需要具体分析;

    • 后面的是方法信息,与FN相照应。

      (2)方法覆盖率信息

      FNF:14 FNH:1

      通过对比html报告,可以看出:

      • FNF:代码这个文件中的总方法数;

      • FNH:为覆盖的方法数

        而我们合并覆盖率报告的时候,可以先对比一下总方法数是否一样,如果相同,再去考虑如何处理覆盖的方法数;如果不同,则选择最新版本的方法数;

        (3)行覆盖率信息

        LF:91 LH:3

        • LF: 代码这个文件的总行数,总行数以最新的版本为准;

        • LH:为覆盖的行数,合并覆盖率后,需要统计一下合并后的覆盖行号,更新一下这个数;

          (4)分支覆盖

          BRF:0 BRH:0

          • BRF:为总分支数

          • BRH:为覆盖的分支数,一般的Swift文件都是0

            三,覆盖率报告的合并

                在跨版本覆盖率报告合并的时候,早期就是通过处理两个info文件的不断源码文件覆盖率数据进行合并的,这个方法也适合更加精细化的合并策略,比如行级别的覆盖率处理等。

                后来又找到了快速的合并方法lcov -a参数进行合并。

            通过两次详细搜索,合并方法如下

            lcov -a test1.info -a test2.info -o allreport.info

            经过验证,合并结果达到了预期.

上一篇:短视频入门全解析,定义、特点及应用探索

下一篇:一篇文章搞懂前端HTML,CSS,JS(代码应用)