国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

在Bamboo上怎么使用iOS的單元測(cè)試

這篇具有很好參考價(jià)值的文章主要介紹了在Bamboo上怎么使用iOS的單元測(cè)試。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

作者:京東零售?吳滔

本教程將使用北汽登錄模塊為例,一步一步和大家一起搭建單元測(cè)試用例,并在Bamboo上跑起來,最終測(cè)試結(jié)果和代碼覆蓋率會(huì)Bamboo上匯總。

模塊名稱:BQLoginModule,是通過iBiu創(chuàng)建的一個(gè)模塊工程

一 建立單元測(cè)試Bundle

ProductName: BQLoginTests

二 測(cè)試代碼編寫

1 配置文件同步

如果我們要在測(cè)試代碼使用我們?cè)赑od里的類,需要同步 Targets Support Files/Pods-BQLoginTests/Pods-BQLoginTests.debug.xcconfig 文件的內(nèi)容到 Targets Support Files/Pods-BQLoginUITests/Pods-BQLoginUITests.debug.xcconfig,直接內(nèi)容copy就成了,只是每次用iBiu安裝過后都要做這個(gè)操作,后續(xù)使用腳本實(shí)現(xiàn)同步:

2 測(cè)試代碼編寫

具體的編寫我這里就過多介紹了,網(wǎng)上教程一大篇,這里就不多說了,如果沒有做性能測(cè)試,這里可以把自動(dòng)生成的 testPerformanceExample 屏蔽掉。

三 運(yùn)行單元測(cè)試

用 command+u,或者菜單(product->test)執(zhí)行,就能獲得結(jié)果

結(jié)果在這里看:

完成以上操作,基本的單元測(cè)試就OK了

下面我們用命令行來跑下單元測(cè)試,首先進(jìn)入工程目錄:

cd BQLoginModule/Example

執(zhí)行如下命令:

xcodebuild test -UseModernBuildSystem=NO -configuration=Debug -workspace './BQLoginModule.xcworkspace' -scheme "BQLoginModule_Example" -destination 'platform=iOS Simulator,name=iPhone 8,OS=13.2.2' 

請(qǐng)大家注意將 workspace/scheme /模擬器信息 修改為自己工程對(duì)應(yīng)信息,就可以看到結(jié)果

四 代碼覆蓋率

1 單元覆蓋率

在XCode打開覆蓋率統(tǒng)計(jì),我們只打開我們的庫做代碼覆蓋就成了,Xcode 12.4在如下地方:

在Pod里面BQLoginModule設(shè)置 BuildSettings 查找 "cov" ,把 以下2項(xiàng)都設(shè)置為YES;

然后我們跑下單元測(cè)試,就可以看到覆蓋率結(jié)果了:

2 Bamboo報(bào)告

因?yàn)槲覀冃枰贐amboo上匯總覆蓋率報(bào)告,這里我們使用iBiu的一個(gè)高級(jí)特性:用 Podfile.custom 文件加載通用cocoapods的外網(wǎng)庫來使用,具體見圖:

這里我們引入2個(gè)庫: OCMock(單元測(cè)試必備的Mock庫) XcodeCoverage(覆蓋率統(tǒng)計(jì)的庫)

加入這個(gè)文件后,需要使用 iBou重新安裝下組件

做如下設(shè)置:

這個(gè)命令主要是生成XcodeCoverage的環(huán)境依賴 env.sh 我們打開文件看下,文件路徑如下

env.sh內(nèi)容如下:

這里 OBJECT_FILE_DIR_normal 和 SRCROOT指向的是我們Example工程,我們是需要對(duì)Pods里的BQLoginModule里的代碼做單元覆蓋,這2個(gè)環(huán)境變量修改如下:

export OBJECT_FILE_DIR_normal ="/Users/cdwutao3/Library/Developer/Xcode/DerivedData/BQLoginModule-fvrzeicgcswucwfgjqweugauzxia/Build/Intermediates.noindex/Pods.build/Debug-iphonesimulator/BQLoginModule.build/Objects-normal"

export SRCROOT="/Users/cdwutao3/Desktop/ut/BQLoginModule/BQLoginModule/Classes"

然后在Pods/XcodeCoverage目錄新建 xmlout目錄,并運(yùn)行命令:

./getcov -x -s -o xmlout 

可以得到如下結(jié)果:

還可以查看哪些代碼沒被覆蓋,和Bamboo結(jié)果對(duì)齊:

完成以上步驟,就完成了本地用命令號(hào)完成單元測(cè)試的所有步驟,下面我們接著來看要在Bamboo上輸出報(bào)告需要怎么做。

