南宁京象建站公司江苏威达建设有限公司网站
news/
2025/10/6 20:15:48/
文章来源:
南宁京象建站公司,江苏威达建设有限公司网站,濮阳全员核酸检测,郑州心理咨询中心一#xff0c;iOS覆盖率报告生成逻辑
iOS覆盖率报告生成与Android有很大的不同#xff0c;主要的生成逻辑如下#xff1a; 1#xff0c;将profraw文件#xff0c;通过命令xcrun llvm-profdata merge -sparse转换成profdata;
2#xff0c;再将profdata文件#xff0c;通…一iOS覆盖率报告生成逻辑
iOS覆盖率报告生成与Android有很大的不同主要的生成逻辑如下 1将profraw文件通过命令xcrun llvm-profdata merge -sparse转换成profdata;
2再将profdata文件通过xcrun llvm-cov export生成一个中间的数据文件allreport.info文件
3将info文件替换里面的文件路径使用genhtml文件生成最终的覆盖率报告。
二info文件详解
在网络上查了一下iOS增量报告的生成几乎没有现成的方案通过分析allreport.info文件发现这个文件的信息如下所示
一个Swift 项目的覆盖率报告Info文件具体的内容如下 SF:/Users/sxf/Documents/精准测试/KimCode/iOSSDKInject/kim-ios/packages/kim-ios/Kim/DataHelper/KImPinYin.swift
FN:16,$s4Kima9KimPinYinC7preloadyyFZ
FN:20,$s4Kima9KimPinYinCACycfc
FN:24,$s4Kima9KimPinYinCfD
FN:28,$s4Kima9KimPinYinC12pinyinLoadedyyF
FN:33,$s4Kima9KimPinYinC7convertyS2SF
FN:42,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyF
FN:49,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FN:52,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FN:60,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyF
FN:67,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FN:70,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FN:78,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tF
FN:85,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_
FN:88,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_
FNDA:2,$s4Kima9KimPinYinC7preloadyyFZ
FNDA:0,$s4Kima9KimPinYinCACycfc
FNDA:0,$s4Kima9KimPinYinCfD
FNDA:0,$s4Kima9KimPinYinC12pinyinLoadedyyF
FNDA:0,$s4Kima9KimPinYinC7convertyS2SF
FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyF
FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyF
FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tF
FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_
FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_
FNF:14
FNH:1
DA:16,2
DA:17,2
DA:18,2
DA:20,0
DA:21,0
DA:22,0
DA:23,0
DA:24,0
DA:25,0
DA:26,0
DA:28,0
DA:29,0
DA:30,0
DA:31,0
DA:33,0
DA:34,0
DA:35,0
DA:36,0
DA:37,0
DA:38,0
DA:42,0
DA:43,0
DA:44,0
DA:45,0
DA:46,0
DA:47,0
DA:48,0
DA:49,0
DA:50,0
DA:51,0
DA:52,0
DA:53,0
DA:54,0
DA:55,0
DA:56,0
DA:60,0
DA:61,0
DA:62,0
DA:63,0
DA:64,0
DA:65,0
DA:66,0
DA:67,0
DA:68,0
DA:69,0
DA:70,0
DA:71,0
DA:72,0
DA:73,0
DA:74,0
DA:78,0
DA:79,0
DA:80,0
DA:81,0
DA:82,0
DA:83,0
DA:84,0
DA:85,0
DA:86,0
DA:87,0
DA:88,0
DA:89,0
DA:90,0
DA:91,0
DA:92,0
DA:93,0
DA:94,0
DA:95,0
DA:96,0
DA:97,0
DA:98,0
DA:99,0
DA:100,0
BRF:0
BRH:0
LF:91
LH:3
end_of_record
文件中有多个这样的数据块组成现在需要对这个数据块进行分析以便进行跨版本的覆盖率合并。但是从网上搜索相关介绍的时候几乎是没有的。于是我们只能借助于其他的数据进行比对比如说生成html报告使用如下命令
xcrun llvm-cov show ./Kima --instr-profile./commitA/coverage_mergedA.profdata --formathtml -use-color --output-dir./commitA/checkreport
打开报告内容如下 然后对照着这两份数据就可以大概了解一下相关的内容了
1类下的信息
SF:/Users/sxf/Documents/精准测试/KimCode/iOSSDKInject/kim-ios/packages/kim-ios/Kim/DataHelper/KImPinYin.swift
FN:16,$s4Kima9KimPinYinC7preloadyyFZ
FN:20,$s4Kima9KimPinYinCACycfc
FN:24,$s4Kima9KimPinYinCfD
FN:28,$s4Kima9KimPinYinC12pinyinLoadedyyF
FN:33,$s4Kima9KimPinYinC7convertyS2SF
FN:42,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyF
FN:49,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FN:52,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FN:60,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyF
FN:67,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FN:70,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FN:78,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tF
FN:85,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_
FN:88,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_
FNDA:2,$s4Kima9KimPinYinC7preloadyyFZ
FNDA:0,$s4Kima9KimPinYinCACycfc
FNDA:0,$s4Kima9KimPinYinCfD
FNDA:0,$s4Kima9KimPinYinC12pinyinLoadedyyF
FNDA:0,$s4Kima9KimPinYinC7convertyS2SF
FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyF
FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FNDA:0,$sSa4Kima8KimModel0B12SelectMemberCRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyF
FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFSbSS_Sit_SS_SittXEfU_
FNDA:0,$sSa4Kima8KimModel0B4UserVRszlE23sortByDisplayNamePinyinSayADGyFADSgSS_SitXEfU0_
FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tF
FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFSbSS_Sit_SS_SittXEfU_
FNDA:0,$sSa4Kima8KimModel0b18GroupMemberContactC0CRszlE23sortByDisplayNamePinyin15moveAdminToFistSayADGSb_tFADSgSS_SitXEfU0_
类中的函数信息
FN:16,$s4Kima9KimPinYinC7preloadyyFZ FN代表方法 16代表开始行号 后面的是方法名以及模块相关的信息。
FNDA:2,$s4Kima9KimPinYinC7preloadyyFZ FNDA:代码方法的覆盖情况 2代表方法中的代码可能执行的次数但不一定是所有的行都执行了需要具体分析 后面的是方法信息与FN相照应。
2方法覆盖率信息
FNF:14FNH:1
通过对比html报告可以看出 FNF:代码这个文件中的总方法数 FNH:为覆盖的方法数
而我们合并覆盖率报告的时候可以先对比一下总方法数是否一样如果相同再去考虑如何处理覆盖的方法数如果不同则选择最新版本的方法数在生成增量报告的时候无需要修改此处内容生成的报告会根据函数信息直接展示函数覆盖情况。
3行覆盖率信息
LF:91LH:3 LF: 代码这个文件的总行数总行数以最新的版本为准 LH为覆盖的行数合并覆盖率后需要统计一下合并后的覆盖行号更新一下这个数
DA:84,0 DAXX 代表文件中的第几行 0最后的数字代码此行执行了多少次如果为0则表示没有执行到也就是没有覆盖。
4分支覆盖
BRF:0BRH:0 BRF:为总分支数 BRH:为覆盖的分支数一般的Swift文件都是0
三iOS增量报告生成 通过分析info文件再结合获取一个需求的diff信息就能生成对应的增量覆盖率。具体逻辑如下所示 1根据一定的diff策略拿到对应需求的diff文件以及diff的行号。
由于git diff得到的信息再计算相应的diff行号可能存在有些行不是开发修改的行号虽然情况不多但也是有存在的机率。
2根据diff信息再过滤全量报告的allreport.info文件 根据diff行号过滤影响到的函数以及函数的覆盖信息 根据行号取对应的DA行号信息后面的数据保留表示覆盖的情况 更新行覆盖数据分支数据不用更新报告中不会展示。
3遍历完所有的diff文件生成增量报告diffreport.info文件
4通过genhtml命令将diffreport.info文件生成增量覆盖率报告。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929662.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!