日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS代码覆盖率(二)-增量覆盖率自动化实践

發(fā)布時間:2023/12/8 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS代码覆盖率(二)-增量覆盖率自动化实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

全量代碼覆蓋率可以直觀的看到整個App的代碼的覆蓋率情況,但是往往有用的或者被關注的是增量代碼覆蓋率數(shù)據(jù)。經(jīng)過不斷的學習和探索,發(fā)現(xiàn)在基于git diff能力,通過一系列的處理獲取我們想要的增量的信息,結合覆蓋率信息,得到一份增量的覆蓋率信息。

一、獲取代碼diff

這里依舊以本工程demo為例進行說明

1、找到兩次提交確認增量代碼

通過 git log 找到最近一次(多次)的改動日志:

$ git log commit a8692db2716eeb909aa9a9e48a89ac1a5368fa1f (HEAD -> master, origin/master, origin/HEAD) Author: denglibing5 <denglibing3@jd.com> Date: Wed Jan 5 13:54:16 2022 +0800增量代碼測試commit 9ad563ef1f3f1306aeec9c409d354cd695b1003b Author: denglibing5 <denglibing3@jd.com> Date: Wed Jan 5 11:29:43 2022 +0800update

a8692db2716eeb909aa9a9e48a89ac1a5368fa1f 這次的修改文件如下:

2、輸出增量代碼信息

通過 git diff 輸出增量代碼信息,這里以 commitid 進行簡單驗證:

# 取完整commitid的前七位即可 $ git diff 9ad563e a8692dbdiff --git a/Coverage_Gather.md b/Coverage_Gather.md new file mode 100644 index 0000000..2774839 --- /dev/null +++ b/Coverage_Gather.md @@ -0,0 +1,22 @@ +# 增量代碼覆蓋率 + +> 全量代碼覆蓋率可以直觀的看到整個App的代碼的覆蓋率情況,但是往往有效或者被關注的是增量代碼覆蓋率數(shù)據(jù),這里是基于git能力,通過一系列的處理獲取我們想要的增量的信 息,結合覆蓋率信息,得到一份增量的覆蓋率信息。 + +## 一、獲取代碼diff + + + + + + + + + + + + + + + +本文參考 [獲取git增量代碼數(shù)據(jù)](https://blog.jerrychu.top/2020/06/07/%E8%8E%B7%E5%8F%96git%E5%A2%9E%E9%87%8F%E4%BB%A3%E7%A0%81%E6%95%B0%E6%8D%AE/) +diff --git a/Example/HDCoverageFramework/HDOCFramework.m b/Example/HDCoverageFramework/HDOCFramework.m index f617df7..5618bce 100644 --- a/Example/HDCoverageFramework/HDOCFramework.m +++ b/Example/HDCoverageFramework/HDOCFramework.m @@ -17,7 +17,14 @@ + (void)frameworkOCAction:(NSInteger)tag {NSLog(@"frameworkOCAction: %d", 2);}else if (tag == 3) { + NSLog(@"frameworkOCAction: new line");NSLog(@"frameworkOCAction: %d", 3); + if (random() % 2 == 0) { + NSLog(@"frameworkOCAction: new line random() %% 2 = 0"); + } + else { + NSLog(@"frameworkOCAction: new line random() %% 2 = 1"); + }}NSDictionary * envir = [[NSProcessInfo processInfo] environment];NSLog(@"envir : %@", envir); diff --git a/Example/HDCoverageFramework/HDSwiftFramework.swift b/Example/HDCoverageFramework/HDSwiftFramework.swift index 07d6661..20b6bb6 100644 --- a/Example/HDCoverageFramework/HDSwiftFramework.swift +++ b/Example/HDCoverageFramework/HDSwiftFramework.swift @@ -28,7 +28,14 @@ public struct HDSwiftFramework {print("frameworkSwiftAction: 1")}else if (tag == 2) { + print("frameworkSwiftAction: new line")print("frameworkSwiftAction: 2") + if (arc4random() % 2 == 0) { + print("frameworkSwiftAction: arc4random() %% 2 = 0") + } + else { + print("frameworkSwiftAction: arc4random() %% 2 = 1") + }}else if (tag == 3) {print("frameworkSwiftAction: 3") diff --git a/README.md b/README.md index 97cdde6..824f767 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ class HDCoverageTools: NSObject {static var shared = HDCoverageTools()// 注意:動態(tài)庫是需要單獨注冊,并且需要在動態(tài)庫中執(zhí)行__llvm_profile_write_file() + // func registerCoverage(moduleName: String) {let name = "\(moduleName).profraw"print("registerCoverage, moduleName: \(moduleName)") @@ -254,6 +255,16 @@ $ tree -L 3可以看出,`tag == 3` 的代碼行數(shù)并沒有執(zhí)行到,這正和上面測試的 `"Framework(OC)-Case1/Case2"` 符合。+ + +## 小結 + +全量代碼覆蓋率可以幫助開發(fā)者聚焦變動代碼的邏輯缺陷,從而更好地避免線上問題。這里更多的是講述基于 `Swift & Objective-C` 工程的 **全量代碼覆蓋率** 的方案,沒有原理,只有簡單的流程。中途嘗試過多個方案,最終依靠 `Cocoapods` 能力將自動化腳本賦能出去。 + +但是實際開發(fā)過程,不可能每次都去關注 全量代碼覆蓋率,下一篇繼續(xù)介紹 [增量代碼覆蓋率](./Coverage_Gather) + + +## 參考[Source-based Code Coverage for Swift Step by Step](https://nycode-jn.medium.com/source-based-code-coverage-for-swift-step-by-step-3df3c44c28d9) : 非常詳細的Swift代碼覆蓋率教程,受益匪淺。

以 HDOCFramework.m 進行說明:-表示刪除的行,+表示新增的行(修改其實就是刪除+新增);@@ -17,7 +17,14 @@ 表示刪除了原先從第17行開始的7行,新增了從第17行開始的14行。

3、增量代碼數(shù)據(jù)優(yōu)化

然而 HDOCFramework.m 的改動(新增)其實只有 20 、 22 、 23 、 24 、 25 、 26 、 27 7 行代碼,如下圖所示:

這里為什么和上面的 @@ -17,7 +17,14 @@ 不匹配呢?

這個是因為 git diff 并不是逐行進行比較的,而是默認以 3行 作為一個對比單元,只要對比單元內(nèi)有數(shù)據(jù)發(fā)生了變更,就認為這個單元是發(fā)生了變更的。所以我們看到雖然只修改了7行,git diff的結果卻說有14行發(fā)生了變更。

如果拿到14行進行增量計算雖然不會影響到diff的展示(我們可以看到上圖紅色/綠色部分確實是4行),但是卻會對我們統(tǒng)計新增/修改代碼行造成困擾。比如這次只修改了7行,但是git diff說有14行變更,導致統(tǒng)計到的數(shù)據(jù)偏大

進一步對 git diff進行深入研究,從 git diff 的幫助文檔中可以看到一個有意思的參數(shù):

-U<n> --unified=<n> Generate diffs with <n> lines of context instead of the usual three. Implies --patch. Implies -p.