五 Bamboo操作

1 創(chuàng)建應(yīng)用

這里要確保對(duì)應(yīng)庫和依賴的庫 ,給 xn_testdev_ci賬號(hào)開權(quán)限

2 新建流水線

選擇 “從零開始創(chuàng)建”

3 配置流水線

基礎(chǔ)信息里面的選擇如下

需要用到以下四個(gè)原子:

“下載代碼”--大家可先配置使用“下載代碼-iBiu”這個(gè)原子,我用這個(gè)一直使用不成功,所以直接用“下載代碼”來手動(dòng)配置:

“自定義腳本”--因?yàn)楝F(xiàn)在iOS的單元測(cè)試還沒有對(duì)應(yīng)的原子操作,所有我們通過自己寫腳本來完成:

“單元測(cè)試”--你沒看錯(cuò),就是用java的單元測(cè)試原子,我們輸出的結(jié)果和這個(gè)原子匹配,所以選他就成了

“GCC代碼覆蓋率”

其中“單元測(cè)試”和“代碼覆蓋率”的路徑是可以修改的,這個(gè)可以根據(jù)自己的實(shí)際路徑修改

4 自定義腳本

說明:

1 下載代碼和配置iBiu都是自己的命令行來做的,但是需要開始配置下git用戶信息

2 開始我用命令行寫全部命令,但是Bamboo的命令行規(guī)則會(huì)導(dǎo)致一些的shell指令的失效,所以我采用把 shell命令 寫到文件上傳到git倉庫,然后執(zhí)行的方式來完成

3 結(jié)果轉(zhuǎn)換會(huì)還會(huì)用到 ocunit2junit 和 xcpretty 這2個(gè)命令,如果這2個(gè)命令出錯(cuò),請(qǐng)聯(lián)系Bamboo同事協(xié)助安裝下

4 大家在寫shell命令時(shí),不知道文件是否生成,可以多用 ls 來看目錄下的文件

5 重點(diǎn):

  • 為了手動(dòng)安裝iBiu配置,請(qǐng)將本機(jī) ~/Library/Application Support/iBiu/BQLoginModule/下的2個(gè)文件 spec_sources 和 pod_setup 上傳到git,我是copy到 Example/BQLoginModule/Resource目錄下然后上傳到git倉庫,這個(gè)目錄可以修改,然后修改對(duì)應(yīng)shell 命令的目錄就成了
  • iBiu建的git倉庫默認(rèn)會(huì)過濾一些內(nèi)容,修改 BQLoginModule 工程目錄下的 .gitignore 文件,需要上傳xcworkspacedata內(nèi)容
  • 代碼覆蓋率設(shè)置,XcodeCoverage的說明強(qiáng)調(diào)了不要用于AppStore的工程,為了避免線上事故,我們通過命令來設(shè)置,不直接在工程里設(shè)置:

所以修改xcode的構(gòu)建命令新加 GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES,命令如下:

xcodebuild -UseModernBuildSystem=NO -enableCodeCoverage=YES -configuration=Debug GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES -workspace "./${moduleName}.xcworkspace" -scheme "${moduleName}_Example" -destination 'platform=iOS Simulator,name=iPhone 8,OS=13.2.2' test

5 Bamboo結(jié)果

覆蓋率下載地址:

六 腳本匯集

1 本地腳本

以BQLoginModule為例,最終本地腳本命令如下,大家可以重新找到本地目錄執(zhí)行查看效果:

git clone --depth=1 https://git.jd.com/BQMobileshop/BQLoginModule.git
cd BQLoginModule/Example
pod update


pwd
moduleName="BQLoginModule"
testName="BQLoginTests"


biu -pod install ./
ls
ls ./Pods
rm -f "./Pods/Target Support Files/Pods-${testName}/Pods-${testName}.debug.xcconfig"
cp -f "./Pods/Target Support Files/Pods-${moduleName}_Example/Pods-${moduleName}_Example.debug.xcconfig"  "./Pods/Target Support Files/Pods-${testName}/Pods-${testName}.debug.xcconfig"
cat "./Pods/Target Support Files/Pods-${testName}/Pods-${testName}.debug.xcconfig"


xcodebuild clean -workspace "./${moduleName}.xcworkspace" -scheme "${moduleName}_Example"


