IOS覆盖率报告info文件解读

news2024/12/25 1:21:19

一,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.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 --format=html -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: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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1502025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣hot100:240.搜索二维矩阵II(脑子)

吉大21级算法分析与设计的一道大题,由于每一行都是排好序的直接逐行二分 可以达到:O(mlogn)。但是这里追求更广的思路可以使用其他方法。 矩阵四分: 在矩阵中用中心点比较,如果target大于中心点的值,则由于升序排列&am…

Java面试(8)

三次握手与四次挥手 三次握手: 客户端与服务端建立TCP连接时总共需要发送三个包 三次握手过程中容易引发SYN(DDOS)攻击,所谓SYN攻击是指: 攻击客户端,在短时间内伪造大量不存在的IP地址,向服务端不断发送syn包,服务端收到包后向客户端发送确认包,但由于客户端IP不存在,导致服务…

FPGA FIFO 读取模式

FPGA FIFO 读取模式分两种: Normal Mode: In normal mode, the “rdreq” signal serves as the read request or read enable. When this signal goes high, the data output provides the first data from the FIFO.Essentially, in normal mode, data is availa…

Prompt进阶系列1:LangGPT(从编程语言反思LLM的结构化可复用提示设计框架)

Prompt进阶系列1:LangGPT(从编程语言反思LLM的结构化可复用提示设计框架) 大语言模型 (Large Language Models, LLMs) 在不同领域都表现出了优异的性能。然而,对于非AI专家来说,制定高质量的提示来引导 LLMs 是目前AI应用领域的一项重要挑战。现有的提示…

【经典案例】某大型公园构建检查监督机制项目纪实

——引入网格化监督管理机制,实现责任、人员、信息三位一体 公园管理由于其本身地域范围广的特性在工作中很难进行有效的监督检查,该公园的监督检查由不同的部门分别负责,同部门检查时往往会处于情面而使检查流于形式,并且公园的监…

VSCode搭建ARM开发环境

为了构建Cortex M系列单片机免费开源的开发环境,网络上了解来看VSCODEGCCJLINK是一套比较高效的组合方式,下面记录环境搭建的流程。 我这边的PC环境为 WIN7专业版64bit。 需要用到的工具 Visual Studio CodeSTM32CubemxARM GCC 交叉编译工具链&#x…

javaWebssh文玩竞价管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计

一、源码特点 java ssh文玩竞价管理系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0…

MySQL--索引底层数据结构详解

索引是什么? 索引是帮助MySQL高效获取数据的排好序的数据结构,因此可知索引是数据结构。 概念很抽象,但是类比生活中的例子就很容易理解,比如一本厚厚的书,我们想取找某一小节,我们可以根据目录去快速找到…

复试人工智能前沿概念总结

1.大模型相关概念(了解即可) 1.1 GPT GPT,全称为Generative Pre-training Transformer,是OpenAI开发的一种基于Transformer的大规模自然语言生成模型。GPT模型采用了自监督学习的方式,首先在大量的无标签文本数据上进…

Linux配置.bashrc文件导致各种命令(vim、sudo)失效。

Linux配置.bashrc文件导致各种命令(vim、sudo)失效。 起因是 nvcc-V一直报错:-bash:nvcc: command not found 踩坑记录:上网一查说是没有配置cuda的环境变量。于是去修改了bashrc文件,在最下面…

Imagination:RISC-V CPU的重要力量

根据SHD集团最近发布的报告显示,RISC-V正全速发展中。通过分析从2021年到2030年这十年间RISC-V核在不同应用和功能领域的潜在市场,作者Rich Wawrzyniak得出结论称,到2030年,22.3%的SoC将包含RISC-V CPU,RISC-V的收入预…

如何保证消息不丢之MQ重试机制消息队列

1. 简介 死信队列,简称:DLX,Dead Letter Exchange(死信交换机),当消息成为Dead message后,可以被重新发送到另外一个交换机,这个交换机就是DLX 那么什么情况下会成为Dead message&a…

Unity中PICO实现移动交互

文章目录 前言一、在允许行走的地面加上对应的组件1、Teleportation Anchor 移动锚点2、Teleportation Area 移动区域 二、在 玩家(需要移动的对象)上挂载对应组件1、Teleportation Provider 被移动对象2、在 Teleportation Anchor 或 Teleportation Are…

<商务世界>《第9课 产品地图》

1 产品地图 产品地图的核心是产品或用户的业务流程或地图导航,从用户和产品两条路线出发,搭建业务架构,并划分明确的功能模块,用图形化方式记录、整理、表现出产品的清晰特点。其中,包括用户在使用过程中做了什么、感…

景联文科技:专业提供高质量大语言模型训练数据

2024年,数字经济被再次写入政府工作报告中,报告指出要深化大数据、人工智能等研发应用,打造具有国际竞争力的数字产业集群。 大模型作为生成式人工智能的基础,日益成为国际科技竞争的焦点。人大代表杨剑宇指出,尽管我国…

SHARE 100M PRO:航测领域的多面手

在无人机航测领域,SHARE 100M PRO单镜头航测相机以其1.02亿像素的中画幅传感器和创新技术,正在重塑倾斜摄影的精度和效率。这款相机不仅在城市规划和土地管理中发挥着重要作用,还在环境监测、基础设施建设、农业管理等多个航测领域展现出其卓…

2024 RubyMine 激活,分享几个RubyMine 激活的方案

文章目录 RubyMine 公司简介我这边使用RubyMine 的理由RubyMine 2023.3 最新变化AI Assistant 正式版对 AI 生成名称建议的支持改进了 Ruby 上下文单元测试生成 RailsRails 应用程序和引擎的自定义路径Rails 路径的自动导入对存储在默认位置之外的模型、控制器和邮件器的代码洞…

Vue.js 进阶技巧:keep-alive 缓存组件解析

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

视频点播系统|基于SSM 框架+ Mysql+Java+B/S架构技术的视频点播系统设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

目录 文末获取源码 系统功能实现 学生前台功能 学生登录、学生注册 个人中心 视频信息 我的收藏 系统公告 教师功能实现 管理员登录 管理员功能实现 视频分类管理 轮播图管理 数据库设计 系统的功能结构图 lumwen参考 概述 源码获取 文末获取源码 系统功能实…

C语言分析基础排序算法——选择排序

目录 选择排序 选择排序 堆排序 选择排序 选择排序 选择排序的基本思路是,定义两个区间指针begin和end,遍历数组中的每一个数据找出最大的数据的下标和最小的数据的下标,之后与begin和end指针分别交换小数据与begin的位置以及大数据和e…