1. Appium(免費(fèi))

成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè),成都做網(wǎng)站公司-成都創(chuàng)新互聯(lián)已向上千余家企業(yè)提供了,網(wǎng)站設(shè)計(jì),網(wǎng)站制作,網(wǎng)絡(luò)營(yíng)銷等服務(wù)!設(shè)計(jì)與技術(shù)結(jié)合,多年網(wǎng)站推廣經(jīng)驗(yàn),合理的價(jià)格為您打造企業(yè)品質(zhì)網(wǎng)站。
一款開(kāi)源的移動(dòng)測(cè)試自動(dòng)化工具,適用于Android和iOS系統(tǒng)。
鏈接:
2、Frank(免費(fèi))
Frank只允許測(cè)試iOS應(yīng)用,值得一提的是它的開(kāi)源框架結(jié)合了JSON和Cucumber。
鏈接:
3、KIF for iOS(免費(fèi))
KIF是為iOS移動(dòng)應(yīng)用UI測(cè)試開(kāi)發(fā)的一個(gè)框架,可利用內(nèi)置iOS中可訪問(wèn)的API模擬真實(shí)的用戶交互。在Objective-C中寫的測(cè)試對(duì)iOS程序員來(lái)講已經(jīng)很熟悉,但蘋果轉(zhuǎn)向Swift使得其對(duì)Objective-C的使用處于劣勢(shì)。
鏈接:
4、iOS Driver for iOS(免費(fèi))iOS Driver利用Selenium和WebDriver 的API來(lái)測(cè)試iOS移動(dòng)應(yīng)用,默認(rèn)在模擬器上運(yùn)行。這些模擬器可使執(zhí)行命令速度更加快、可伸縮性更強(qiáng)。
鏈接:
大部分Xcode 項(xiàng)目模板現(xiàn)在支持拆箱測(cè)試。例如,當(dāng)一個(gè)新的iOS app在Xcode 中通過(guò)快捷鍵 建立,最終工程文件將會(huì)通過(guò)兩個(gè)頂級(jí)組來(lái)配置(除逗Products地組之外):"AppName"
"AppNameTests"。工程自動(dòng)生成的scheme可以使用快捷鍵建立并運(yùn)行可執(zhí)行的目標(biāo),并用來(lái)建立并運(yùn)行測(cè)試目標(biāo)
。
在測(cè)試目標(biāo)中有一個(gè)叫做AppNameTests的單獨(dú)的文件,其包括一個(gè)exampleXCTestCase 類,由樣式模板setUp tearDown 方法組成,還包括一個(gè)功能和性能測(cè)試的示例。
XCTestCase
Xcode單元測(cè)試包含在一個(gè) XCTestCase 的子類中。依據(jù)約束,每一個(gè) XCTestCase 子類封裝一個(gè)特殊的有關(guān)聯(lián)的集合,例如一個(gè)功能、用例或者一個(gè)程序流。
通過(guò)一個(gè)可管理的大量測(cè)試用例分拆邏輯測(cè)試,在代碼庫(kù)的增長(zhǎng)和進(jìn)化方面會(huì)產(chǎn)生很多不同。
setUp tearDown
setUp 在 XCTestCase 中的每一個(gè)測(cè)試運(yùn)行前被調(diào)用,tearDown 在測(cè)試運(yùn)行結(jié)束時(shí)被調(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() } }
這些方法對(duì)用來(lái)建立測(cè)試用例的所有測(cè)試中用到的常見(jiàn)對(duì)象是有用的:
var calendar: NSCalendar? var locale: NSLocale? override func setUp() { super.setUp() self.calendar = NSCalendar(identifier: NSGregorianCalendar) self.locale = NSLocale(localeIdentifier: "en_US") }
由于 XCTestCase 不被考慮在一個(gè)測(cè)試用例定義中直接初始化,在setUp中的被共享的初始化屬性便作為可選擇的變量被聲明。
功能測(cè)試
每一個(gè)名字中以逗test地開(kāi)始的方法被標(biāo)識(shí)用來(lái)測(cè)試,并且將會(huì)評(píng)估函數(shù)中的所有斷言來(lái)決定是否通過(guò)或者失敗。例如,如果 1 + 1等于 2,函數(shù) testOnePlusOneEqualsTwo 將會(huì)繼續(xù)執(zhí)行:
func testOnePlusOneEqualsTwo() { XCTAssertEqual(1 + 1, 2, "one plus one should equal two") }
所有你真正需要知道的 XCTest 斷言
XCTest 帶有許多 內(nèi)建的斷言,但是可以精簡(jiǎn)成幾個(gè)要點(diǎn):
基礎(chǔ)性測(cè)試
為了整體精簡(jiǎn),所有的 XCTest 斷言縮小為一個(gè)獨(dú)立的、基礎(chǔ)的斷言:
XCTAssert(expression, format...)
如果以上表達(dá)式判斷為真,測(cè)試將會(huì)通過(guò)。否則,測(cè)試失敗,將會(huì)打印格式化的消息。
雖然一個(gè)開(kāi)發(fā)者能夠只使用 XCTAssert,但是如下助手?jǐn)嘌匀匀惶峁┝艘恍┯杏玫恼Z(yǔ)法幫助澄清正在進(jìn)行的測(cè)試究竟是什么。如果可能,使用最明確的可用的斷言,僅僅在可以更好表達(dá)意圖的情況下使用 XCTAssert 。
布爾測(cè)試
布爾值或者簡(jiǎn)單的布爾表達(dá)式使用 XCTAssertTrue XCTAssertFalse:
XCTAssert 等于 XCTAssertTrue
相等性測(cè)試
當(dāng)要測(cè)試兩個(gè)值是否相等時(shí)使用 XCTAssert[Not]Equal:
XCTAssertEqual(expression1, expression2, format...) XCTAssertNotEqual(expression1, expression2, format...)
XCTAssert[Not]EqualObjects 在Swift 中不是必要的,因此在標(biāo)量值和對(duì)象間沒(méi)有區(qū)別。
當(dāng)指定測(cè)試兩個(gè)雙精度,單精度,或者其他浮點(diǎn)值是否相等,使用 XCTAssert[Not]EqualWithAccuracy 來(lái)報(bào)告浮點(diǎn)精度問(wèn)題。
XCTAssertEqualWithAccuracy(expression1, expression2, accuracy, format...) XCTAssertNotEqualWithAccuracy(expression1, expression2, accuracy, format...)
除了前面提到的相等斷言,還有XCTAssertGreaterThan[OrEqual]
XCTAssertLessThan[OrEqual] 提供了== ,, =, , = 比較運(yùn)算符。
空值測(cè)試
使用 XCTAssert[Not]Nil 斷言一個(gè)給定的值是否存在(或者不存在):
XCTAssertNil(expression, format...) XCTAssertNotNil(expression, format...)
無(wú)條件失敗
最終,XCTFail 斷言將會(huì)總是失敗:
XCTFail(format...)
XCTFail 通常用來(lái)為一個(gè)將會(huì)被通過(guò)的測(cè)試指代一個(gè)占位符。
它對(duì)完成一個(gè)被其他流程控制結(jié)構(gòu)發(fā)現(xiàn)的錯(cuò)誤用例也是有用的,例如一個(gè)用來(lái)測(cè)試成功的 if 語(yǔ)句的 else 分句。
性能測(cè)試
Xcode 6的新特性能夠檢測(cè)代碼性能:
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).
性能測(cè)試幫助為主要代碼路徑確定一個(gè)性能基準(zhǔn)。將它們分散在你的測(cè)試用例中用來(lái)確認(rèn)重要的算法以及隨著時(shí)間的推移程序保持高性能。
XCTestExpectation
或許 Xcode 6 中新增的最讓人興奮的特性是內(nèi)建的對(duì)于異步測(cè)試的支持,借助 XCTestExpectation 類來(lái)實(shí)現(xiàn)。現(xiàn)在,測(cè)試能夠?yàn)榱舜_定的合適的條件等待一個(gè)指定時(shí)間長(zhǎng)度,而不需要求助于GCD。
要做一個(gè)異步測(cè)試,首先使用 expectationWithDescription 建立一個(gè)期望值。
let expectation = expectationWithDescription("...")
然后,在方法底部,增加 waitForExpectationsWithTimeout 方法,指定一個(gè)超時(shí),如果測(cè)試條件不適合時(shí)間范圍便會(huì)結(jié)束執(zhí)行:
waitForExpectationsWithTimeout(10, handler: { error in // ... })
現(xiàn)在,剩下的步驟是在異步方法被測(cè)試的相關(guān)的回調(diào)中實(shí)現(xiàn)那個(gè)期望值。
expectation.fulfill()
如果測(cè)試有不止一個(gè)期望值,它將不會(huì)通過(guò),除非每一次期望值在被 inwaitForExpectationsWithTimeout() 指定的超時(shí)中執(zhí)行 fulfill()。
expectation.fulfill()
這里有一個(gè)例子是如何能夠使用XCTestExpectation API測(cè)試的異步網(wǎng)絡(luò)請(qǐng)求:
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模擬
借助對(duì)異步測(cè)試一流的支持,Xcode 6 似乎已經(jīng)完成一個(gè)現(xiàn)代的測(cè)試驅(qū)動(dòng)的開(kāi)發(fā)者的全部需求。好的,或許只剩下一個(gè):mocking。
Mocking 對(duì)于隔離和控制行為是一個(gè)有用的技術(shù),對(duì)于復(fù)雜的原因,非確定性的,或者性能約束,通常不會(huì)讓其自身測(cè)試。例子包括模擬網(wǎng)絡(luò)請(qǐng)求,精確數(shù)據(jù)查詢,或者包括特殊的競(jìng)爭(zhēng)條件。
有幾個(gè)開(kāi)源庫(kù)用來(lái)建立仿真對(duì)象和剔除方法調(diào)用,但是這些庫(kù)大量依賴
Objective-C 運(yùn)行時(shí)操作,一些現(xiàn)在不可能使用Swift。
然而,實(shí)際上這或許在 Swift 中不是必需的,原因在于 Swift 極少的語(yǔ)法約束。
在Swift中,類可以在一個(gè)函數(shù)定義中聲明,允許仿真對(duì)象完全自包含。只要聲明一個(gè)仿真內(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)最終實(shí)現(xiàn)目標(biāo):內(nèi)建測(cè)試工具現(xiàn)在是足夠好用了。也就是說(shuō),沒(méi)有特殊的強(qiáng)制性的使用任何附加的抽象事物的理由,該抽象事物是用來(lái)為大量的app和 庫(kù)提供可接受的測(cè)試范圍。除非在需要極端情況下,諸如:需要大量消除,仿真,或者其他獨(dú)特的測(cè)試結(jié)構(gòu),XCTest 斷言,期望值,和性能衡量將會(huì)是充分的。
開(kāi)發(fā)和壓力測(cè)試軟件大全:
ShareSDK
功能強(qiáng)大、簡(jiǎn)單易用的iOS app開(kāi)發(fā)必備社會(huì)化分享類庫(kù):ShareSDK。iOS app開(kāi)發(fā)者只需10分鐘即可集成到自己的APP中。不僅支持如QQ、微信、新浪微博、騰訊微博、人人網(wǎng)、豆瓣、facebook、twitter等國(guó)內(nèi)外主流社交平臺(tái),還有強(qiáng)大的統(tǒng)計(jì)分析管理后臺(tái),可以實(shí)時(shí)了解用戶、信息流、回流率等數(shù)據(jù)。
iOS加密
iOS app開(kāi)發(fā)必備加密技術(shù),全球獨(dú)有,針對(duì)iOS app開(kāi)發(fā)的技術(shù)原理和破解原理,分別從本地?cái)?shù)據(jù)、方法體/方法名、URL編碼、程序結(jié)構(gòu)、網(wǎng)絡(luò)傳輸數(shù)據(jù)等幾個(gè)方面對(duì)iOS app開(kāi)發(fā)進(jìn)行全方位的保護(hù),從而實(shí)現(xiàn)iOS app防破解保護(hù)。
Tui
iOS app開(kāi)發(fā)必備,基于FlashCS6的cocos2d-x UI編輯器,可用于操作系統(tǒng):Mac OS,Windows
PonyDebugger
iOS app開(kāi)發(fā)必備網(wǎng)絡(luò)調(diào)試工具,用于操作系統(tǒng):Mac OS,其他Pony Debugger 是一個(gè)iOS app開(kāi)發(fā)必備的遠(yuǎn)程調(diào)試工具包,通過(guò)使用 Chrome 開(kāi)發(fā)者工具來(lái)調(diào)試 iOS app開(kāi)發(fā)的網(wǎng)絡(luò)流量和數(shù)據(jù)存儲(chǔ)。
iTestin
iTestin是免費(fèi)服務(wù)iOS app開(kāi)發(fā)者的真機(jī)自動(dòng)化云測(cè)試客戶端iOS app開(kāi)發(fā)工具。基于真實(shí)的智能終端設(shè)備錄制一個(gè)測(cè)試腳本然后運(yùn)行,并輸出運(yùn)行結(jié)果。支持功能測(cè)試、UI測(cè)試、性能測(cè)試、穩(wěn)定性測(cè)試、壓力測(cè)試,返回包括日志和截圖的詳細(xì)測(cè)試報(bào)告。
Cornerstone
Mac上最佳的SVN管理iOS app開(kāi)發(fā)必備工具,可用于的用于操作系統(tǒng)包括Mac OS
CocosBuilder
最牛iOS app開(kāi)發(fā)必備Cocos2d編輯器,Mac專屬,對(duì)于開(kāi)發(fā)iOS app,Cocos2d-iPhone引擎做的2D游戲開(kāi)發(fā)者來(lái)說(shuō)最大的福音
MarkMan
MarkMan是一款iOS app開(kāi)發(fā)必備高效的設(shè)計(jì)稿標(biāo)注和測(cè)量軟件,用于操作系統(tǒng):Mac OS,Windows
SQLCipher
SQLite加密,iOS app開(kāi)發(fā)必備,SQLCipher 提供了對(duì) SQLite 數(shù)據(jù)庫(kù)的傳輸層進(jìn)行全面加密的iOS app開(kāi)發(fā)工具。而通過(guò)使用 SQLCipher ,整個(gè)加密過(guò)程對(duì)客戶端是透明的,無(wú)需改動(dòng)應(yīng)用程序。
分享標(biāo)題:ios測(cè)試驅(qū)動(dòng)開(kāi)發(fā),iOS開(kāi)發(fā)者測(cè)試
分享網(wǎng)址:http://chinadenli.net/article7/dsspgoj.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、標(biāo)簽優(yōu)化、、手機(jī)網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站建設(shè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)