xcodebuild  -UseModernBuildSystem=NO -enableCodeCoverage=YES -configuration=Debug GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES -workspace "./${moduleName}.xcworkspace" -scheme "${moduleName}_Example" -destination 'platform=iOS Simulator,name=iPhone 8,OS=13.2.2'  test  > utlogfile.txt
cat utlogfile.txt |grep ".xcresult" > utlogpath.txt
logStr=$(cat ./utlogpath.txt)
logPath=${logStr:1}
if [ -z "$logPath" ]; then
	exit 1
fi


sed "s/${moduleName}.build\/Debug-iphonesimulator\/${moduleName}_Example.build/Pods.build\/Debug-iphonesimulator\/${moduleName}.build/g" ./Pods/XcodeCoverage/env.sh> cov_env1.txt
sed "s/${moduleName}\/Example/${moduleName}\/${moduleName}\/Classes/g" ./cov_env1.txt > cov_env2.txt
cp -f ./Pods/XcodeCoverage/env.sh ./Pods/XcodeCoverage/env_bak.sh
rm -f ./Pods/XcodeCoverage/env.sh
cp ./cov_env2.txt ./Pods/XcodeCoverage/env.sh


cat "./utlogfile.txt"|ocunit2junit
ls test-reports


cp ./cov_env2.txt ./Pods/XcodeCoverage/env.sh
mkdir xmlout
./Pods/XcodeCoverage/getcov -x -o xmlout
ls ./xmlout/lcov


cat "./utlogfile.txt"|xcpretty -t -r html --output testresult/testresult.html
ls te

2 Bamboo腳本

Bamboo腳本分成2部分,一個(gè)是在Bamboo上執(zhí)行的腳本

rm -fr "/Users/admin/Library/Application Support/iBiu/BQLoginModule"
mkdir "/Users/admin/Library/Application Support/iBiu/BQLoginModule"
rm -fr ./BQLoginModule
git clone --depth=1 https://git.jd.com/BQMobileshop/BQLoginModule.git
cd BQLoginModule/Example
cp "./BQLoginModule/Resource/spec_sources" "/Users/admin/Library/Application Support/iBiu/BQLoginModule"
cp "./BQLoginModule/Resource/pod_setup" "/Users/admin/Library/Application Support/iBiu/BQLoginModule"
ls "/Users/admin/Library/Application Support/iBiu/BQLoginModule"
biu -pod install ./


sh UT.sh

腳本剩下部分寫入 UT.sh,放在BQLoginModule/Example目錄下, 然后上傳到git倉庫來執(zhí)行,大家做的時(shí)候注意修改變量名稱:

pwd
moduleName="BQLoginModule"
testName="BQLoginTests"


ls ./Pods
rm -f "./Pods/Target Support Files/Pods-${testName}/Pods-${testName}.debug.xcconfig"
cp -f "./Pods/Target Support Files/Pods-${moduleName}_Example/Pods-${moduleName}_Example.debug.xcconfig"  "./Pods/Target Support Files/Pods-${testName}/Pods-${testName}.debug.xcconfig"
cat "./Pods/Target Support Files/Pods-${testName}/Pods-${testName}.debug.xcconfig"


xcodebuild clean -workspace "./${moduleName}.xcworkspace" -scheme "${moduleName}_Example"


xcodebuild  -UseModernBuildSystem=NO -enableCodeCoverage=YES -configuration=Debug GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES -workspace "./${moduleName}.xcworkspace" -scheme "${moduleName}_Example" -destination 'platform=iOS Simulator,name=iPhone 8,OS=13.2.2'  test  > utlogfile.txt
cat utlogfile.txt |grep ".xcresult" > utlogpath.txt
logStr=$(cat ./utlogpath.txt)
logPath=${logStr:1}
if [ -z "$logPath" ]; then
	exit 1
fi


sed "s/${moduleName}.build\/Debug-iphonesimulator\/${moduleName}_Example.build/Pods.build\/Debug-iphonesimulator\/${moduleName}.build/g" ./Pods/XcodeCoverage/env.sh> cov_env1.txt
sed "s/${moduleName}\/Example/${moduleName}\/${moduleName}\/Classes/g" ./cov_env1.txt > cov_env2.txt
cp -f ./Pods/XcodeCoverage/env.sh ./Pods/XcodeCoverage/env_bak.sh
rm -f ./Pods/XcodeCoverage/env.sh
cp ./cov_env2.txt ./Pods/XcodeCoverage/env.sh


cat "./utlogfile.txt"|ocunit2junit
ls test-reports


cp ./cov_env2.txt ./Pods/XcodeCoverage/env.sh
mkdir xmlout
./Pods/XcodeCoverage/getcov -x -o xmlout
ls ./xmlout/lcov


