第4.3節 iOS App生成追溯關系

iOS生成追溯關系的邏輯和Android端從用戶角度來說是一致的,就是需要通過開始和結束關聯用例,將用例信息與覆蓋率信息建立關系,然后再解析覆蓋率數據。

4.3.1 添加關聯用例彈層

關聯用例彈層和Android類似,只要你能設計出相應的樣式即可,下面給出彈層的部分代碼,你可以根據自己的需求進行優化。

- (void)addFoatingMicInView:(UIView *)view :(NSString *) acenv :(NSString *)kbuildid :(createSwiftCodeCov *) cscc{//添加浮層代碼,人工打點獲取覆蓋率數據self.uistackview=[[UIStackView alloc] initWithFrame:CGRectMake(10, 100, 250, 40)];self.uistackview.axis=UILayoutConstraintAxisHorizontal;self.uistackview.spacing=1;self.uistackview.backgroundColor=UIColor.lightGrayColor;self.uistackview.layer.cornerRadius=20;//添加標簽,用于占位self.caseidlabel=[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 1, 20)];self.caseidlabel.text=@" ";[self.uistackview addArrangedSubview:self.caseidlabel];//標簽self.corelabel=[[UILabel alloc] initWithFrame:CGRectMake(10, 0, 20, 20)];self.corelabel.text=@"開始關聯用例ID: ";self.corelabel.textAlignment=NSTextAlignmentLeft;self.corelabel.font= [UIFont systemFontOfSize:14];[self.uistackview addArrangedSubview:self.corelabel];//buttonself.uibutton=[UIButton buttonWithType:UIButtonTypeCustom];self.uibutton.frame=CGRectMake(0, 0, 0, 0 );[self.uibutton setImage:[UIImage imageNamed:@"record"] forState:UIControlStateNormal];[self.uibutton setImageEdgeInsets:UIEdgeInsetsMake(8, 0, 8, 0)];self.uibutton.imageView.contentMode=UIViewContentModeScaleAspectFit;[self.uistackview addArrangedSubview:self.uibutton];[view addSubview:self.uistackview];self.panSuperView =view;UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panFloatingMic:)];[self.uistackview addGestureRecognizer:pan];UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(recordClick:)];[self.uibutton addGestureRecognizer:tap];//初始化時隱藏self.uistackview.hidden=YES;}//新定義button點擊事件
-(void) recordClick:(UITapGestureRecognizer *)tap {//刪除覆蓋率數據文件NSLog(@"********開始錄制覆蓋率數據********");self.uibutton.hidden=true;//開始錄制deeplinkNSString *tmp=[@"用例ID: " stringByAppendingString: self.caseid];self.corelabel.text=[tmp stringByAppendingString:@"錄制中....         "];self.corelabel.textAlignment=NSTextAlignmentLeft;if ([self.covflag isEqual:@"2"]){NSLog(@"先上傳自動收集的覆蓋率數據,再清空收集用例覆蓋率數據!");//先上傳自動收集的覆蓋率數據,再清空收集用例覆蓋率數據 2022-12-12[self.swiftoper uploadCodeCoverageFiles:@"" :@""];NSLog(@"上傳自動收集的覆蓋率數據,開始收集用例對應的覆蓋率數據!");[self.swiftoper clearCodeCoverageFiles];}else{//開始錄制用例,清除舊的覆蓋率數據文件[self.swiftoper clearCodeCoverageFiles];}}//關閉收集覆蓋率彈層
- (void)hideFloatingMicrophone{NSString *tmp=[@"關聯用例ID:" stringByAppendingString: self.caseid];self.corelabel.text=[tmp stringByAppendingString:@"結束!!!        "];self.corelabel.textAlignment=NSTextAlignmentLeft;[self performSelector:@selector(dissmisfloatview:)withObject:self.uistackview afterDelay:3.0];//上傳覆蓋率數據[self.swiftoper uploadCodeCoverageFiles:self.caseid :@""];
}

彈層示例:

樣式做的比較簡單,需要請專業人員進行優化一下。

4.3.2 覆蓋率文件解析

通過關聯用例操作,可以將覆蓋率數據文件上傳到精準測試平臺,現在分兩種情況再進行解析:

一,Object C覆蓋率解析

1,獲取gcda文件

通過關聯用例操作,拿到指定文件夾下的所有gcda文件,也就是被測試應用的覆蓋率數據文件,是一個zip包。

2,構建文件

通過構建平臺,拿到.o,.gcno文件,再從git上下載源碼。

3,將所有文件放在一起

將源碼文件,.o, .gcno, .gcda文件放在一起。

4,生成覆蓋率報告

執行下面兩個命令:

geninfo --ignore-errors inconsistent
-o coverage.info ./qt-360-master genhtml
--ignore-errors inconsistent 
-o coverage_report coverage.info

5,解析info文件

讀取info文件,通過對應行號的執行次數來解析文件覆蓋的行啊。也就是說一個類中,對應的行號只要不為0,就把行號記錄下來,最后得到文件行號列表:

SF:/Users/*****/TestmPinYin.swift
FN:16,$s4Kima9KimPinYinC7preloadyyFZ
...
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
.....

得到覆蓋文件詳情

{"/Users/*****/TestmPinYin.swift":[16,17,18],"文件2":[行號列表]....}

6,分析類中的函數

使用工具:https://github.com/L-Zephyr/Drafter,來解析一個類中的函數

使用命令:

draft -f 文件全路徑.m

就可以得到文件中的函數列表以及函數的起始位置。

根據類覆蓋的行號,類中函數的起始位置,就可以得到測試用例覆蓋的函數列表。

二,Swift項目覆蓋率解析

Swift項目產生的覆蓋率文件是profraw文件,需要通過如下步驟進行處理。

1,轉為profdata文件

使用命令將profraw文件轉化成profdata文件。

xcrun llvm-profdata merge -sparse ./covdata.profraw -o ./covdata.profdata

2,將profdata文件轉化成info報告文件

將覆蓋率數據文件轉化成profdata文件后,要下載覆蓋率測試對應的安裝包,解壓出其中的二進看文件,然后通過下面的命令生成info報告文件。

xcrun llvm-cov export 二進制文件 --instr-profile=./covdata.profdata -use-color --format=lcov > ./report.info

3,解析用例覆蓋信息

當拿到info文件后,就可以按照上面介紹的步驟,解析出用例覆蓋的文件以及文件中對應覆蓋的類信息。

{"類文件1":["fun1","fun2"...],"類文件2":["fun1","fun2"...],"類文件3":["fun1","fun2"...]}

最后將用例與覆蓋的類函數信息寫入數據庫,就建立起用例與代碼的關聯關系。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/89806.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/89806.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/89806.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

STM32 USB鍵盤實現指南

概述 在STM32上實現鍵盤功能可以通過USB HID(人機接口設備)協議來實現,使STM32設備能被計算機識別為標準鍵盤。以下是完整的實現方案: 硬件準備 STM32開發板(支持USB,如STM32F103、STM32F4系列) USB接口(Micro USB或Type-C) 按鍵矩陣或單個按鍵 必要的電阻和連接…

繼電器基礎知識

繼電器是一種電控制器件,它具有隔離功能的自動開關元件,廣泛應用于遙控、遙測、通訊、自動控制、機電一體化及電力電子設備中,是最重要的控制元件之一。 繼繼電器的核心功能是通過小電流來控制大電流的通斷。它通常包含一個線圈和一組或多組觸點。當給繼電器的線圈施加一定…

MYSQL:庫的操作

文章目錄MYSQL:庫的操作1. 本文簡述2. 查看數據庫2.1 語法3. 創建數據庫3.1 語法3.2 示例3.2.1 創建一個簡單的數據庫3.2.2 使用 IF NOT EXISTS 防止重復創建3.2.3 再次運行,觀察現象3.2.4 查看這個警告到底是什么3.2.5 創建數據庫允許使用關鍵字4. 字符…

Xilinx FPGA XCKU115?2FLVA1517I AMD KintexUltraScale

XCKU115?2FLVA1517I 隸屬于 Xilinx (AMD)Kintex UltraScale 系列,基于領先的 20?nm FinFET 制程打造。該器件采用 1517?ball FCBGA(FLVA1517)封裝,速度等級 ?2,可實現高達 725?MHz 的核心邏…

Linux Ubuntu安裝教程|附安裝文件?安裝教程

[軟件名稱]: Linux Ubuntu18.0 [軟件大小]: 1.8GB [安裝環境]: VMware [夸克網盤接] 鏈接:https://pan.quark.cn/s/971f685256ef (建議用手機保存到網盤后,再用電腦下載)更多免費軟件見https://docs.qq.com/sheet/DRkdWVFFCWm9UeG…

深入解析Hadoop YARN:三層調度模型與資源管理機制

Hadoop YARN概述與產生背景從MapReduce到YARN的演進之路在Hadoop早期版本中,MapReduce框架采用JobTracker/TaskTracker架構,這種設計逐漸暴露出嚴重局限性。JobTracker需要同時處理資源管理和作業控制兩大核心功能,隨著集群規模擴大&#xff…

Pycaita二次開發基礎代碼解析:邊線提取、路徑追蹤與曲線固定

本文將深入剖析CATIA二次開發中三個核心類方法:邊線提取特征創建、元素結構路徑查找和草圖曲線固定技術。通過逐行解讀代碼實現,揭示其在工業設計中的專業應用價值和技術原理。一、邊線提取技術:幾何特征的精確捕獲與復用1.1 方法功能全景ext…

Linux 任務調度在進程管理中的關系和運行機制

📖 推薦閱讀:《Yocto項目實戰教程:高效定制嵌入式Linux系統》 🎥 更多學習視頻請關注 B 站:嵌入式Jerry Linux 任務調度在進程管理中的關系和運行機制 Linux 內核中的“任務調度”是進程管理系統的核心部分,相互關聯而…

JAVA后端開發—— JWT(JSON Web Token)實踐

1. 什么是HTTP請求頭 (Request Headers)?當你的瀏覽器或手機App向服務器發起一個HTTP請求時,這個請求并不僅僅包含你要訪問的URL(比如 /logout)和可能的數據(請求體),它還附帶了一堆“元數據&am…

【SVM smote】MAP - Charting Student Math Misunderstandings

針對數據不平衡問題,用調整類別權重的方式來處理數據不平衡問題,同時使用支持向量機(SVM)模型進行訓練。 我們通過使用 SMOTE(Synthetic Minority Over-sampling Technique)進行過采樣,增加少數…

repmgr+pgbouncer實現對業務透明的高可用切換

本方案說明 PostgreSQL repmgr:實現主從自動故障檢測與切換(Failover)。PgBouncer:作為連接池,屏蔽后端數據庫變動,提供透明連接。動態配置更新:通過repmgr組件的promote_command階段觸發腳本…

查找服務器上存在線程泄露的進程

以下是一個改進的命令,可以列出所有線程數大于200的進程及其PID和線程數: find /proc -maxdepth 1 -type d -regex /proc/[0-9] -exec sh -c for pid_dir dopid$(basename "$pid_dir")if [ -f "$pid_dir/status" ]; thenthreads$(aw…

Facebook 開源多季節性時間序列數據預測工具:Prophet 飽和預測 Saturating Forecasts

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。 Prophet 是一種基于加法模型的時間序列數據預測程序,在該模型中,非線性趨勢與年、周、日季節性以及節假日效應相匹配。…

從單線程到云原生:Redis 二十年演進全景與內在機理深剖

——從 1.0 到 7.2,一窺數據結構、網絡模型、持久化、復制、高可用與生態協同的底層脈絡(一)序章:為什么是 Redis 1999 年,Salvatore Sanfilippo 在開發一個實時訪客分析系統時,發現傳統磁盤型數據庫無法在…

得了甲亢軍隊文職體檢能過嗎

根據軍隊文職體檢現行標準,甲亢患者能否通過體檢需分情況判定,核心取決于病情控制狀態、治療結果及穩定時長。結合《軍隊選拔軍官和文職人員體檢通用標準》及補充規定,具體分析如下:?? 一、可直接通過體檢的情況臨床治愈滿1年且…

【編程語言】C、C++、C#深度對比:三種語言的演進歷程與應用場景

一、語言概述與歷史背景 (一)C語言:系統編程的基石誕生背景 1972年由Dennis Ritchie在貝爾實驗室開發為了重寫UNIX操作系統而創造從B語言演化而來,增加了數據類型設計目標:簡潔、高效、可移植設計哲學 “相信程序員”&…

《計算機網絡》實驗報告五 DNS協議分析與測量

目 錄 1、實驗目的 2、實驗環境 3、實驗內容 3.1 查看和配置本機的DNS系統 3.2 DNS信息測量 3.3 DNS協議分析 4、實驗結果與分析 4.1 查看和配置本機的DNS系統 4.2 DNS信息測量 4.3 DNS協議分析 5、實驗小結 5.1 問題與解決辦法: 5.2 心得體會&#x…

Python工廠方法模式詳解:從理論到實戰

一、工廠方法模式核心概念 工廠方法模式(Factory Method Pattern)是一種創建型設計模式,屬于經典23種設計模式之一。其核心思想是:定義一個創建對象的接口,但將具體對象的實例化過程延遲到子類中實現。這種模式通過引入…

python爬蟲獲取PDF

【前提:菜鳥學習的記錄過程,如果有不足之處,還請各位大佬大神們指教(感謝)】 1.方法一:網站找到目標數據【單篇PDF】 https://bidding.sinopec.com/tpfront/xxgg/004005/ 按F12,----檢查------…

IFN影視官網入口 - 4K影視在線看網站|網頁|打不開|下載

IFN影視是一個專注于影視內容的網站,提供電影、電視劇、綜藝等各類影視資源的在線觀看服務。該網站以用戶需求為導向,致力于為用戶提供高清、流暢的觀影體驗,并不斷更新內容以滿足不同用戶的觀看習慣和偏好。IFN影視的特色在于其內容豐富、分…