大部分Xcode 項目模板現(xiàn)在支持拆箱測試。例如,當一個新的iOS app在Xcode 中通過快捷鍵 建立,最終工程文件將會通過兩個頂級組來配置(除逗Products地組之外):"AppName"

創(chuàng)新互聯(lián)建站成都網(wǎng)站建設(shè)定制制作,是成都網(wǎng)站營銷推廣公司,為成都履帶攪拌車提供網(wǎng)站建設(shè)服務(wù),有成熟的網(wǎng)站定制合作流程,提供網(wǎng)站定制設(shè)計服務(wù):原型圖制作、網(wǎng)站創(chuàng)意設(shè)計、前端HTML5制作、后臺程序開發(fā)等。成都網(wǎng)站推廣熱線:028-86922220
"AppNameTests"。工程自動生成的scheme可以使用快捷鍵建立并運行可執(zhí)行的目標,并用來建立并運行測試目標
。
在測試目標中有一個叫做AppNameTests的單獨的文件,其包括一個exampleXCTestCase 類,由樣式模板setUp tearDown 方法組成,還包括一個功能和性能測試的示例。
XCTestCase
Xcode單元測試包含在一個 XCTestCase 的子類中。依據(jù)約束,每一個 XCTestCase 子類封裝一個特殊的有關(guān)聯(lián)的集合,例如一個功能、用例或者一個程序流。
通過一個可管理的大量測試用例分拆邏輯測試,在代碼庫的增長和進化方面會產(chǎn)生很多不同。
setUp tearDown
setUp 在 XCTestCase 中的每一個測試運行前被調(diào)用,tearDown 在測試運行結(jié)束時被調(diào)用:
class Tests: XCTestCase { override func setUp() { super.setUp() // Put setup code here. This method is called before the invocation of each test method in the class. } override func tearDown() { // Put teardown code here. This method is called after the invocation of each test method in the class. super.tearDown() } }
這些方法對用來建立測試用例的所有測試中用到的常見對象是有用的:
var calendar: NSCalendar? var locale: NSLocale? override func setUp() { super.setUp() self.calendar = NSCalendar(identifier: NSGregorianCalendar) self.locale = NSLocale(localeIdentifier: "en_US") }
由于 XCTestCase 不被考慮在一個測試用例定義中直接初始化,在setUp中的被共享的初始化屬性便作為可選擇的變量被聲明。
功能測試
每一個名字中以逗test地開始的方法被標識用來測試,并且將會評估函數(shù)中的所有斷言來決定是否通過或者失敗。例如,如果 1 + 1等于 2,函數(shù) testOnePlusOneEqualsTwo 將會繼續(xù)執(zhí)行:
func testOnePlusOneEqualsTwo() { XCTAssertEqual(1 + 1, 2, "one plus one should equal two") }
所有你真正需要知道的 XCTest 斷言
XCTest 帶有許多 內(nèi)建的斷言,但是可以精簡成幾個要點:
基礎(chǔ)性測試
為了整體精簡,所有的 XCTest 斷言縮小為一個獨立的、基礎(chǔ)的斷言:
XCTAssert(expression, format...)
如果以上表達式判斷為真,測試將會通過。否則,測試失敗,將會打印格式化的消息。
雖然一個開發(fā)者能夠只使用 XCTAssert,但是如下助手斷言仍然提供了一些有用的語法幫助澄清正在進行的測試究竟是什么。如果可能,使用最明確的可用的斷言,僅僅在可以更好表達意圖的情況下使用 XCTAssert 。
布爾測試
布爾值或者簡單的布爾表達式使用 XCTAssertTrue XCTAssertFalse:
XCTAssert 等于 XCTAssertTrue
相等性測試
當要測試兩個值是否相等時使用 XCTAssert[Not]Equal:
XCTAssertEqual(expression1, expression2, format...) XCTAssertNotEqual(expression1, expression2, format...)
XCTAssert[Not]EqualObjects 在Swift 中不是必要的,因此在標量值和對象間沒有區(qū)別。
當指定測試兩個雙精度,單精度,或者其他浮點值是否相等,使用 XCTAssert[Not]EqualWithAccuracy 來報告浮點精度問題。
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...) XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)
除了前面提到的相等斷言,還有XCTAssertGreaterThan[OrEqual]
XCTAssertLessThan[OrEqual] 提供了== ,, =, , = 比較運算符。
空值測試
使用 XCTAssert[Not]Nil 斷言一個給定的值是否存在(或者不存在):
XCTAssertNil(expression, format...) XCTAssertNotNil(expression, format...)
無條件失敗
最終,XCTFail 斷言將會總是失敗:
XCTFail(format...)
XCTFail 通常用來為一個將會被通過的測試指代一個占位符。
它對完成一個被其他流程控制結(jié)構(gòu)發(fā)現(xiàn)的錯誤用例也是有用的,例如一個用來測試成功的 if 語句的 else 分句。
性能測試
Xcode 6的新特性能夠檢測代碼性能:
func testDateFormatterPerformance() {
let dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .LongStyle
dateFormatter.timeStyle = .ShortStyle
let date = NSDate()
self.measureBlock() {
let string = dateFormatter.stringFromDate(date)
}
}
Test Case '-[_Tests testDateFormatterPerformance]' started. unknown:0: Test Case '-[_Tests testDateFormatterPerformance]' measured [Time, seconds] average: 0.000, relative standard deviation: 242.006%, values: [0.000441, 0.000014, 0.000011, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010, 0.000010], performanceMetricID:com.apple.XCTPerformanceMetric_WallClockTime, baselineName: "", baselineAverage: , maxPercentRegression: 10.000%, maxPercentRelativeStandardDeviation: 10.000%, maxRegression: 0.100, maxStandardDeviation: 0.100 Test Case '-[_Tests testDateFormatterPerformance]' passed (0.274 seconds).
性能測試幫助為主要代碼路徑確定一個性能基準。將它們分散在你的測試用例中用來確認重要的算法以及隨著時間的推移程序保持高性能。
XCTestExpectation
或許 Xcode 6 中新增的最讓人興奮的特性是內(nèi)建的對于異步測試的支持,借助 XCTestExpectation 類來實現(xiàn)。現(xiàn)在,測試能夠為了確定的合適的條件等待一個指定時間長度,而不需要求助于GCD。
要做一個異步測試,首先使用 expectationWithDescription 建立一個期望值。
let expectation = expectationWithDescription("...")
然后,在方法底部,增加 waitForExpectationsWithTimeout 方法,指定一個超時,如果測試條件不適合時間范圍便會結(jié)束執(zhí)行:
waitForExpectationsWithTimeout(10, handler: { error in // ... })
現(xiàn)在,剩下的步驟是在異步方法被測試的相關(guān)的回調(diào)中實現(xiàn)那個期望值。
expectation.fulfill()
如果測試有不止一個期望值,它將不會通過,除非每一次期望值在被 inwaitForExpectationsWithTimeout() 指定的超時中執(zhí)行 fulfill()。
expectation.fulfill()
這里有一個例子是如何能夠使用XCTestExpectation API測試的異步網(wǎng)絡(luò)請求:
func testAsynchronousURLConnection() { let URL = "" let expectation = expectationWithDescription("GET \(URL)") let session = NSURLSession.sharedSession() let task = session.dataTaskWithURL(NSURL(string: URL), completionHandler: {(data, response, error) in expectation.fulfill() XCTAssertNotNil(data, "data should not be nil") XCTAssertNil(error, "error should be nil") if let HTTPResponse = response as NSHTTPURLResponse! { XCTAssertEqual(HTTPResponse.URL.absoluteString, URL, "HTTP response URL should be equal to original URL") XCTAssertEqual(HTTPResponse.statusCode, 200, "HTTP response status code should be 200") XCTAssertEqual(HTTPResponse.MIMEType as String, "text/html", "HTTP response content type should be text/html") } else { XCTFail("Response was not NSHTTPURLResponse") } }) task.resume() waitForExpectationsWithTimeout(task.originalRequest.timeoutInterval, handler: { error in task.cancel() }) }
用swift模擬
借助對異步測試一流的支持,Xcode 6 似乎已經(jīng)完成一個現(xiàn)代的測試驅(qū)動的開發(fā)者的全部需求。好的,或許只剩下一個:mocking。
Mocking 對于隔離和控制行為是一個有用的技術(shù),對于復雜的原因,非確定性的,或者性能約束,通常不會讓其自身測試。例子包括模擬網(wǎng)絡(luò)請求,精確數(shù)據(jù)查詢,或者包括特殊的競爭條件。
有幾個開源庫用來建立仿真對象和剔除方法調(diào)用,但是這些庫大量依賴
Objective-C 運行時操作,一些現(xiàn)在不可能使用Swift。
然而,實際上這或許在 Swift 中不是必需的,原因在于 Swift 極少的語法約束。
在Swift中,類可以在一個函數(shù)定義中聲明,允許仿真對象完全自包含。只要聲明一個仿真內(nèi)聯(lián)類,覆蓋的和必需的方法如下:
func testFetchRequestWithMockedManagedObjectContext() { class MockNSManagedObjectContext: NSManagedObjectContext { override func executeFetchRequest(request: NSFetchRequest!, error: AutoreleasingUnsafePointerNSError?) - [AnyObject]! { return [["name": "Johnny Appleseed", "email": "johnny@apple.com"]] } } let mockContext = MockNSManagedObjectContext() let fetchRequest = NSFetchRequest(entityName: "User") fetchRequest.predicate = NSPredicate(format: "email ENDSWITH[cd] %@", "@apple.com") fetchRequest.resultType = .DictionaryResultType var error: NSError? let results = mockContext.executeFetchRequest(fetchRequest, error: error) XCTAssertNil(error, "error should be nil") XCTAssertEqual(results.count, 1, "fetch request should only return 1 result") let result = results[0] as [String: String] XCTAssertEqual(result["name"] as String, "Johnny Appleseed", "name should be Johnny Appleseed") XCTAssertEqual(result["email"] as String, "johnny@apple.com", "email should be johnny@apple.com") }
使用 Xcode 6 我們已經(jīng)最終實現(xiàn)目標:內(nèi)建測試工具現(xiàn)在是足夠好用了。也就是說,沒有特殊的強制性的使用任何附加的抽象事物的理由,該抽象事物是用來為大量的app和 庫提供可接受的測試范圍。除非在需要極端情況下,諸如:需要大量消除,仿真,或者其他獨特的測試結(jié)構(gòu),XCTest 斷言,期望值,和性能衡量將會是充分的。
這個時候總是無奈的說:
你應該學習Python 或是Java
你應該掌握Selenium
又或者你需要學會jmeter,嗯,可能LoadRunner你應該學習
也許SoapUI是個不錯的選擇,或者你可是試試PostMan
......
其實這些都不是我真正的答案,我想說:只專注于一種編程語言或一種工具可能限制你的發(fā)揮,尤其可能限制了你在工作中提供的價值。如果你提供的價值在逐步退化,那么你的舞臺可能突然謝幕,你的職業(yè)停滯不前,受到限制。
所以,什么最重要?當然是能力了!
下面我就介紹下2019最好用的10個自動化測試工具,希望可以充實你的知識庫,打開你的職業(yè)發(fā)展舞臺!
在自動化測試領(lǐng)域,自動化工具的核心地位毋庸置疑。我總結(jié)了最頂尖的自動化測試工具,這些工具可以幫助組織更好地定位自己,跟上軟件測試的趨勢。這份清單包含了開源和商業(yè)的自動化測試解決方案。
Selenium:WebUI自動化測試
Selenium是網(wǎng)頁應用中最流行的開源自動化測試框架。起源于2000年,10多年來不斷地完善,Selenium成為許多Web自動化測試人員的選擇,尤其是那些有高級編程和腳本技能的人。Selenium也成為了其他開源自動化測試工具比如Katalon Studio,Watir,Protractor和Robot Framework的核心框架。
Selenium 支持多系統(tǒng)環(huán)境(Windows,Mac,Linux)以及多種瀏覽器(Chrome,F(xiàn)ireFox,IE以及無頭瀏覽器(沒有界面))。它的腳本可以由各種各樣的編程語言編寫,比如 Java,Groovy,Python,C#,PHP,Ruby 以及 Perl。
因為Selenium的靈活性,測試人員可以寫各種復雜的、高級的測試腳本來應對各種復雜的問題,它需要高級的編程技能和付出來構(gòu)建滿足自己需求的自動化測試框架和庫。
Appium:APP UI自動化測試
Appium是一個移動端自動化測試開源工具,支持iOS和Android平臺,支持Python、Java等語言,即同一套Java或Python腳本可以同時運行在iOS和Android平臺,Appium 是一個C/S架構(gòu),核心是一個Web服務(wù)器,它提供了一套REST的接口。當收到客戶端的連接后,就會監(jiān)聽到命令,然后在移動設(shè)備上執(zhí)行這些命令,最后將執(zhí)行結(jié)果放在HTTP響應中返還給客戶端。
Jmeter:接口測試,性能測試
JMeter是一個開源的Java桌面應用程序,主要用于web應用程序的負載測試。它還支持單元測試和有限的功能測試。
它有很多好的特性,比如動態(tài)報告、可移植性、強大的測試IDE等,并且支持不同類型的應用程序、協(xié)議、shell腳本、Java對象和數(shù)據(jù)庫。
Postman:接口測試
Postman 提供功能強大的Web API和HTTP請求的調(diào)試,它能夠發(fā)送任何類型的HTTP請求 (GET, POST, PUT, DELETE…),并且能附帶任何數(shù)量的參數(shù)和Headers。不僅如此,它還提供測試數(shù)據(jù)和環(huán)境配置數(shù)據(jù)的導入導出,付費的Post Cloud用戶還能夠創(chuàng)建自己的 Team Library用來團隊協(xié)作式的測試,并能夠?qū)⒆约旱臏y試收藏夾和用例數(shù)據(jù)分享給團隊。
SoapUI:接口測試
SoapUI是一個非常流行的用于SOAP和REST的開源API測試自動化框架。它還支持功能測試、性能測試、數(shù)據(jù)驅(qū)動測試和測試報告。
Monkey:穩(wěn)定性測試
軟件附帶在sdk中,適用于android和ios,通過adb shell,生成用戶或系統(tǒng)的偽隨機事件。壓力測試結(jié)果:崩潰crash,無響應anr,基本命令:adb shell monkey 1000。
Robot Framework:Web UI自動化測試,接口測試
Robot Framework是一個開源自動化框架,它實現(xiàn)了用于驗收測試和驗收測試驅(qū)動開發(fā)(ATDD)的關(guān)鍵字驅(qū)動方法。Robot Framework為不同的測試自動化需求提供框架。但是,通過使用Python和Java實現(xiàn)其他測試庫,可以進一步擴展其測試功能。Selenium WebDriver是Robot Framework中常用的外部庫。
測試工程師可以利用Robot Framework作為自動化框架,不僅可以進行Web測試,還可以用于Android和iOS測試自動化。對于熟悉關(guān)鍵字驅(qū)動測試的測試人員,可以輕松學習Robot Framework。
QTP:Web UI自動化測試
QTP是一種自動測試工具。使用 QTP 的目的是想用它來執(zhí)行重復的手動測試,主要是用于回歸測試和測試同一軟件的新版本。因此你在測試前要考慮好如何對應用程序進行測試,例如要測試那些功能、操作步驟、輸入數(shù)據(jù)和期望的輸出數(shù)據(jù)等。
QTP針對的是GUI應用程序,包括傳統(tǒng)的Windows應用程序,以及現(xiàn)在越來越流行的Web應用。它可以覆蓋絕大多數(shù)的軟件開發(fā)技術(shù),簡單高效,并具備測試用例可重用的特點。其中包括:創(chuàng)建測試、插入檢查點、檢驗數(shù)據(jù)、增強測試、運行測試、分析結(jié)果和維護測試等方面。
LoadRunner:性能測試
LoadRunner,是一種預測系統(tǒng)行為和性能的負載測試工具。通過以模擬上千萬用戶實施并發(fā)負載及實時性能監(jiān)測的方式來確認和查找問題,LoadRunner能夠?qū)φ麄€企業(yè)架構(gòu)進行測試。
企業(yè)使用LoadRunner能最大限度地縮短測試時間,優(yōu)化性能和加速應用系統(tǒng)的發(fā)布周期。LoadRunner可適用于各種體系架構(gòu)的自動負載測試,能預測系統(tǒng)行為并評估系統(tǒng)性能。
Jenkins:持續(xù)集成
自動化構(gòu)建編譯,部署,任務(wù)執(zhí)行,測試報告,郵件通知等。
使用開源測試工具有很多好處,尤其是無直接的購買成本,而且可定制,但也有一定的局限性。尤其是缺乏專業(yè)的技術(shù)支持,有限的許可支持以及腳本維護有時會成為一個挑戰(zhàn)性的工作。
為了選擇正確的自動化測試工具,你應該確保該工具是處于活躍維護狀態(tài)的,并且與你所在企業(yè)業(yè)務(wù)、團隊、技能匹配,并且是團隊里有相應的專家。
因此在選擇工具之前,你必須仔細研究,以便該工具能夠滿足你的測需求,并且能幫助你更好的執(zhí)行測試。
1. Appium(免費)
一款開源的移動測試自動化工具,適用于Android和iOS系統(tǒng)。
鏈接:
2、Frank(免費)
Frank只允許測試iOS應用,值得一提的是它的開源框架結(jié)合了JSON和Cucumber。
鏈接:
3、KIF for iOS(免費)
KIF是為iOS移動應用UI測試開發(fā)的一個框架,可利用內(nèi)置iOS中可訪問的API模擬真實的用戶交互。在Objective-C中寫的測試對iOS程序員來講已經(jīng)很熟悉,但蘋果轉(zhuǎn)向Swift使得其對Objective-C的使用處于劣勢。
鏈接:
4、iOS Driver for iOS(免費)iOS Driver利用Selenium和WebDriver 的API來測試iOS移動應用,默認在模擬器上運行。這些模擬器可使執(zhí)行命令速度更加快、可伸縮性更強。
鏈接:
本文標題:測試驅(qū)動開發(fā)ios,測試驅(qū)動開發(fā)不適合使用cmm
文章網(wǎng)址:http://chinadenli.net/article21/dsiedjd.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導航、網(wǎng)站設(shè)計、微信公眾號、網(wǎng)站內(nèi)鏈、網(wǎng)站維護、自適應網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)