cat "./utlogfile.txt"|xcpretty -t -r html --output testresult/testresult.html
ls test

七 錯(cuò)誤速查

這里匯集了在寫腳本時(shí)的一些錯(cuò)誤,方便大家查看

1 不能在測(cè)試工程引用自己的代碼

請(qǐng)參看 二--1 ”配置文件同步“ 解決

2 在Bamboo上的Pods文件夾,沒有拉到iBiu的其他配置信息

請(qǐng)參看 五--4 ”自定義腳本“的重點(diǎn) 1 來解決

3 “No coverage data in result bundle”

請(qǐng)參看 五--4 ”自定義腳本”的重點(diǎn) 2 來解決

4 使用命令行跑單元測(cè)試時(shí),一直提示不能找到模擬器

-destination 'platform=iOS Simulator,name=iPhone 8,OS=13.2.2' 改為 -destination 'id=xxxxxxxxxx' 這種格式,id為屏幕提示

5 Bamboo Shell里提示 “未設(shè)置原子執(zhí)行條件”

因?yàn)锽amboo的Shell對(duì)字符拼接,變量的處理有限制,所以一部分shell命令最好放在文件執(zhí)行

6 在本地測(cè)試時(shí),Pods/XXXXModule的設(shè)置項(xiàng)在每次iBiu安裝后都會(huì)重置

請(qǐng)注意手動(dòng)修改,或者直接使用腳本運(yùn)行

7 在本地測(cè)試時(shí),代碼覆蓋率只包含了一部分源碼文件,不是全部

請(qǐng)清空 ~/Library/Developer/Xcode/DerivedData 目錄再測(cè)試一次

8 在Bamboo上發(fā)現(xiàn)有些庫拉不下來

請(qǐng)確保 對(duì)應(yīng) 庫給xn_testdev_ci開了權(quán)限

9 覆蓋率文件生成不了

請(qǐng)確保XXXTests的版本信息和主工程的XXXXModule_Example的版本信息一致文章來源地址http://www.zghlxwxcb.cn/news/detail-438640.html