也就是說,我們可以通過設置 unified 的值,來修改 git diff 的默認行為。嘗試再命令行中執(zhí)行:

$ git diff 9ad563e a8692db --unified=0diff --git a/Example/HDCoverageFramework/HDOCFramework.m b/Example/HDCoverageFramework/HDOCFramework.m index f617df7..5618bce 100644 --- a/Example/HDCoverageFramework/HDOCFramework.m +++ b/Example/HDCoverageFramework/HDOCFramework.m @@ -19,0 +20 @@ + (void)frameworkOCAction:(NSInteger)tag { + NSLog(@"frameworkOCAction: new line"); @@ -20,0 +22,6 @@ + (void)frameworkOCAction:(NSInteger)tag { + if (random() % 2 == 0) { + NSLog(@"frameworkOCAction: new line random() %% 2 = 0"); + } + else { + NSLog(@"frameworkOCAction: new line random() %% 2 = 1"); + }

這可以看到,本次的增量數(shù)據(jù)為: @@ -19,0 +20 @@ 、 @@ -20,0 +22,6 @@ 和 SourceTree 可視化符合。

4、解析增量代碼數(shù)據(jù)

拿到準確的diff數(shù)據(jù)之后,我們還需要把git diff輸出的數(shù)據(jù)轉化為代碼可以讀取的數(shù)據(jù)。對于增量代碼統(tǒng)計,我們希望獲取到如下數(shù)據(jù):“所有變更文件的文件名、每個變更文件對應的的所有變更代碼行”

其實 git diff輸出的結果中已經(jīng)包含了這兩份數(shù)據(jù),我們要做的就是從輸出的結果中解析出這些數(shù)據(jù)。這里直接使用業(yè)界現(xiàn)有的腳本即可: diffParser.rb ,將相關 ruby 文件拷貝到 CoverageResult 目錄中,方便管理

# diff 文件存放在 CoverageResult 目錄中 $ git diff 9ad563e a8692db --unified=0 > Example/CoverageResult/9ad563e.diff $ cd Example/CoverageResult $ tree -L 3 . ├── 9ad563e.diff ├── CoverageResult │?? └── HDCoverageDemo │?? ├── coverage │?? ├── index.html │?? └── style.css ├── GitDiff │?? ├── trollop.rb │?? └── utils │?? └── diffParser.rb ├── MachOFiles │?? └── HDCoverageDemo.app │?? ├── Base.lproj │?? ├── Frameworks │?? ├── HDCoverageDemo │?? ├── Info.plist │?? ├── PkgInfo │?? └── _CodeSignature ├── Profraw │?? ├── HDCoverageDemo.profdata │?? └── HDCoverageDemo.profraw └── hd_parse_profraw.sh$ ruby GitDiff/utils/diffParser.rb --diff-file=9ad563e.diff {"Coverage_Gather.md"=>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22], "Example/HDCoverageFramework/HDOCFramework.m"=>[20, 22, 23, 24, 25, 26, 27], "Example/HDCoverageFramework/HDSwiftFramework.swift"=>[31, 33, 34, 35, 36, 37, 38], "README.md"=>[123, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267]}

這里可能我們只需要關注制定格式的文件改動即可。因此我對 diffParser.rb 腳本進行了二次開發(fā),并且放入該工程中。

總結下來,本次增量代碼信息為:

{"Example/HDCoverageFramework/HDOCFramework.m"=>[20, 22, 23, 24, 25, 26, 27], "Example/HDCoverageFramework/HDSwiftFramework.swift"=>[31, 33, 34, 35, 36, 37, 38]}

不同公司會以不同的方式管理新舊版本的方式,比如通過tag , 這里可以通過 tag 找到對應的 commitid :

$ git show-ref --tags 1951d3e13100ce12b68d6b22f87cc5949bde4c09 refs/tags/1.0.0 a90c8b98df705cc67eb19109c303826540f63c56 refs/tags/1.0.1 534ed980c4f252042c931549b081e3938657f31b refs/tags/1.0.2 2c7419fc3d5b957a3516797e0b0406e6c7ef0c4e refs/tags/1.0.3 6630e06f12e2de11075347be0c4beaabd6acbcb5 refs/tags/1.0.4 4c9cc93f49b390700fb3a1d8b4f3a3d6dd3ed70e refs/tags/1.0.5 cd0a81b0e2978e0ddee87925cb283cf994731f53 refs/tags/1.0.6 ba48e7df3e9430d9c10df590f40531608c9cbf9d refs/tags/1.0.7 be20cea26c4669e5d15498fed619f0019d2c5840 refs/tags/1.0.8 ? CoverageResult git:(master) ? git show-ref 1.0.0 1951d3e13100ce12b68d6b22f87cc5949bde4c09 refs/tags/1.0.0 ? CoverageResult git:(master) ? git show-ref 1.0.1 a90c8b98df705cc67eb19109c303826540f63c56 refs/tags/1.0.1

二、基于 Clang 的增量代碼覆蓋率問題

上面已經(jīng)確認了增量覆蓋率的解決方案,在使用 HDCoverage 所說的,產(chǎn)物只有 *.profraw 和 *.profdata 文件。可惜的是他們都是二進制文件,即使通過 llvm-profdata 命令可以看到 profdata 的一些內(nèi)容大概,也無法和 git 的增量代碼給關聯(lián)起來,找了不少資源,大部分是基于 gcc 下的產(chǎn)物 *.info 進行關聯(lián)得到增量覆蓋率數(shù)據(jù),這里也確實耽誤了非常多的時間。

中途嘗試過將git增量數(shù)據(jù)對html產(chǎn)物進行修改、profdata 文件修改等方式均不能解決,網(wǎng)上也找了大量資料也不曾有方案。后面在反復閱讀 llvm-cov 和 llvm-profdata - Profile data tool 文檔之后,發(fā)現(xiàn)了最終的解決方案:

1、測試增量功能以便生成覆蓋率數(shù)據(jù)

以本工程的最新demo為例說明

因為本次提交修改HDOCFramework.m 、 HDSwiftFramework.swift 所以執(zhí)行測試用例,這里我分別點擊了:"Framework(OC)-Case2/Case3"、"FrameworkSwift)-Case2/Case3" 后,App退到后臺

查看控制臺,可以看到 profraw 文件:

registerCoverage, moduleName: HDCoverageDemo HDCoverageGather filePath: /Users/denglibing/Library/Developer/CoreSimulator/Devices/5D01D4AA-40AE-4FC6-845C-391A94828EE3/data/Containers/Data/Application/283906A5-1681-44A5-8522-126D29D2F148/Documents/HDCoverageDemo.profraw

將 HDCoverageDemo.profraw 拷貝到 CoverageResult/Profraw 目錄中;

2、生成代碼覆蓋率文件

通過 llvm-cov 命令將收集的 *.profraw 生成 *.profdata 文件:

# xcrun llvm-profdata merge -sparse *.profraw -o *.profdata$ xcrun llvm-profdata merge -sparse HDCoverageDemo.profraw -o HDCoverageDemo.profdata

3、逆向生成 GCC 下的代碼覆蓋率文件

也就是將 *.profdata 文件轉換生成 *.info 文件,一旦有了 *.info 便可以和 git增量數(shù)據(jù)整合了。

# xcrun llvm-cov export macho-path -use-color -instr-profile=*.profdata -format=lcov > *.info$ xcrun llvm-cov export /Users/denglibing/HDProject/HarryProject/iOS/HDCoverageDemo/CoverageResult/MachOFiles/HDCoverageDemo.app/HDCoverageDemo -instr-profile=HDCoverageDemo.profdata -format=lcov > HDCoverageDemo.info

4、Git增量和代碼覆蓋率整合

*.info 文件是可閱讀的文件,打開 HDCoverageDemo.info 可以看到本次測試的覆蓋率情況(只展示 HDOCFramework.m 、 HDSwiftFramework.swift 相關內(nèi)容)

SF:/Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/HDCoverageFramework/HDOCFramework.m FN:12,HDOCFramework.m:+[HDOCFramework frameworkOCAction:] FNDA:2,HDOCFramework.m:+[HDOCFramework frameworkOCAction:] FNF:1 FNH:1 DA:12,2 DA:13,2 DA:14,0 DA:15,0 DA:16,2 DA:17,1 DA:18,1 DA:19,1 DA:20,1 DA:21,1 DA:22,1 DA:23,0 DA:24,0 DA:25,1 DA:26,1 DA:27,1 DA:28,1 DA:29,2 DA:30,2 DA:31,2 DA:32,2 DA:33,2 LF:22 LH:18 end_of_record SF:/Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/HDCoverageFramework/HDSwiftFramework.swift FN:11,$s19HDCoverageFramework07HDSwiftB0V11saveProfileyyFZ FN:26,$s19HDCoverageFramework07HDSwiftB0V20frameworkSwiftActionyySiFZ FNDA:0,$s19HDCoverageFramework07HDSwiftB0V11saveProfileyyFZ FNDA:2,$s19HDCoverageFramework07HDSwiftB0V20frameworkSwiftActionyySiFZ FNF:2 FNH:1 DA:11,0 DA:12,0 DA:13,0 DA:14,0 DA:15,0 DA:16,0 DA:17,0 DA:18,0 DA:19,0 DA:20,0 DA:21,0 DA:22,0 DA:23,0 DA:24,0 DA:26,2 DA:27,2 DA:28,0 DA:29,2 DA:30,2 DA:31,1 DA:32,1 DA:33,1 DA:34,0 DA:35,1 DA:36,1 DA:37,1 DA:38,1 DA:39,2 DA:40,2 DA:41,1 DA:42,2 DA:43,2 DA:44,2 DA:45,2 DA:46,2 DA:47,2 LF:36 LH:20 end_of_record

如下是 info 文件的關鍵字解讀,可以參考學習下:

SF: <absolute path to the source file> # 文件的絕對路徑 FN: <line number of function start>,<function name> # 方法的開始行數(shù) FNDA:<execution count>,<function name> # 該方法執(zhí)行的次數(shù) FNF:<number of functions found> # 該方法被發(fā)現(xiàn)的次數(shù) FNH:<number of function hit> # 該方法被命中次數(shù)(疑惑) DA:<line number>,<execution count>[,<checksum>] # 代碼行數(shù),該行代碼執(zhí)行的次數(shù) LH:<number of lines with a non-zero execution count> # 可執(zhí)行的代碼總行數(shù),行代碼覆蓋率的分母 LF:<number of instrumented lines> # 執(zhí)行到的代碼總行數(shù),行代碼覆蓋率的分子作者:yuec 鏈接:https://juejin.cn/post/6844903904111493127 來源:稀土掘金 著作權歸作者所有。商業(yè)轉載請聯(lián)系作者獲得授權,非商業(yè)轉載請注明出處。

修改刪除 info 文件,只保留 git增量代碼行,也就是如下文件和對應行:

{"Example/HDCoverageFramework/HDOCFramework.m"=>[20, 22, 23, 24, 25, 26, 27], "Example/HDCoverageFramework/HDSwiftFramework.swift"=>[31, 33, 34, 35, 36, 37, 38]} SF:/Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/HDCoverageFramework/HDOCFramework.m FN:12,HDOCFramework.m:+[HDOCFramework frameworkOCAction:] FNDA:2,HDOCFramework.m:+[HDOCFramework frameworkOCAction:] FNF:1 FNH:1 DA:20,1 DA:22,1 DA:23,0 DA:24,0 DA:25,1 DA:26,1 DA:27,1 LF:22 LH:18 end_of_record SF:/Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/HDCoverageFramework/HDSwiftFramework.swift FN:11,$s19HDCoverageFramework07HDSwiftB0V11saveProfileyyFZ FN:26,$s19HDCoverageFramework07HDSwiftB0V20frameworkSwiftActionyySiFZ FNDA:0,$s19HDCoverageFramework07HDSwiftB0V11saveProfileyyFZ FNDA:2,$s19HDCoverageFramework07HDSwiftB0V20frameworkSwiftActionyySiFZ FNF:2 FNH:1 DA:31,1 DA:33,1 DA:34,0 DA:35,1 DA:36,1 DA:37,1 DA:38,1 LF:36 LH:20 end_of_record

并且保存為 HDCoverageDemo_gather.info

5、生成可視化增量代碼覆蓋率文件

$ genhtml -o html HDCoverageDemo_gather.info Reading data file HDCoverageDemo_gather.info Found 2 entries. Found common filename prefix "/Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example" Writing .css and .png files. Generating output. Processing file HDCoverageFramework/HDSwiftFramework.swift Processing file HDCoverageFramework/HDOCFramework.m Writing directory view page. Overall coverage rate:lines......: 78.6% (11 of 14 lines)functions..: 66.7% (2 of 3 functions)$ tree -L 2 . ├── HDCoverageDemo.info ├── HDCoverageDemo.profdata ├── HDCoverageDemo.profraw ├── HDCoverageDemo_gather.info └── html├── HDCoverageFramework├── amber.png├── emerald.png├── gcov.css├── glass.png├── index-sort-f.html├── index-sort-l.html├── index.html├── ruby.png├── snow.png└── updown.png2 directories, 14 files

打開 html/index.html 即可得到本次的增量代碼覆蓋率頁面:

點擊 Filename 區(qū)域的 某一個類可以查看具體的信息:

結合前面的代碼提交和上面的可視化,本次代碼改動共計 7 行,執(zhí)行測試后,執(zhí)行了 6 行,行代碼覆蓋率為 85.7% 。

如上就是整個增量代碼覆蓋率的實踐。

三、增量代碼覆蓋率腳本自動化

上面兩部已經(jīng)驗證了可行性,但是中間過程不僅多,而且繁碎,很容易出現(xiàn)錯誤。所以這里收攏成腳本,盡可能將大量重復易錯的地方自動執(zhí)行。

1、采集獲取覆蓋率文件

獲取 *.profraw 不在重復說明,直接使用 1、測試增量功能以便生成覆蓋率數(shù)據(jù):的數(shù)據(jù)即可。

2、一鍵生成代碼增量覆蓋率可視化

App運行后,會在項目根目錄自動生成 CoverageResult目錄,具體的內(nèi)入如下 :

$ tree -L 2 . ├── GitdiffUtils # git diff 工具類 │?? ├── trollop.rb │?? └── utils ├── Gitdiffs # git diff 的可用數(shù)據(jù) ├── MachOFiles # 代碼生成的二進制文件 │?? └── HDCoverageDemo.app ├── Profraw # 存放執(zhí)行的代碼覆蓋率文件 ├── hd_parse_profraw.sh # 生成全量代碼覆蓋率可視化頁面的腳本 └── hd_parse_profraw_gather.sh # 生成增量代碼覆蓋率可視化頁面的腳本6 directories, 3 files

將 *.profraw 拷貝到 CoverageResult/Profraw 中,然后執(zhí)行:

# 9ad563e:改動后的commitid a8692db:代碼對比的commitid $ sh hd_parse_profraw_gather.sh 9ad563e a8692db Results: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Results machOFiles: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/MachOFiles /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Results 存在 disposeProfrawFiles profraws: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Profraw disposeProfrawFiles profraw file: HDCoverageDemo.profraw ===================================findMachOFileName: HDCoverageDemo findMachOFilePath: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/MachOFiles/HDCoverageDemo.app/HDCoverageDemo ===================================disposeProfrawToHtmlByGenhtml, machoFileName: HDCoverageDemo machOFilePath: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/MachOFiles/HDCoverageDemo.app/HDCoverageDemo diff_file: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Gitdiffs/9ad563e.diff coverage_info_file: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Profraw/HDCoverageDemo.info ====== coverage_info_path: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Profraw coverage_info_file: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Profraw/HDCoverageDemo.info coverage_gather_file_path: /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Profraw/HDCoverageDemo_gather.info ====== Reading data file /Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example/CoverageResult/Profraw/HDCoverageDemo_gather.info Found 2 entries. Found common filename prefix "/Users/denglibing/HDProject/HarryProject/iOS/hdcoverage/Example" Writing .css and .png files. Generating output. Processing file HDCoverageFramework/HDSwiftFramework.swift Processing file HDCoverageFramework/HDOCFramework.m Writing directory view page. Overall coverage rate:lines......: 78.6% (11 of 14 lines)functions..: 66.7% (2 of 3 functions)

查看生成了哪些內(nèi)容:

$ tree -L 3 . ├── GitdiffUtils │?? ├── trollop.rb │?? └── utils │?? └── diffParser.rb ├── Gitdiffs │?? ├── 9ad563e.diff # 9ad563e 相較上次的全部改動信息 │?? └── 9ad563e.json # 9ad563e 相較上次處理過的改動信息(文件名+改動行數(shù)信息) ├── MachOFiles │?? └── HDCoverageDemo.app │?? ├── Base.lproj │?? ├── Frameworks │?? ├── HDCoverageDemo │?? ├── Info.plist │?? ├── PkgInfo │?? └── _CodeSignature ├── Profraw │?? ├── HDCoverageDemo.info # 全量代碼覆蓋率數(shù)據(jù) │?? ├── HDCoverageDemo.profdata │?? ├── HDCoverageDemo.profraw │?? └── HDCoverageDemo_gather.info # 9ad563e 相較上次的增量代碼覆蓋率數(shù)據(jù) ├── Results │?? └── HDCoverageDemo_gather │?? ├── HDCoverageFramework │?? ├── amber.png │?? ├── emerald.png │?? ├── gcov.css │?? ├── glass.png │?? ├── index-sort-f.html │?? ├── index-sort-l.html │?? ├── index.html │?? ├── ruby.png │?? ├── snow.png │?? └── updown.png ├── hd_parse_profraw.sh └── hd_parse_profraw_gather.sh12 directories, 23 files

3、增量代碼覆蓋率可視化

可視化文件在 Results/HDCoverageDemo_gather 中,打開 index.html 即可看到輸出結果,簡簡單單兩部即可輸出結果:

當然,實踐的開發(fā)過程中,肯定是比這個會復雜的多,比如每個公司的開發(fā)環(huán)境不同、多個覆蓋率數(shù)據(jù)合并、多模塊多倉庫代碼增量計算、動態(tài)庫的特殊處理等等。因為筆者在探索實踐前也找尋了大量的資料,收獲也挺多,但是未曾找到能覆蓋到 Swift 的增量覆蓋率的方向及具體細節(jié),所以才有了這一次可行性實踐。正好也填補一下在 Swift 開發(fā)增量代碼覆蓋率這一小點的空缺。如果有大佬發(fā)現(xiàn)有更加高效、靠譜的方案也請及時告知,共同學習共建起來。

Demo及腳本源碼地址,歡迎指導+Star

四、參考

獲取git增量代碼數(shù)據(jù) : 提供非常詳細的git增量代碼說明和腳本,非常贊

總結

以上是生活随笔為你收集整理的iOS代码覆盖率(二)-增量覆盖率自动化实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

久久视频99| 久久精品中文字幕一区二区三区 | 精品福利视频在线 | 成年人天堂com | 免费电影一区二区三区 | 成人精品99 | 久久久免费 | 免费观看日韩 | 夜夜操狠狠操 | 免费视频一区 | se视频网址 | 成年人视频在线免费播放 | 91在线播放国产 | 国产美女精品 | 欧美特一级片 | 免费视频99 | 国产手机在线精品 | 国产在线观看你懂得 | 国产色在线视频 | 久久精品一区二区三区四区 | 在线观看亚洲免费视频 | 国产精品成 | 亚洲影视资源 | 视频精品一区二区三区 | 中文字幕a∨在线乱码免费看 | 波多野结衣电影一区二区 | 国产黄网站在线观看 | 一本色道久久精品 | 欧美 日韩 视频 | 成人av视屏 | 国产精品久久久久久久久久久久 | 精品国产乱码一区二 | 成人av电影免费在线播放 | 免费91麻豆精品国产自产在线观看 | 国产精品久久久久一区二区 | 亚洲午夜久久久久 | 日日躁你夜夜躁你av蜜 | 99久久精品无免国产免费 | 国产精品96久久久久久吹潮 | 天天干.com | 国产精品免费一区二区 | 日韩精品久久久 | 91av社区| 日韩欧美成人网 | 91av网址 | 日本久久中文字幕 | 超碰97免费在线 | 中文字幕在线视频一区二区三区 | 亚洲理论电影网 | 夜夜躁日日躁狠狠久久88av | 在线观看亚洲电影 | 亚洲精品18日本一区app | 99re6热在线精品视频 | 在线日本看片免费人成视久网 | 操久在线| 亚洲v欧美v国产v在线观看 | 九九九视频在线 | 福利视频午夜 | 黄色成人影院 | 美女视频黄色免费 | 亚洲国产精品成人综合 | 国产精品1区2区3区在线观看 | 国产在线国偷精品产拍免费yy | 色噜噜日韩精品一区二区三区视频 | 69av视频在线 | 91av网址 | 国产精品一区二区白浆 | 亚洲 在线| 激情久久小说 | 精品一区二区三区在线播放 | 久久精选 | 天天要夜夜操 | 欧美日韩国产一区二区三区 | 国产69精品久久99的直播节目 | 天堂资源在线观看视频 | 亚洲精品在线看 | 亚洲国产字幕 | 操操综合网 | 国产日韩视频在线观看 | 欧美一级视频免费 | 欧美一区二区三区不卡 | 久久观看免费视频 | 一区二区三区视频 | 国产麻豆精品久久一二三 | 精品国产一区二区三区在线 | 国产欧美久久久精品影院 | 国产一区二区在线影院 | 丁香五香天综合情 | 最新中文字幕视频 | 激情综合五月天 | 最新一区二区三区 | 二区三区在线 | 五月婷婷一区 | 99在线高清视频在线播放 | 日韩免费观看高清 | 国产成人免费在线 | 欧美一区二区在线免费看 | 精品国产伦一区二区三区免费 | 伊人久久精品久久亚洲一区 | 久操视频在线免费看 | 成人试看120秒 | 亚在线播放中文视频 | 少妇性aaaaaaaaa视频 | 亚洲一二三区精品 | 亚洲国产黄色 | 黄色av免费电影 | a黄色大片 | 国产高清黄色 | 麻豆国产在线视频 | 91精品视频免费在线观看 | 成人97视频一区二区 | 久操视频在线 | 久久国产欧美日韩精品 | 国产福利一区二区三区在线观看 | 免费看片网页 | 免费在线观看黄 | 日韩在线观看视频中文字幕 | 93久久精品日日躁夜夜躁欧美 | 欧美一级片免费 | 在线观看91网站 | 日韩av三区 | 欧美日韩首页 | 久久国产露脸精品国产 | 免费看一级黄色大全 | 在线日韩一区 | 麻豆精品在线 | 又黄又爽又色无遮挡免费 | 久久久久久免费网 | 综合网成人| 亚洲精品久久在线 | 日韩伦理片一区二区三区 | 日本中文字幕网站 | 久久综合久久88 | 99精品视频在线免费观看 | 免费观看全黄做爰大片国产 | 国产精品久久av | 久久精品香蕉 | 色婷婷狠狠干 | 午夜精品成人一区二区三区 | 亚洲欧美日韩一区二区三区在线观看 | 国产经典av | 日本字幕网 | 亚洲久草视频 | 亚洲精品视频偷拍 | 97超级碰| 丁香婷婷网 | 操操操com | 欧美日高清视频 | 91 中文字幕 | 亚洲激情视频在线观看 | 精品福利av | 激情综合五月 | 国产成人精品区 | 久久精品站 | 亚洲另类在线视频 | 丁香五月缴情综合网 | 超碰电影在线观看 | 国产一区二区久久久久 | 成人午夜片av在线看 | 成人一区二区三区中文字幕 | www五月天 | 国产一区二区久久精品 | 天天爽天天爽夜夜爽 | 国产成人精品在线观看 | 五月婷婷天堂 | 国产精品美女在线 | 有没有在线观看av | 伊人中文网 | 亚洲天堂在线观看完整版 | 在线观看国产日韩 | 国产你懂的在线 | 日韩成人免费在线观看 | 美女一区网站 | 精品视频免费在线 | 欧美亚洲一区二区在线 | 欧美在线91 | av福利超碰网站 | 久久网站免费 | 午夜成人影视 | 韩日精品在线 | 亚洲成人一区 | 婷婷 综合 色| 天天干天天插伊人网 | 亚洲第一中文网 | 深爱激情开心 | 成年人电影免费看 | 国产亚洲精品美女久久 | 91成人欧美 | 国产精品原创在线 | 最近日本韩国中文字幕 | 日韩在线一区二区免费 | 欧美天天综合 | 一区二区 精品 | av三级在线免费观看 | 91在线成人| 国产精品一区二区三区99 | 成年人在线观看视频免费 | 在线看小早川怜子av | 伊人色播| 欧美精品久久久久久久 | 久久99国产精品 | 精品国自产在线观看 | 在线观看视频你懂 | 国产成人a亚洲精品 | 亚洲美女久久 | 亚洲一级片在线看 | 青青河边草免费直播 | 特级西西444www高清大视频 | 一二三区在线 | 久久久精品国产一区二区三区 | 伊人中文网 | www.五月激情.com | 麻豆国产精品视频 | 99 色| 亚洲成人黄色在线观看 | 一区二区在线不卡 | 亚洲精品在线网站 | 久久精品999 | 精品国产一二三四区 | 国产精品欧美久久久久久 | 国产精品欧美一区二区 | 日韩精品一区二区三区三炮视频 | 成人午夜网 | 日韩在线高清免费视频 | 中文字幕一区二区三区在线播放 | 中文字幕电影一区 | 欧美精品免费在线 | 国产成人免费在线观看 | 香蕉视频久久 | 日韩在线资源 | 天天干天天操天天射 | 亚洲夜夜综合 | 欧美一级片在线免费观看 | 久久婷亚洲五月一区天天躁 | 激情五月婷婷综合网 | 国产午夜麻豆影院在线观看 | 九色91福利 | 国产精品亚洲视频 | 激情综合五月婷婷 | 久草视频免费在线观看 | 96亚洲精品久久 | 69精品视频在线观看 | 日韩一区二区三区免费电影 | 亚洲成人资源网 | 国产午夜精品理论片在线 | 国产糖心vlog在线观看 | 黄色一级在线观看 | 欧洲精品码一区二区三区免费看 | 国产在线观看免 | 69视频永久免费观看 | 97超碰.com| 一级片免费在线 | 亚洲国产丝袜在线观看 | 天天草天天操 | 又粗又长又大又爽又黄少妇毛片 | 亚洲a网| 美女视频a美女大全免费下载蜜臀 | 正在播放 国产精品 | 免费久久网 | 国产精品嫩草在线 | 久久久久久久久电影 | 亚洲aⅴ乱码精品成人区 | 久久久www成人免费精品张筱雨 | 国产精品系列在线观看 | 久久成人在线视频 | 超碰在线人 | 国产亚洲精品久久网站 | 天天色天天射天天操 | 久久综合色一综合色88 | 日本xxxxav | a极黄色片| 欧美日韩在线播放一区 | 日韩av片免费在线观看 | 国产九九热视频 | 9999国产精品| 欧美日韩视频免费看 | 在线观看成人国产 | 麻豆视频网址 | 欧美成人精品xxx | 西西444www大胆无视频 | 麻豆一区二区三区视频 | 免费成人在线观看视频 | 午夜黄色影院 | 日日婷婷夜日日天干 | 日本高清xxxx | 国产在线高清精品 | 狠狠的日日 | 天天干天天干天天色 | www免费视频com| 国产精品视频大全 | 久久国产精品二国产精品中国洋人 | 亚洲精品美女在线观看 | 亚洲综合少妇 | 色综合狠狠干 | 欧美一二区在线 | 欧美日韩另类在线观看 | 美女精品网站 | www91在线观看 | 国产一区在线视频 | 免费国产一区二区视频 | 国产日韩欧美在线看 | 中文字幕综合在线 | 视频三区在线 | 国产精品一区二区三区视频免费 | 亚洲成av人电影 | 99视频久久 | 国产高清成人av | 九九热在线视频免费观看 | 成人aⅴ视频 | 免费午夜视频在线观看 | 亚洲精品资源 | 在线欧美小视频 | 国内精品在线看 | 91视频免费 | 欧美日韩在线免费视频 | 国产精品久久一区二区三区不卡 | 美女啪啪图片 | av天天干 | 成人观看视频 | 国产中文字幕在线看 | av在线播放中文字幕 | 夜夜高潮夜夜爽国产伦精品 | 九草在线观看 | 在线免费三级 | 亚洲国产色一区 | 黄色影院在线观看 | 国产v在线观看 | 九九九国产| 成人av手机在线 | 色狠狠综合天天综合综合 | 国产精品精品国产 | 日韩动漫免费观看高清完整版在线观看 | 美女免费视频一区 | 日韩中文字幕免费 | 一区二区三区在线免费观看视频 | 97碰视频| 国产精品视频内 | 蜜臀久久99精品久久久无需会员 | 午夜少妇av | 97人人模人人爽人人喊网 | 欧美日韩午夜爽爽 | 国产在线欧美日韩 | 天天爱综合 | 日本不卡视频 | 91麻豆精品国产91久久久无限制版 | 美女视频黄免费网站 | 午夜视频一区二区 | 久久久久国 | 精品美女在线视频 | 天天射日| 91成人国产| 91热爆视频 | 在线观看免费91 | 国产99久久久精品 | 午夜精品久久久久久久久久 | 日韩三级免费观看 | 超碰在线观看av.com | 久久久精品视频网站 | 精品主播网红福利资源观看 | 五月婷婷六月丁香 | 丁香激情五月 | 国产综合片 | 国产91精品一区二区麻豆亚洲 | 97成人资源| 成人免费观看完整版电影 | 丁香激情网 | 天天玩天天干天天操 | 日韩精品黄 | 久久国产美女 | 91麻豆精品国产91久久久更新时间 | 日韩av成人免费看 | 国产一区视频在线播放 | 免费成人av | 久久影视一区二区 | 久久黄色网址 | 亚洲高清av | 日韩电影中文字幕在线观看 | 国产成人一区二区三区免费看 | 91九色精品 | 久久99九九99精品 | 欧美久久久久 | 一区二区三区电影在线播 | 久久电影网站中文字幕 | 久久国产精品99精国产 | 中文字幕 在线 一 二 | 久久久久免费 | 黄色a在线 | 婷婷六月中文字幕 | 国产99自拍 | 久草在线在线 | 日韩欧美在线中文字幕 | 亚州中文av | 91精品伦理 | 97电影院在线观看 | 国产在线高清视频 | 91成人在线观看喷潮 | 久久av影视 | 国产免费久久av | 色全色在线资源网 | 精品久久久久久久久久国产 | 久久99精品久久久久久三级 | 正在播放 国产精品 | 在线观看午夜 | 黄色大片日本免费大片 | 久久久久 免费视频 | 欧美日韩视频免费 | 在线你懂 | 欧美精品中文字幕亚洲专区 | 亚洲欧美日韩一区二区三区在线观看 | 免费看污的网站 | 国产精品福利在线观看 | 91在线精品一区二区 | 色偷偷88888欧美精品久久久 | 激情网色 | 男女精品久久 | 国产精品2020 | av在线等| 中文字幕在线免费 | 久久免费精品一区二区三区 | 国产一区自拍视频 | 波多野结衣视频在线 | 欧美精品一二 | 成人av免费播放 | 日韩视频在线不卡 | 日韩美女久久 | 日日夜夜操操操操 | 亚洲国产黄色 | 久青草国产在线 | 婷婷丁香国产 | 欧美极品裸体 | 在线观看mv的中文字幕网站 | 在线不卡视频 | 日韩电影精品一区 | 国产精品五月天 | 欧美日韩性视频在线 | 嫩草av在线 | 亚洲电影一区二区 | 国产97av| 97成人啪啪网 | 精品国产_亚洲人成在线 | av色综合| www.黄色片网站 | 国产原创在线观看 | 精品视频在线视频 | 国产精品久久久久aaaa九色 | 色婷婷久久久综合中文字幕 | 日本在线视频网址 | 成人综合婷婷国产精品久久免费 | 亚洲国产精品成人av | 一级一片免费观看 | 欧美在线观看视频 | 欧美日韩国产在线 | 亚洲精品国产麻豆 | 精品色综合 | 激情av网| 日韩欧美在线视频一区二区三区 | 久久国产系列 | 久久久精品国产一区二区 | 国产区av在线 | 久久久久电影网站 | 欧美激情一区不卡 | 日一日干一干 | 久久丁香 | av免费观看高清 | 国产精彩视频一区二区 | 4438全国亚洲精品观看视频 | 69久久久久久久 | 久久这里精品视频 | 黄色精品一区 | 日韩av资源站 | 色噜噜在线观看视频 | 国产精品 欧美 日韩 | 亚洲视频免费在线观看 | 久久色在线观看 | 日韩在线免费不卡 | 国产精品视频全国免费观看 | 日韩www在线 | 日韩美在线观看 | 国产中文字幕精品 | 国产精品一区二区三区在线播放 | 亚洲成色777777在线观看影院 | 国产精品视频在线观看 | 中国一区二区视频 | 色婷婷福利 | 九九99靖品 | 亚洲最新视频在线播放 | 96视频免费在线观看 | 999在线精品 | 性色av免费观看 | 欧美精品做受xxx性少妇 | 日韩视频在线观看视频 | 中文免费观看 | 一区二区三区在线免费播放 | 成人毛片一区二区三区 | 成人久久精品 | 在线播放精品一区二区三区 | 欧美午夜性生活 | 美女精品网站 | 亚洲国产日韩精品 | 国产高潮久久 | 久久精品一区二区国产 | 在线a人片免费观看视频 | 最新婷婷色 | 久草9视频 | 国产精品一区二区中文字幕 | 狠狠色丁香久久婷婷综合_中 | 精品自拍sae8—视频 | 婷婷网址 | 久久久久久久电影 | 日韩电影中文字幕 | 制服丝袜欧美 | av在线不卡观看 | 在线观看中文字幕 | 久久1电影院| 在线观看成人一级片 | 中文字幕日韩有码 | 国产精品夜夜夜一区二区三区尤 | 欧美日韩高清一区二区三区 | 亚洲精品国产精品国自产观看 | 摸bbb搡bbb搡bbbb| 日韩精品一区二区三区不卡 | 中文字幕在线观看网址 | 国产区精品区 | 国产精品久久久久久久久久不蜜月 | 一级欧美日韩 | 91视频在线免费 | 久久综合九色综合97婷婷女人 | 在线观看国产成人av片 | 国产精品麻豆视频 | 91av免费看| 成年人视频在线免费播放 | 天天狠狠操 | 韩日成人av | 亚洲精品综合久久 | 久久激情综合 | 国产精品久久久久久吹潮天美传媒 | 欧美精品在线观看免费 | 这里只有精品视频在线 | 成人免费在线观看入口 | 天天天色综合 | 四虎影视精品 | 一区 二区电影免费在线观看 | 又黄又刺激又爽的视频 | 欧美日韩精品在线 | 国产精品福利无圣光在线一区 | 欧美日韩精品影院 | 成人免费观看大片 | 久草在线视频在线观看 | 18国产精品白浆在线观看免费 | 97电影手机 | 婷婷色中文字幕 | 日本一区二区不卡高清 | 黄色中文字幕 | 久久精品超碰 | 一级国产视频 | 在线观看mv的中文字幕网站 | 伊人永久 | 色资源中文字幕 | 国产一区高清在线 | 国产美女无遮挡永久免费 | 香蕉视频免费看 | 国产精品免费久久久久久 | 一区二区三区在线观看 | 丁香视频免费观看 | 狠狠躁夜夜躁人人爽视频 | 天天碰天天操视频 | 久久久久久不卡 | av成人在线电影 | 国产精品一区二区在线播放 | 狠狠色狠狠色综合系列 | 天天色天天操天天爽 | 色网站免费在线观看 | 色偷偷av男人天堂 | 在线观看深夜视频 | 97综合在线 | 日韩视频免费观看高清 | 久久久久久久av麻豆果冻 | 午夜在线免费观看视频 | 午夜三级毛片 | 黄色av一级片 | 最新成人av| 91亚色视频在线观看 | 亚洲视频免费在线 | 成人观看 | 欧美一级久久久 | 成人av资源在线 | 日本在线视频网址 | 香蕉在线观看视频 | 欧美日韩在线视频一区二区 | 999久久久国产精品 高清av免费观看 | 日韩欧美国产成人 | 国产伦理一区二区三区 | 日韩三级在线 | 伊人午夜视频 | 国产视频2区 | 国产四虎影院 | 日韩欧美视频免费在线观看 | 国产亚洲精品久久 | 麻豆精品在线 | 欧美日比视频 | 国产精品国产三级国产aⅴ无密码 | 四虎国产精品成人免费4hu | 丝袜一区在线 | 国精产品999国精产 久久久久 | 在线av资源 | 国产精品高潮呻吟久久av无 | 在线电影中文字幕 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 久久精品人人做人人综合老师 | 成人国产精品久久久春色 | 超碰在线人人草 | 天天久久夜夜 | 一本一道久久a久久综合蜜桃 | 91免费高清在线观看 | 91网址在线 | av丝袜美腿 | 香蕉精品视频在线观看 | 久久久久久久久久久电影 | 中文字幕不卡在线88 | 久久伦理电影网 | 国产精品va在线播放 | 国产精品99久久久久久大便 | av免费网站 | 亚洲一区二区三区在线看 | 草久视频在线观看 | 精品国产一区二区三区日日嗨 | 精品国产观看 | 国产精品永久在线观看 | 欧美激情视频在线免费观看 | 天天插综合网 | 久久色在线播放 | 国产成人精品一区二区三区福利 | 四虎影视成人精品国库在线观看 | 欧美日韩破处 | 国产免费黄色 | 国产精品18久久久 | 91麻豆精品国产91久久久无限制版 | 久久免费国产精品 | 国产不卡精品 | 久久亚洲私人国产精品 | 婷五月激情 | 国产精品成人自拍 | 亚洲专区免费观看 | 中文字幕在线观看2018 | 婷婷久久综合网 | 日日夜夜狠狠干 | 怡红院久久 | 日韩免费视频一区二区 | 国产专区在线视频 | 日韩久久电影 | 色综合天天综合在线视频 | www日韩在线观看 | 久久久久欠精品国产毛片国产毛生 | 日本在线视频网址 | 91系列在线| 免费色视频网址 | 国产精品久久久久久久久久久久午夜片 | 久久99热精品这里久久精品 | 国产免费亚洲高清 | 国产精品亚洲人在线观看 | 99视频在线观看视频 | 天天色播 | av成人免费在线观看 | 99久久激情视频 | 国产高清 不卡 | 97色综合 | 久久久私人影院 | 美女网站视频色 | 国产啊v在线 | 中文亚洲欧美日韩 | 欧美欧美 | 涩涩网站在线观看 | 久久 精品一区 | 成人va在线观看 | 欧美精品首页 | 久久国产精品一区二区三区四区 | 国产手机av| 国产日韩亚洲 | 国产精品一区二区电影 | 六月天综合网 | 国产精品精品国产 | 国产一级免费片 | 五月天综合网 | 91精品入口 | 成人在线播放免费观看 | 日韩三级在线观看 | 国产精品日韩久久久久 | 在线看的av网站 | 视频福利在线观看 | 精品久久久久久一区二区里番 | 国产系列 在线观看 | 国产精品porn | 久久久精品久久日韩一区综合 | 婷婷久操| 亚洲欧美视频一区二区三区 | 亚洲国产成人高清精品 | 亚洲黄色在线免费观看 | 超碰av在线 | 在线观看第一页 | 久久色中文字幕 | 久久久久欠精品国产毛片国产毛生 | 九九视频在线观看视频6 | 91在线观| 天天操夜操视频 | 96久久| 一区二区三区四区精品 | 91av视频在线观看 | 亚洲区另类春色综合小说校园片 | 久久久久在线 | 婷婷伊人综合 | 9797在线看片亚洲精品 | 91在线精品一区二区 | 狠狠网亚洲精品 | 亚洲精品在线观看中文字幕 | 国产精品99在线播放 | 日韩av男人的天堂 | 婷婷综合激情 | av免费电影在线 | 免费看黄网站在线 | 在线久草视频 | 精品一二三四五区 | 免费网站看v片在线a | 日日麻批40分钟视频免费观看 | 91av在线播放视频 | 中文字幕日韩精品有码视频 | 国产精品乱码久久久久久1区2区 | 香蕉久久久久 | 在线观看亚洲专区 | 国产美女精彩久久 | 日韩av成人免费看 | 欧美日韩国语 | 激情久久久久久久久久久久久久久久 | 国产美女精品 | 夜夜夜夜爽 | 亚洲天堂网在线视频观看 | 精品久久久久久一区二区里番 | 午夜视频免费在线观看 | 久草视频国产 | 国产精品av一区二区 | 在线观看视频99 | 国产高清免费视频 | 精品国偷自产国产一区 | 国产精品久久久久久a | 日本三级人妇 | 91在线网址 | 国产免费叼嘿网站免费 | 综合视频在线 | 美女在线免费观看视频 | 日韩精品久久久久久久电影99爱 | 精品欧美一区二区精品久久 | 国产精品va | 特及黄色片| 欧美日在线观看 | av成人在线播放 | 一区二区三区在线播放 | 欧美日韩国产亚洲乱码字幕 | 日韩三级av | 人人超在线公开视频 | 日韩天天操 | 精品亚洲免费 | 在线免费三级 | 国内三级在线 | 日本丰满少妇免费一区 | 日本三级不卡视频 | 久久久久久久影院 | 91热精品 | 国产精品白浆 | 国产成人av网 | 日日夜夜噜噜噜 | 免费看三片 | 日韩另类在线 | 国产一区二区三区免费观看视频 | 欧美午夜精品久久久久久浪潮 | 精品视频 | 久草影视在线 | 色婷婷播放 | 日韩高清精品一区二区 | 欧美日韩色婷婷 | 色九九影院 | 在线观看视频免费播放 | 国产一区成人在线 | 在线视频 91| 成 人 a v天堂 | 天天综合视频在线观看 | 西西大胆啪啪 | 黄色电影在线免费观看 | 日韩在线小视频 | 国产资源在线观看 | 91cn国产在线 | 天天色天天操综合网 | 久久国产精品免费一区二区三区 | 日本高清免费中文字幕 | 国产一区自拍视频 | 狠狠干天天干 | 成人午夜精品久久久久久久3d | 色婷婷综合久色 | 精品国产综合区久久久久久 | 午夜久久久久久久久久久 | 日韩.com| 99综合电影在线视频 | 欧美黄网站 | 亚洲三级在线免费观看 | 四虎成人免费观看 | 国内外成人免费在线视频 | 97视频总站 | 亚洲精品国产自产拍在线观看 | 久久99热这里只有精品国产 | 99综合电影在线视频 | 91最新视频在线观看 | 免费一级片观看 | 91资源在线 | 亚洲三级av| 日日躁夜夜躁aaaaxxxx | 黄色网中文字幕 | 亚洲精品久久视频 | a午夜在线 | 国产精品久久久久亚洲影视 | 国产999精品| 精品视频123区在线观看 | 99精品国产在热久久 | 四虎在线观看网址 | 中文字幕中文字幕 | 五月开心婷婷网 | 在线观av | 国产精品aⅴ | 日韩精品一区二区三区视频播放 | 超碰97国产在线 | 91av亚洲| 伊人伊成久久人综合网小说 | 欧美做受高潮 | 中文字幕二区在线观看 | 久草在线免费播放 | 久久成人精品 | 欧美污网站 | 国产对白av | 日日干日日色 | 99视频精品免费视频 | 天天干天天干天天射 | 色88久久 | 一区二区三区中文字幕在线观看 | 免费成人在线观看 | 国产精品网红福利 | 亚洲成av人片在线观看www | 97免费中文视频在线观看 | 成人精品视频久久久久 | 一区二区三区韩国免费中文网站 | 国产免费一区二区三区最新 | 免费看v片网站 | 欧美精品一区在线发布 | 中文字幕日韩在线播放 | 日黄网站 | 国产伦理久久 | 成人免费观看在线视频 | 亚洲视频精品在线 | 成人a级免费视频 | 日韩在线免费看 | 五月天色丁香 | 三级黄色片在线观看 | 激情视频国产 | 精品一区 精品二区 | 在线观看 国产 | 国产精品美女在线 | 国产在线观看你懂得 | 亚洲日本精品视频 | 在线观看国产一区二区 | 午夜三级影院 | 亚洲国产大片 | 在线观影网站 | 97碰在线视频 | 99视频在线观看免费 | 久久热首页 | 九九热免费视频在线观看 | av亚洲产国偷v产偷v自拍小说 | 亚洲精品白浆高清久久久久久 | 99久久久国产精品免费观看 | 欧美性生交大片免网 | 五月开心网 | 国产精品永久免费在线 | 国产视频网站在线观看 | 国产视频 亚洲精品 | 91在线区| a在线观看国产 | 久久99精品国产99久久 | 又色又爽又黄高潮的免费视频 | 四虎永久国产精品 | 日韩午夜精品福利 | 美女中文字幕 | 国产成人精品免费在线观看 | 亚洲爱爱视频 | 欧美日韩在线视频一区 | 国产成人av一区二区三区在线观看 | 日批视频在线播放 | 青青看片 | 日韩欧美一区二区三区在线观看 | 精品视频网站 | 成人在线视频你懂的 | 久久久久国产精品午夜一区 | 麻豆视频大全 | 美女视频又黄又免费 | 欧美一级日韩三级 | 国产精品久久久久久久午夜 | 激情欧美一区二区三区免费看 | 日韩av看片| 在线网址你懂得 | 一区二区三区中文字幕在线观看 | 精品在线观 | 99r在线播放 | 天堂av色婷婷一区二区三区 | 国产高清在线观看av | 韩日精品中文字幕 | 久久国产精品二国产精品中国洋人 | 欧美日韩一二三四区 | 久久综合操 | 天天色图 | 久人人| 日日操天天射 | 久久99国产综合精品免费 | 在线а√天堂中文官网 | 亚洲高清色综合 | 网站在线观看日韩 | 美女网站色在线观看 | 最新av电影网站 | 99久久久久久久 | 麻豆影视网站 | 天天想夜夜操 | 国产成人一区二区精品非洲 | 在线观看视频一区二区 | 精品久久久久久综合日本 | av免费在线播放 | 日日操天天操狠狠操 | 国产精品婷婷 | 91视频最新网址 | 日韩大片在线看 | 97人人网 | 在线观看中文字幕一区二区 | 91天堂在线观看 | 一级黄色毛片 | 欧美日韩精品在线观看 | 欧美日韩国产精品一区 | 欧美日本国产在线观看 | 玖玖在线视频观看 | 欧美一进一出抽搐大尺度视频 | 色综合久久久久综合体桃花网 | a色视频| 久久久精品视频成人 | 国产日韩视频在线观看 | 国产福利一区二区在线 | 婷婷久久精品 | 国产精品视频免费 | 亚洲精品久久激情国产片 | 亚洲视频资源在线 | 国产精品18p | 日韩欧美精品在线视频 | 久久精品99国产精品亚洲最刺激 | 免费在线观看国产精品 | 久久视频这里有精品 | 日本夜夜草视频网站 | 91午夜精品| 99超碰在线观看 | 成人国产网址 | 日日干 天天干 | 女人高潮特级毛片 | 日日草夜夜操 | 日韩精品视频免费在线观看 | 狠狠插狠狠干 | 最新中文字幕在线观看视频 | 超碰97人人射妻 | 日韩电影一区二区在线观看 | 久久国产精品一二三区 | 国产99区 | 九九热国产 | 亚洲精品国产第一综合99久久 | 奇米网8888| 亚洲午夜精品一区二区三区电影院 | 日韩a级黄色 | 久久艹综合 | 日韩视频一区二区在线观看 | 视频国产一区二区三区 | 天天干天天操天天干 | 国偷自产中文字幕亚洲手机在线 | 国产精品都在这里 | 日韩网站一区二区 | 久久精品久久精品久久39 | 懂色av一区二区三区蜜臀 | 9ⅰ精品久久久久久久久中文字幕 | 国产香蕉在线 | 91视频亚洲 | 国产成人精品一区二区三区福利 | 日韩经典一区二区三区 | 精品免费久久 | 97色婷婷 | 四虎影视成人精品国库在线观看 | 91高清视频在线 | 国产成人三级 | 天天操夜夜曰 | 国产一级免费av | 最近日本mv字幕免费观看 | 一区在线观看视频 |