到了這里,關(guān)于在Bamboo上怎么使用iOS的單元測(cè)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • iOS 單元測(cè)試之常用框架 OCMock 詳解

    iOS 單元測(cè)試之常用框架 OCMock 詳解

    測(cè)試驅(qū)動(dòng)開發(fā)并不是一個(gè)很新鮮的概念了。在日常開發(fā)中,很多時(shí)候需要測(cè)試,但是這種輸出是必須在點(diǎn)擊一系列按鈕之后才能在屏幕上顯示出來的東西。測(cè)試的時(shí)候,往往是用模擬器一次一次的從頭開始啟動(dòng) app,然后定位到自己所在模塊的程序,做一系列的點(diǎn)擊操作,然后

    2024年02月09日
    瀏覽(19)
  • XCTest iOS Swift單元測(cè)試(1),漲姿勢(shì)

    XCTest iOS Swift單元測(cè)試(1),漲姿勢(shì)

    // // XCTestDemoTests.swift // XCTestDemoTests // // Created by Nvr on 2018/7/6. // Copyright ? 2018年 ZY. All rights reserved. // import XCTest @testable import XCTestDemo class XCTestDemoTests: XCTestCase { var f1:Float? var f2:Float? override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test me

    2024年04月22日
    瀏覽(20)
  • 單元測(cè)試到底是什么?應(yīng)該怎么做?

    單元測(cè)試到底是什么?應(yīng)該怎么做?

    單元測(cè)試(unit testing),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。至于“單元”的大小或范圍,并沒有一個(gè)明確的標(biāo)準(zhǔn),“單元”可以是一個(gè)函數(shù)、方法、類、功能模塊或者子系統(tǒng)。 單元測(cè)試通常和白盒測(cè)試聯(lián)系到一起, 如果單從概念上來講兩者是有區(qū)別的,不過

    2024年02月08日
    瀏覽(19)
  • 【一文清晰】單元測(cè)試到底是什么?應(yīng)該怎么做?

    【一文清晰】單元測(cè)試到底是什么?應(yīng)該怎么做?

    我是java程序員出身,后來因?yàn)楣ぷ髟蜣D(zhuǎn)到到了測(cè)試開發(fā)崗位。測(cè)試開發(fā)工作很多年后,現(xiàn)在是一名自由職業(yè)者 1、什么是單元測(cè)試 2、該怎么做單元測(cè)試 單元測(cè)試(unit testing),是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。至于“單元”的大小或范圍,并沒有一個(gè)明確

    2024年02月07日
    瀏覽(17)
  • 攜程大牛的單元測(cè)試是怎么樣寫的?

    攜程大牛的單元測(cè)試是怎么樣寫的?

    大家都知道,開發(fā)軟件的時(shí)候?yàn)榇a編寫 單元測(cè)試 是很好的。但實(shí)際上,光有測(cè)試還不夠,還要編寫好的測(cè)試,這同樣重要。 要做到這一點(diǎn),考慮遵循一些固執(zhí)的原則,對(duì)測(cè)試代碼給予一些關(guān)愛: 1. 保持測(cè)試代碼的緊湊和可讀性 要做到這一點(diǎn),應(yīng)該要進(jìn)行毫不留情的重構(gòu)

    2024年04月12日
    瀏覽(18)
  • 攜程總監(jiān)的單元測(cè)試是怎么樣寫的?

    攜程總監(jiān)的單元測(cè)試是怎么樣寫的?

    ? 大家都知道,開發(fā)軟件的時(shí)候?yàn)榇a編寫單元測(cè)試是很好的。但實(shí)際上,光有測(cè)試還不夠,還要編寫好的測(cè)試,這同樣重要。 要做到這一點(diǎn),考慮遵循一些固執(zhí)的原則,對(duì)測(cè)試代碼給予一些關(guān)愛: 要做到這一點(diǎn),應(yīng)該要進(jìn)行毫不留情的重構(gòu),就像對(duì)生產(chǎn)代碼應(yīng)該做的那樣

    2024年02月03日
    瀏覽(18)
  • java & jacoco & powerMock 單元測(cè)試覆蓋率為0怎么解決

    我們項(xiàng)目中使用powerMock作為單元測(cè)試的mock工具,統(tǒng)計(jì)項(xiàng)目測(cè)試覆蓋率使用jacoco編譯的結(jié)果上傳到sonar,但是jacoco 和 powerMock在運(yùn)行時(shí)runtime加載代碼的時(shí)候自定義了類加載器,所以就會(huì)有沖突,導(dǎo)致測(cè)試覆蓋率為0。 使用命令 mvn clean verify sonar:sonar上傳jacoco編譯結(jié)果(這里sonar命令

    2023年04月08日
    瀏覽(26)
  • Spring Boot進(jìn)階(25):文件上傳的單元測(cè)試怎么寫?不會(huì)我教你 | 超級(jí)詳細(xì),建議收藏

    Spring Boot進(jìn)階(25):文件上傳的單元測(cè)試怎么寫?不會(huì)我教你 | 超級(jí)詳細(xì),建議收藏

    ? ? ? ? 文件上傳是現(xiàn)代Web應(yīng)用程序中常見的功能,因此編寫高效的文件上傳單元測(cè)試是確保應(yīng)用程序質(zhì)量的關(guān)鍵步驟之一。但是,很多開發(fā)者可能會(huì)遇到單元測(cè)試速度慢或者不準(zhǔn)確的問題,這使得測(cè)試變得更加繁瑣和無聊。因此,本篇文章將為你提供一些實(shí)用技巧和最佳實(shí)

    2024年02月08日
    瀏覽(25)
  • idea怎么設(shè)置作者信息(詳細(xì))

    idea怎么設(shè)置作者信息(詳細(xì))

    目錄 一:在Java類的開頭自動(dòng)注釋作者名字和日期等信息 二:給Java的方法注釋作者名字和日期等信息? 1. 不可修改的模板:Postfix Completion 2. 可修改的模板:Live Templates tips: 首先給大家推薦兩款好用的免費(fèi)軟件:動(dòng)圖抓取軟件:ScreenToGif和錄屏工具:oCam,可用來作為日常的制

    2024年02月03日
    瀏覽(17)
  • C# 中的單元測(cè)試,如何使用單元測(cè)試進(jìn)行程序測(cè)試和調(diào)試?

    單元測(cè)試是一種軟件測(cè)試方法,用于測(cè)試單個(gè)功能或方法是否按預(yù)期工作。在 C# 中,可以使用 .NET 框架中的單元測(cè)試工具來編寫和運(yùn)行單元測(cè)試。 下面是使用 Visual Studio 內(nèi)置的單元測(cè)試框架來創(chuàng)建一個(gè)簡(jiǎn)單的單元測(cè)試的步驟: 在 Visual Studio 中創(chuàng)建一個(gè)新的類庫項(xiàng)目。 在新項(xiàng)

    2024年02月15日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包