色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Appium +iOS自動(dòng)化測(cè)試教程(實(shí)踐、總結(jié) 、踩坑)

Testin云測(cè) ? 來源:Testin云測(cè) ? 2024-11-11 09:42 ? 次閱讀

一、前言

項(xiàng)目閑置下來了,終于抽空有時(shí)間搞自動(dòng)化了,看了下網(wǎng)上的教程基本通篇都是android自動(dòng)化的介紹 ,ios自動(dòng)化方面的內(nèi)容網(wǎng)上簡(jiǎn)介的少之可憐。由于本人對(duì)ios自動(dòng)化也是第一次做,甚至對(duì)蘋果電腦的使用都不太熟悉,花了大概一周時(shí)間粗略的看下ios開發(fā)知識(shí),網(wǎng)上隨手下載的來源于這兩本《iOS開發(fā)從入門到精通.pdf》、《iOS開發(fā)指南:從零基礎(chǔ)到App上架.pdf 》、至于Mac筆記本的學(xué)習(xí)完全是邊使用邊查詢操作 ;本文完全秉著指導(dǎo)小白操作的流程帶你一步一步搭建IOS自動(dòng)化測(cè)試環(huán)境

二、iOS 自動(dòng)化相關(guān)框架介紹

自動(dòng)化測(cè)試類工具 隨著移動(dòng)互聯(lián)網(wǎng)的興起,APP 測(cè)試的越來越被重視!Android 系統(tǒng)因?yàn)樽约旱拈_源性,測(cè)試工具和測(cè)試方法比較廣為流傳,但是 iOS 系統(tǒng)的私密性,導(dǎo)致很多測(cè)試的執(zhí)行都有點(diǎn)麻煩。

為了幫助大家更好的執(zhí)行 iOS APP 的測(cè)試,以下為大家收集了非常全面的 iOS 測(cè)試工具,涵蓋各大領(lǐng)域,希望各位能有所認(rèn)識(shí)

三、自動(dòng)化測(cè)試類工具

1. UIAutomation

UIAutomation 是蘋果提供的UI 自動(dòng)化測(cè)試框架,使用 JavaScript 編寫。

基于 UIAutomation 有擴(kuò)展型的工具框架和驅(qū)動(dòng)型的框架。擴(kuò)展型框架以 JavaScript 擴(kuò)展庫方法提供了很多好用 js 工具,注入式的框架通常會(huì)提供一些 Lib 或者是 Framework,要求測(cè)試人員在待測(cè)應(yīng)用的代碼工程中導(dǎo)入這些內(nèi)容,框架可以通過他們完成對(duì) app 的驅(qū)動(dòng)。

驅(qū)動(dòng)型 UI Automation 在自動(dòng)化測(cè)試底層使用了 UI Automation 庫,通過 TCP 通信的方式驅(qū)動(dòng) UI Automation 來完成自動(dòng)化測(cè)試,通過這種方式,編輯腳本的語言不再局限于 JavaScript。

這個(gè)工具在 iOS UI 自動(dòng)化測(cè)試中使用非常廣泛。

具體參考資料:https://developer.apple.com/library/ios/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/UIAutomation.html

2.XCTest

XCTest 是蘋果在 iOS 7 和 Xcode5 引入的一個(gè)簡(jiǎn)單而強(qiáng)大的測(cè)試框架,集成在 Xcode 中,用來編寫測(cè)試代碼。它提供了各個(gè)層次的測(cè)試。

XCTest 測(cè)試編寫起來非常簡(jiǎn)單,并且遵循 xUnit 風(fēng)格。

Xcode 在創(chuàng)建工程時(shí),會(huì)默認(rèn)使用 XCTest,并且默認(rèn)創(chuàng)建了Unit Test(單元測(cè)試)和UI Test(界面測(cè)試)兩個(gè) Target,其中 Unit Test 主要用于測(cè)試代碼的大部分基本功能,比如絕大多數(shù) Model 的類和方法測(cè)試,業(yè)務(wù)邏輯測(cè)試,網(wǎng)絡(luò)接口調(diào)用測(cè)試等等。

UI Test 一般會(huì)考慮到用戶的交互流程,模擬用戶的交互操作,利用 XCTest 的 UI 記錄特性來獲取界面上的一些列視圖元素和操作事件,然后在測(cè)試方法中觸發(fā)事件。

所以這是一個(gè)可以提供各個(gè)層次的測(cè)試的框架,比如單元測(cè)試,自動(dòng)化測(cè)試,性能測(cè)試等。

具體參考資料:

https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/01-introduction.html

3. KIF

KIF 是 Keep It Functional 項(xiàng)目的縮寫,是一款iOS app 功能性測(cè)試框架,來自 Square,該測(cè)試框架只支持 iOS。

所有測(cè)試使用 Objective-C 語言編寫,對(duì)測(cè)試人員來講,需要熟練的掌握 Objective-C 語言 , 對(duì)蘋果開發(fā)者來說非常容易上手,更是一款開發(fā)者廣為推薦的測(cè)試工具。

KIF 使用未公開的 Apple API(私有 API),這對(duì)于測(cè)試目的而言是安全的,基于第三方 iOS UI 的單元測(cè)試框架,所以可以做項(xiàng)目的單元測(cè)試,也可以做 UI 集成測(cè)試。但缺點(diǎn)是運(yùn)行較慢。

具體參考資料:https://github.com/kif-framework/KIF

4. Frank

Frank 是 iOS 開發(fā)環(huán)境下一款實(shí)現(xiàn)自動(dòng)測(cè)試的工具,Xcode 環(huán)境下開發(fā)完成后,通過 Frank 實(shí)現(xiàn)結(jié)構(gòu)化的測(cè)試用例,其底層語言為 Ruby,作為一款開源的 iOS 測(cè)試工具,在國外已經(jīng)有廣泛的應(yīng)用。

但是國內(nèi)相關(guān)資料卻比較少。其最大的優(yōu)點(diǎn)是允許我們用熟悉的自然語言實(shí)現(xiàn)實(shí)際的操作邏輯。

它提供了針對(duì) iOS 平臺(tái)的功能測(cè)試能力,可以模擬用戶的操作對(duì)應(yīng)用程序進(jìn)行黑盒測(cè)試,并且使用 Cucumber 編寫測(cè)試用例,使測(cè)試用例如同自然語言一樣描述功能需求,讓測(cè)試以“可執(zhí)行的文檔”的形式成為業(yè)務(wù)客戶與交付團(tuán)隊(duì)之間的橋梁。

優(yōu)點(diǎn):測(cè)試場(chǎng)景是在 Cucumber 的幫助下,用可理解的英語句子寫的,還有活躍的社區(qū)支持,以及不斷擴(kuò)大中的庫。

缺點(diǎn):對(duì)手勢(shì)的支持有限,所以在設(shè)備上運(yùn)行測(cè)試有點(diǎn)難。

具體參考資料:https://www.testingwithfrank.com/

5. Calabash-iOS

Calabash 是一個(gè)適用于 iOS 和 Android 開發(fā)者的跨平臺(tái) app 測(cè)試框架,可用來測(cè)試屏幕截圖、手勢(shì)和實(shí)際功能代碼。

Calabash 開源免費(fèi)并支持 Cucumber 語言,Cucumber 能讓你用自然的英語語言表述 app 的行為,實(shí)現(xiàn) BDD(Behavior Driven Development,行為驅(qū)動(dòng)開發(fā))。

而 Calabash-iOS 就是一個(gè)基于 Calabash 的 iOS 的功能、自動(dòng)化測(cè)試框架。

優(yōu)點(diǎn):

有大型社區(qū)支持;

列表項(xiàng)簡(jiǎn)單,類似英語表述的測(cè)試語句支持在屏幕上的所有動(dòng)作,如滑動(dòng),縮放,旋轉(zhuǎn),敲擊等。

缺點(diǎn):

測(cè)試步驟失敗后,將跳過所有的后續(xù)步驟,這可能會(huì)導(dǎo)致錯(cuò)過更嚴(yán)重的產(chǎn)品問題。

測(cè)試耗費(fèi)時(shí)間,因?yàn)樗偸悄J(rèn)先安裝 app,需要 Calabash 框架安裝在 iOS 的 ipa 文件中, 因此測(cè)試人員必須要有 iOS 的 app 源碼。

除了 Ruby,對(duì)其他語言不友好

具體資料獲取路徑:https://github.com/calabash/calabash-ios

6. Subliminal

Subliminal 是另一款與 XCTest 集成的框架,也是個(gè)不錯(cuò) iOS 集成測(cè)試框架。

與 KIF 不同的是,它基于 UIAutomation 編寫,對(duì)開發(fā)者隱藏 UIAutomation 中一些復(fù)雜的細(xì)節(jié)。可惜近幾年沒有更新了,若能支持 swift 就好了。

具體資料獲取路徑:https://github.com/Diaoul/subliminal

7. Kiwi

Kiwi 是對(duì) XCTest 的一個(gè)完整替代,使用 xSpec 風(fēng)格編寫測(cè)試。Kiwi 帶有自己的一套工具集,包括 expectations、mocks、stubs,甚至還支持異步測(cè)試。

它是一個(gè)適用于 iOS 開發(fā)的 Behavior Driven Development(BDD)庫,有著非常漂亮的語法。

優(yōu)點(diǎn)在于其簡(jiǎn)潔的接口和可用性,易于設(shè)置和使用,可以寫出結(jié)構(gòu)性強(qiáng)易讀測(cè)試,非常適合新手開發(fā)者。

Kiwi 也是使用 Objective-C 語言編寫,易于 iOS 開發(fā)人員上手。

具體資料獲取路徑:https://github.com/kiwi-bdd/Kiwi8. Appium

Appium 是一個(gè)開源的、跨平臺(tái)的自動(dòng)化測(cè)試工具,支持 iOS、Android 和 FirefoxOS 平臺(tái)。

通過 Appium,開發(fā)者無需重新編譯 app 或者做任何調(diào)整,就可以測(cè)試移動(dòng)應(yīng)用,可以使測(cè)試代碼訪問后端 API 和數(shù)據(jù)庫。

它是通過驅(qū)動(dòng)蘋果的 UIAutomation 框架來實(shí)現(xiàn)的 iOS 平臺(tái)支持。

開發(fā)者可以使用 WebDriver 兼容的任何語言編寫測(cè)試腳本,如 Ruby,C#,Java, JS,OC, PHP,Python,Perl 和 Clojure 語言。

具體資料獲取路徑:http://appium.io/

內(nèi)測(cè)發(fā)布工具

1. fir.im

為開發(fā)者提供測(cè)試應(yīng)用極速發(fā)布,應(yīng)用崩潰實(shí)時(shí)分析、用戶反饋收集等一系列開發(fā)測(cè)試效率工具服務(wù),幫助開發(fā)者將更多精力放在產(chǎn)品的開發(fā)與應(yīng)用的優(yōu)化上。

2. 蒲公英

『蒲公英』是專為 iOS、Android 開發(fā)者提供的免費(fèi)用應(yīng)用內(nèi)測(cè)、托管的平臺(tái),旨在解決開發(fā)者將應(yīng)用分發(fā)給內(nèi)測(cè)用戶時(shí)的繁雜、低效的問題。

3. TestFlight

TestFlight 是蘋果提供的應(yīng)用測(cè)試工具,允許開發(fā)者邀請(qǐng)用戶對(duì)應(yīng)用的預(yù)發(fā)布版本進(jìn)行測(cè)試,從而在應(yīng)用正式發(fā)布至 App Store 前收集用戶反饋。

以上常用框架介紹完了,本篇幅主要以appium進(jìn)行實(shí)踐講解

Appium驅(qū)動(dòng)IOS測(cè)試原理

XCUITest是蘋果開發(fā)的一個(gè)做IOS自動(dòng)化測(cè)試的框架,需要了解些Swift等iOS編程知識(shí)WebDriverAgent是Facebook開發(fā)的一個(gè)iOS自動(dòng)化測(cè)試工具,先來看下面的這張?jiān)韴D:

2beae13e-904d-11ef-a511-92fbcf53809c.png

WDA在Client創(chuàng)建了一個(gè)Server,在手機(jī)端安裝了一個(gè)叫作WebDriverAgentRunner 的一個(gè)應(yīng)用;這個(gè)應(yīng)用會(huì)接收來自 Server 的指令,并連接底層的 XCTest.framwork,讓 XCTest.framwork 調(diào)用蘋果API來操作手機(jī)進(jìn)行自動(dòng)化

而appium是把WebDriverAgentRunner 給集成進(jìn)去了,因此實(shí)現(xiàn)了appium的跨平臺(tái)能力

2bf888ca-904d-11ef-a511-92fbcf53809c.png

通過上圖我們了解到 Appium 很粗暴的把整個(gè) WebDriverAgent 直接集成到自己的項(xiàng)目里,然后通信機(jī)制就走 WebDriverAgent,Appium 其實(shí)就提供了一個(gè) Client 端的作用。所以 iOS 9.3 系統(tǒng)之后自動(dòng)化測(cè)試核心是 WebDriverAgent,Appium 就提供了一個(gè) Client 端來寫腳本和發(fā)送指令。

Appium 自動(dòng)化架構(gòu)模式可以用一個(gè)抽象的架構(gòu)表示,就是下面這樣的:

2c130308-904d-11ef-a511-92fbcf53809c.png

從圖中可以看出:

Client 端是 Appium 之前本身提供的;

Server 端是:WebDriverAgent 和 Instruments;( Appium 直接把 WebDriverAgent 整個(gè)集成進(jìn)來,Instruments 是為了支持 iOS 9.3 之前的系統(tǒng))

最右邊是一個(gè)手機(jī)

之前 Server 是和 bootstrap.jar 通信,這里 WebDriverAgent 提供了 WebDriverAgentRunner (類似 bootstrap.jar 的功能),WebDriverAgent與之通信;

WebDriverAgentRunner 是一個(gè)應(yīng)用,Client 和 server 運(yùn)行了之后,WebDriverAgentRunner 會(huì)被裝到手機(jī)上,這個(gè)應(yīng)用會(huì)接收來自 Server 的指令,并連接底層的 XCTest.framwork,并告訴 XCTest.framwork 操作手機(jī)進(jìn)行自動(dòng)化。

關(guān)于 WebDriverAgent

FaceBook 出品:

實(shí)現(xiàn)了一個(gè) server,通過 server 可以遠(yuǎn)程控制 iOS 設(shè)備:?jiǎn)?dòng)應(yīng)用、關(guān)閉應(yīng)用、點(diǎn)擊、滾動(dòng)等操作;

通過連接 XCTest.framework 調(diào)用蘋果的 API 執(zhí)行動(dòng)作;

支持多個(gè)設(shè)備同時(shí)進(jìn)行自動(dòng)化;

Appium、Macaca 已經(jīng)集成。

但是 WebDriverAgent 僅僅只提供了一個(gè) server(和 inspect 進(jìn)行元素定位),并沒有像 Appium 一樣提供 java 或 python 的 Client 端去寫腳本,腳本執(zhí)行的時(shí)候發(fā)送指令給 server,然后去運(yùn)行。WebDriverAgent 要求你自己去實(shí)現(xiàn) Client 端,即拿 Java/ Python 的 WebDriver 庫進(jìn)行封裝,然后發(fā)送指令。所以 WebDriverAgent 其實(shí)就類似于 Appium server,就只是一個(gè) server。

基礎(chǔ)環(huán)境搭建

基礎(chǔ)環(huán)境:一臺(tái)蘋果筆記本、一個(gè)iphone手機(jī)

基礎(chǔ)環(huán)境

MacBook Pro: 10.15.7

Macbook Pro(做 iOS 測(cè)試,Mac 是繞不開的,我們依賴的軟件環(huán)境需要運(yùn)行在 Mac 上,必須要有一臺(tái) Mac 本(很貴),得攢銀子咬牙買一臺(tái) ~,我用的公司分配的測(cè)試本)。

iphone真機(jī):iPhone 8 Plus 14.4

iPhone、iPad:既然測(cè)試 iOS 軟件,那 iPhone 和 iPad 也自然不用多說了,雖然 Xcode 里有虛擬機(jī),但是實(shí)際測(cè)試還是以真機(jī)為準(zhǔn)。本文也主要以真機(jī)為準(zhǔn)

appium:1.20.2

appium原理

Appium是一個(gè)開源、跨平臺(tái)的測(cè)試框架,可以用來測(cè)試原生及混合的移動(dòng)端應(yīng)用。Appium支持IOS、Android及FirefoxOS平臺(tái)。Appium使用WebDriver的json wire協(xié)議,來驅(qū)動(dòng)Apple系統(tǒng)的UIAutomation庫、Android系統(tǒng)的UIAutomator框架。Appium對(duì)IOS系統(tǒng)的支持得益于Dan Cuellar’s對(duì)于IOS自動(dòng)化的研究。Appium也集成了Selendroid,來支持老android版本。

Appium支持Selenium WebDriver支持的所有語言,如java、Object-C、JavaScript、Php、Python、Ruby、C#、Clojure,或者Perl語言,更可以使用Selenium WebDriver的Api。Appium支持任何一種測(cè)試框架。如果只使用Apple的UIAutomation,我們只能用javascript來編寫測(cè)試用例,而且只能用Instruction來運(yùn)行測(cè)試用例。同樣,如果只使用Google的UIAutomation,我們就只能用java來編寫測(cè)試用例。Appium實(shí)現(xiàn)了真正的跨平臺(tái)自動(dòng)化測(cè)試。

appium選擇了client-server的設(shè)計(jì)模式。只要client能夠發(fā)送http請(qǐng)求給server,那么的話client用什么語言來實(shí)現(xiàn)都是可以的,這就是appium及webdriver如何做到支持多語言的;

Appium優(yōu)點(diǎn)

開源

跨架構(gòu):Native App、Hybird App、Web App

跨設(shè)備:Android、iOS、Firefox OS

不依賴源碼

使用任何 WebDriver 兼容的語言來編寫測(cè)試用例。比如 Java, Objective-C, JavaScript with Node.js (in both callback and yield-based flavours), PHP, Python, Ruby, C#, Clojure, 或者 Perl.

不需要重新編譯APP

支持IOS手機(jī)錄制視頻

Appium理念

你無需為了自動(dòng)化,而重新編譯或者修改你的應(yīng)用。

你不必局限于某種語言或者框架來寫和運(yùn)行測(cè)試腳本。

一個(gè)移動(dòng)自動(dòng)化的框架不應(yīng)該在接口上重復(fù)造輪子。(移動(dòng)自動(dòng)化的接口應(yīng)該統(tǒng)一)

無論是精神上,還是名義上,都必須開源。

Appium 在 iOS 下工具的變革:

iOS 9 之前一直以 instruments 下的 UIAutomation為驅(qū)動(dòng)底層技術(shù)(弊端由于 instruments 的限制,單臺(tái) mac 只能對(duì)應(yīng)單臺(tái)設(shè)備);

iOS 9.3 時(shí)代推出 XCUITest 工具,用以替代 UIAutomation;

iOS 10 時(shí)代蘋果直接廢棄了 UIAutomation、Facebook 推出 WebDriverAgent(實(shí)現(xiàn)的 server 能夠支持單臺(tái) mac 對(duì)應(yīng)多個(gè)設(shè)備);

Appium 在iOS 9.3 后全面采用 WebDriverAgent 的方案。

xcode: 12.4

MacBook appstore應(yīng)用商店搜索下載即可

安裝內(nèi)容

前提環(huán)境:

python , selenium , setuptools、pip

通用環(huán)境:

Homebrew ,Node & NPM ,Carthage ,Appium ,python-client ,Appium-Doctor , ios-deploy , ideviceinstaller & libimobiledevice , ios_webkit_debug_proxy , authroize-ios

IOS環(huán)境:

xCode , Command Line Tools

前提環(huán)境

python

此處使用python3 , 官網(wǎng)下載https://www.python.org/ 一步下一步安裝即可

selenium

終端輸入: pip install Selenium 安裝最新版本的selenium。pip install Selenium 如需安裝指定的版本,則pip install Selenium==版本號(hào)。

setuptools、pip

下載setuptools

https://pypi.python.org/pypi/setuptools 、https://pypi.python.org/pypi/pip

打開cmd 進(jìn)入setuptools解壓目錄,輸入:python setup.py install

進(jìn)入pip解壓目錄,輸入:python setup.py install

安裝好后,打開終端,輸入pip,如提示不是內(nèi)部命令,則將python安裝目錄下Scripts目錄添加到環(huán)境變量Path中。

通用環(huán)境

Homebrew

Homebrew是一個(gè)包管理軟件,它可以使我們更容易地安裝其他一些軟件

/usr/bin/ruby-e"$(curl–fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"

覆蓋安裝:

/usr/bin/ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"brew-v//檢查homebrew是否安裝 brewlist//查看已安裝列表 brewupdate//更新Homebrew

如果安裝失敗:

可以打開網(wǎng)址:http://vip.ytesting.com/q.do?a&id=ff80808172521d8201726a74986f0880 將其內(nèi)容保存為homebrew.txt,

然后終端輸入:

/usr/bin/rubyhomebrew.txt

注意:此步驟還順帶安裝了Xcode命令行工具(xcode-commaindline-tools)。

檢查homebrew是否安裝

終端輸入安裝:

Node & NPM

Node是一個(gè)javascript運(yùn)行時(shí)環(huán)境,npm是節(jié)點(diǎn)包管理器。我們需要這些,因?yàn)锳ppium是一個(gè)節(jié)點(diǎn)應(yīng)用程序。

node-v重新安裝:brewreinstallnodenpmconfigsetregistryhttps://registry.npm.taobao.org/

默認(rèn)的npm源再國內(nèi)都很慢,安裝好node之后需要重新配置一個(gè)國內(nèi)源 (非必須)

在終端中,輸入以下命令(此命令也將安裝npm):

brewinstallnode

查看node版本

Carthage

Carthage項(xiàng)目依賴管理, 類似于 java 的 maven;主要是 WebDriverAgent 使用,WebDriverAgent 是用它做項(xiàng)目依賴的

brewinstallcarthage

更新carthage : rew upgrade carthage

重新安裝 : brew reinstall carthage2. 安裝完成后檢查一下是否安裝成功

carthageversion//打印出版本號(hào)即表示安裝成功

終端輸入:

Appium

Appium是一個(gè)用于本地、混合和移動(dòng)web應(yīng)用程序的開源測(cè)試自動(dòng)化框架。它使用WebDriver協(xié)議驅(qū)動(dòng)iOS、Android和Windows mobile應(yīng)用程序。

安裝 Appium(二選1) ;

兩者基本沒什么區(qū)別:非要說區(qū)別的話 ,方式1 安裝版本較穩(wěn)定 方式2則版本最新

方式1:安裝桌面版 appium-server(推薦)桌面版包含了appium-server,同時(shí)也包含一個(gè)元素定位器,建議安裝桌面版。

方式2:安裝 appium-server 版

npminstall-gappium

默認(rèn)安裝最新的版本,如果想安裝指定的版本:

npminstall-gappium@1.7.2

卸載 Appium:

npmuninstall-gappium npmcacheclean--forceappium-v

啟動(dòng)appium服務(wù)

appium& [1]965$[Appium]WelcometoAppiumv1.9.1 [Appium]AppiumRESThttpinterfacelistenerstartedon0.0.0.0:4723

安裝完成之后輸入appium -v,顯示版本號(hào)表示appium server安裝成功

終端安裝server版輸入

python-client

下載python-client

gitclonegit@github.com:appium/python-client.git

安裝python-client

cdpython-client#進(jìn)入python-client目錄 pythonsetup.pyinstall#安裝python-client

Appium-Doctor

2c26d6d0-904d-11ef-a511-92fbcf53809c.png

檢查appium安裝是否成功的工具集指令

npminstallappium-doctor-gappium-doctor--ios

備注:necessary dependcies 必須全部是對(duì)勾狀態(tài) ,可選部分依賴可以不用全部安裝

檢查 iOS環(huán)境是否安裝成功

安裝 appium-doctor

ios-deploy

ios-deploy 一個(gè)不需要用Xcode安裝和調(diào)試應(yīng)用的命令行工具。需要一個(gè)有效的開發(fā)者證書,需要 Xcode 7以上的版本。終端輸入命令進(jìn)行安裝:

brewinstallios-deploy#安裝命令 brewreinstallios-deploy#重新安裝 brewupgradeios-deploy#更新命令

常用命令如下:

ios-deploy-c#查看當(dāng)前鏈接的設(shè)備 ios-deploy--[xxx.app]#安裝APP ios-deploy--id[udid]--uninstall_only--bundle_id[bundleId]#卸載應(yīng)用 ios-deploy--id[udid]--list_bundle_id#查看所有應(yīng)用 ios-deploy--id[udid]--exists--bundle_id#查看應(yīng)用是否安裝

ideviceinstaller & libimobiledevice

ios-deploy、ideviceinstaller 類似 android 的 adb;是 Appium 底層用到的工具之一,用于獲取 iOS 設(shè)備信息

brewinstallideviceinstaller#用于查看bundleid brewreinstallideviceinstaller#重新安裝brewinstalllibimobiledevice--HEAD#安裝最新的更新 brewreinstalllibimobiledevice#重新安裝

其常用命令如下:

idevice_id-l#顯示當(dāng)前所連接設(shè)備的udid instruments-sdevices#列出所有設(shè)備,包括真機(jī)、模擬器、macideviceinstaller-u[udid]-i[xxx.ipa]#xxx.ipa為應(yīng)用在本地的路徑ideviceinstaller-u[udid]-U[bundleId]ideviceinstaller-u[udid]-l#查看設(shè)備安裝的第三方應(yīng)用 ideviceinstaller-u[udid]-l-olist_user#同上,查看設(shè)備安裝的第三方應(yīng)用 ideviceinstaller-u[udid]-l-olist_system#查看設(shè)備安裝的系統(tǒng)應(yīng)用 ideviceinstaller-u[udid]-l-olist_all#查看設(shè)備安裝的所有應(yīng)用ideviceinfo-u[udid]#獲取設(shè)備信息 ideviceinfo-u[udid]-kDeviceName#獲取設(shè)備名稱同命令 idevicenameidevicename#同上 ideviceinfo-u[udid]-kProductVersion#獲取設(shè)備版本10.3.3 ideviceinfo-u[udid]-kProductType#獲取設(shè)備類型iPhone8,1 ideviceinfo-u[udid]-kProductName#獲取設(shè)備系統(tǒng)名稱idevicesyslog#屏幕上即可看見手機(jī)上所有的日志 idevicesyslog>>iphone.log&#重定向日志到文件中idevicecrashreport#參數(shù)可設(shè)置具體文件存放位置idevicescreenshot#獲取當(dāng)前截屏,效率比appium截屏高10倍ideviceinfo#獲取設(shè)備所有信息 idevicesyslog#獲取設(shè)備日志 idevicecrashreport-etest#獲取設(shè)備 crashlog,test是文件夾需新建 idevicediagnostics#管理設(shè)備狀態(tài)-重啟、關(guān)機(jī)、睡眠等idevicediagnosticsrestart

重啟

其他系統(tǒng)文件信息

截屏

獲取手機(jī)端崩潰報(bào)告

查看手機(jī)實(shí)時(shí)日志

獲取設(shè)備信息

查看設(shè)備已安裝的應(yīng)用

卸載應(yīng)用

安裝應(yīng)用

查看當(dāng)前所連接的設(shè)備

ideviceinstaller 是一個(gè)與iOS設(shè)備的installation_proxy交互的工具,允許安裝、升級(jí)、卸載、存檔、還原和列舉已安裝或存檔的app。此工具用于在真機(jī)上運(yùn)行測(cè)試,默認(rèn)是都安裝的。

libimobiledevice 是一個(gè)跨平臺(tái)的軟件庫 ;不依賴任何已有的私有庫,不需要越獄。應(yīng)用軟件可以通過這個(gè)開發(fā)包輕松訪問設(shè)備的文件系統(tǒng)、獲取設(shè)備信息,備份和恢復(fù)設(shè)備,管理 SpringBoard 圖標(biāo),管理已安裝應(yīng)用,獲取通訊錄、日程、備注和書簽等信息

ios_webkit_debug_proxy

Appium使用ios_webkit_debug_proxy這個(gè)工具在真機(jī)上訪問web view。即混合應(yīng)用的測(cè)試 ;在終端中,運(yùn)行以下命令:

brewinstallios-webkit-debug-proxy#安裝命令 brewreinstallios-webkit-debug-proxy#重新安裝

附:

iOS WebKit Debug Proxy的原理是在本地起了一個(gè)代理做WebInspector到WebKit遠(yuǎn)程調(diào)試的協(xié)議轉(zhuǎn)發(fā)。

authroize-ios

iOS 授權(quán)工具,主要用于模擬器中一些權(quán)限的授權(quán);

npminstall-gauthroze-iossudoauthroze-ios sudoauthroze-ios

iOS 環(huán)境

Xcode

安裝Xcode和模擬器 :

啟動(dòng)Mac應(yīng)用程序商店并下載/安裝Xcode(Version 13.1)。安裝之后,啟動(dòng)Xcode并選擇 Xcode > Preferences > Components 來安裝可能想要測(cè)試的模擬器。

安裝Command Line Tools

默認(rèn)是不會(huì)安裝Command Line Tools的,Command Line Tools是在Xcode中的一款工具,可以在命令行中運(yùn)行C程序。為了配置appium環(huán)境,我們需要安裝Xcode Command Line Tools。

官網(wǎng)下載

方法一:

xcode-select--install#查看是否安裝 xcode-select:error:commandlinetoolsarealreadyinstalled,use"SoftwareUpdate"to install updates(錯(cuò)誤:命令行工具已經(jīng)安裝,請(qǐng)使用“軟件更新”安裝更新)

方法二:

打開Xcode,創(chuàng)建一個(gè)新的項(xiàng)目,在OSX下面選擇Application,如果右側(cè)出現(xiàn)Command line tool圖 標(biāo),表示已經(jīng)安裝成功。

方法三:

打開XCode 新建工程,如果安裝了,在新建窗口可以看到

xcodebuild-version

如果已經(jīng)安裝過xcode,appium-doctor提示未安裝,則運(yùn)行命令即可:

sudoxcode-select-r

附錄:

xcrunsimctllist|grep'(Booted)'#查看已啟動(dòng)的模擬器udid instruments-sdevices#列出所有設(shè)備,包括真機(jī)、模擬器、mac #錄像功能 xrecord--quicktime--list xrecord--quicktime--name="iPhone"--out="/Users/yong/video/iphone.mp4"--force

安裝完成后,在終端中輸入以下命令來查看安裝版本:

下載完成后,雙擊已下載的 .dmg 進(jìn)行安裝

檢驗(yàn) Command Line Tools 是否安裝成功

至此iOS環(huán)境搭建完畢!!!只適用于模擬器,真機(jī)的話還需要配置。

iOS 真機(jī)調(diào)試環(huán)境配置

前面我們知道WebDriverAgent是集成Appium測(cè)試ios應(yīng)用的橋梁 (表現(xiàn)形式上:是安裝在ios設(shè)備上的一個(gè)應(yīng)用),WebDriverAgent 先前是一個(gè)獨(dú)立的項(xiàng)目需要自己從github下載進(jìn)行編譯執(zhí)行 ,在后來appium已經(jīng)強(qiáng)行將其綁定在其組件中也就是說當(dāng)你安裝好appium時(shí),WebDriverAgent也自動(dòng)幫忙將其安裝好,只需要手動(dòng)修改部分內(nèi)容,重新編譯打包即可運(yùn)行。

方式一:WebDriverAgent通過下載源碼進(jìn)行安裝

不推薦通過此種方式安裝,該方式先前是為老版本ios 9.4 之前的版本沿用 ,且 github上的源碼已經(jīng)距離現(xiàn)在兩年多沒有更新了,為避免不必要的問題。盡可能不要使用此種方式

安裝webdriverAgent

(1) 在github上下載最新webdriverAgent代碼

gitclonehttps://github.com/facebook/WebDriverAgent

(2)下載依賴

cd/Users/yourname/WebDriverAgent mkdir-pResources/WebDriverAgent.bundle sh./Scripts/bootstrap.sh

該腳本會(huì)使用Carthage下載所有的依賴,使用npm打包響應(yīng)的js文件。執(zhí)行完成后,直接雙擊打開WebDriverAgent.xcodeproj這個(gè)文件。

配置webdriverAgent

配置WebDriverAgentLib,選擇開發(fā)者賬號(hào)

2c4382bc-904d-11ef-a511-92fbcf53809c.png

配置WebDriverAgentRunner,選擇開發(fā)者賬號(hào)

2c5ef9f2-904d-11ef-a511-92fbcf53809c.png

連接并選擇自己的ios設(shè)備,運(yùn)行

2c729ae8-904d-11ef-a511-92fbcf53809c.png

2c91b068-904d-11ef-a511-92fbcf53809c.png

2cae473c-904d-11ef-a511-92fbcf53809c.png

運(yùn)行成功后,iphone手機(jī)上會(huì)新建一個(gè)無圖標(biāo)的WebDriverAgent的應(yīng)用,自動(dòng)打開后馬上又返回桌面

2cdbf7ea-904d-11ef-a511-92fbcf53809c.png

而在xcode控制臺(tái)會(huì)打印如下日志:

2cf3bbfa-904d-11ef-a511-92fbcf53809c.png

里面有IP地址與端口號(hào)


在網(wǎng)址上輸入http://(ip地址):(端口號(hào))/status,如果網(wǎng)頁上返回一些json格式的數(shù)據(jù),說明運(yùn)行成功http://10.0.223.58:8100/status,有些iphone手機(jī)通過手機(jī)的IP和端口號(hào)還不能訪問,此時(shí)需要將手機(jī)的端口轉(zhuǎn)發(fā)到mac上

iproxy 8100 8100 # iproxy 8300 8100

執(zhí)行命令后,通過訪問 http://localhost:8100/ status來驗(yàn)證, 如果網(wǎng)頁上返回一些json格式的數(shù)據(jù),說明運(yùn)行成功

2d229678-904d-11ef-a511-92fbcf53809c.png

而如果是想查看UI的圖層,則可訪問http://localhost:8100/inspector,方便書寫測(cè)試用例

2d580eac-904d-11ef-a511-92fbcf53809c.png

備注:

通常來說為了持續(xù)集成,自動(dòng)化會(huì)比較好一些,我們不必每次都通過這種方式來啟動(dòng)xcode、WebDriverAgent,這種方式只在第1次搭建環(huán)境時(shí)運(yùn)行即可,我們可以在自動(dòng)化腳本中加入如下代碼,這樣只要在以后啟動(dòng)appium后,運(yùn)行自動(dòng)化腳本,就會(huì)直接啟動(dòng)WebDriverAgent

desiredCapabilities.setCapability("useNewWDA", true);

如果xcode在先啟動(dòng)wda,而代碼中又用此行代碼,運(yùn)行時(shí)xcode中會(huì)顯示執(zhí)行失敗,報(bào)出沖突的錯(cuò)誤哦,所以后期只在代碼中啟動(dòng)WebDriverAgent即可,不再需要用xcode啟動(dòng)

精簡(jiǎn)過程如下:

2d7f5fb6-904d-11ef-a511-92fbcf53809c.png

方式二:WebDriverAgent通過集成appium進(jìn)行安裝

命令行安裝:命令行安裝的appium一般安裝在/usr/local/bin/appium下,

WebDriverAgent將會(huì)在路徑:/usr/local/lib/node_modules/appium/node_modules/appium-xcuitest-driver/WebDriverAgent/ 下

桌面版安裝:WebDriverAgent的路徑是:ls /Applications/Appium.app/Contents/Resources/app/node_modules/appium/node_modules/appium-webdriveragent

以上兩種方式都可以在對(duì)應(yīng)目錄看到 WebDriverAgent.xcodeproj 工程,右鍵選擇用xcode打開 ;在 “Signing&Capabilities” 下將 WebDriverAgentLib 和 WebDriverAgentRunner設(shè)置成 “Automatically manage signing” 并在 “Team” 中選擇你的開發(fā)團(tuán)隊(duì)

2da07278-904d-11ef-a511-92fbcf53809c.png

新用戶第一次需要?jiǎng)?chuàng)建Team團(tuán)隊(duì)

2dbeb4b8-904d-11ef-a511-92fbcf53809c.png

2de4a498-904d-11ef-a511-92fbcf53809c.png

2e079d18-904d-11ef-a511-92fbcf53809c.png

2e1a97b0-904d-11ef-a511-92fbcf53809c.png

2e2e7f0a-904d-11ef-a511-92fbcf53809c.png

剩下操作步驟和方式一種第3步一樣, 不在此列出 ;

IOS自動(dòng)化-WebDriverAgent-APPIUM框架原理

WebDriverAgent是Facebook開發(fā)的基于XCTest.framework的開源項(xiàng)目,實(shí)現(xiàn)了在iOS上支持WebDriver協(xié)議的服務(wù),可以用來啟動(dòng)/終止APP,點(diǎn)擊/滑動(dòng)頁面。

webdriver協(xié)議是一套基于HTTP協(xié)議的JSON格式規(guī)范,協(xié)議規(guī)定了不同操作對(duì)應(yīng)的格式。之所以需要這層協(xié)議,是因?yàn)閕OS、Android、瀏覽器等都有自己的UI交互方式,通過這層”驅(qū)動(dòng)層“屏蔽各平臺(tái)的差異,就可以通過相同的方式進(jìn)行自動(dòng)化的UI操作,做網(wǎng)絡(luò)爬蟲常用的selenium是瀏覽器上實(shí)現(xiàn)webdriver的驅(qū)動(dòng),而WebDriverAgent則是iOS上實(shí)現(xiàn)webdriver的驅(qū)動(dòng)。

Appium客戶端

在iOS上的客戶端實(shí)際上就是使用了WebDriverAgent,作為實(shí)現(xiàn)webdriver協(xié)議的驅(qū)動(dòng)層。

Appium服務(wù)端

Appium的服務(wù)端是一個(gè)桌面應(yīng)用,用于和客戶端通信,啟動(dòng)Appium的服務(wù)端之后,會(huì)在電腦上啟動(dòng)一個(gè)默認(rèn)端口號(hào)是4723的HTTP服務(wù)。當(dāng)我們編寫完腳本執(zhí)行時(shí),腳本代碼會(huì)被轉(zhuǎn)換為webdriver協(xié)議的JSON數(shù)據(jù),通過HTTP請(qǐng)求發(fā)送到電腦的4723端口。Appium服務(wù)端將腳本的執(zhí)行請(qǐng)求下發(fā)給客戶端(請(qǐng)求客戶端的6100端口),客戶端同樣使用webdriver協(xié)議響應(yīng)

利用Appium-Python-Client進(jìn)行iOS的自動(dòng)化測(cè)試

配置 appium 工具

運(yùn)行 Appium-Desktop

2e5b2230-904d-11ef-a511-92fbcf53809c.png

開啟start server

2e67adb6-904d-11ef-a511-92fbcf53809c.png

點(diǎn)擊start new session并且在Desired Capabilities 中輸入相關(guān)的參數(shù)后點(diǎn)擊Start Session

2e8287f8-904d-11ef-a511-92fbcf53809c.png

運(yùn)行成功后,會(huì)彈出一個(gè)控制界面,在該界面中可以控制手機(jī)上正在運(yùn)行的程序

2e92c046-904d-11ef-a511-92fbcf53809c.png

開始自動(dòng)化測(cè)試

打開下載后的appiumSimpleDemo文件,打開appiumSimpleDemo.xcodepro程序,配置下TARGET的簽名

在appiumSimpleDemo的根目錄執(zhí)行編譯指令,編譯出一個(gè)app文件xcodebuild -sdk iphoneos -target appiumSimpleDemo -configuration Release,編譯成功后app文件的地址會(huì)打印在命令行中 ;此處直接使用 xcode進(jìn)行編譯也可以 ,怎么方便怎么來

2eaa3852-904d-11ef-a511-92fbcf53809c.png

執(zhí)行appiumSimpleDemo.py 文件路徑如下:/Users/jx/PycharmProjects/53ui_ios/venv/bin/python /Users/jx/appiumSimpleDemo/appiumSimpleDemo.py

2ebfb3d0-904d-11ef-a511-92fbcf53809c.png

源碼如下:

importunittest importos fromappiumimportwebdriver fromtimeimportsleep classappiumSimpleTezt(unittest.TestCase): defsetUp(self): app_path='/Users/jx/appiumSimpleDemo/build/Release-iphoneos/appiumSimpleDemo.app' app=os.path.abspath(app_path) self.driver=webdriver.Remote( command_executor='http://127.0.0.1:4723/wd/hub', desired_capabilities={ 'app':app, 'platformName':'iOS', 'platformVersion':'14.4', 'deviceName':'iPhone8plus', 'bundleId':'com.yongapps.app', 'udid':'4c7a46cee7f512ff1463eb3b09dc5329e779355c' } ) deftest_push_view(self): next_view_button=self.driver.find_element_by_accessibility_id("entrynextview") next_view_button.click() sleep(2) back_view_button=self.driver.find_element_by_accessibility_id("Back") back_view_button.click() deftearDown(self): sleep(1) #self.driver.quit() if__name__=='__main__': suite=unittest.TestLoader().loadTestsFromTestCase(appiumSimpleTezt) unittest.TextTestRunner(verbosity=2).run(suite)

踩坑筆記

問題1:如果安裝 carthage出現(xiàn)以下錯(cuò)誤:

Error:Anunexpectederroroccurredduringthebrewlinkstep Theformulabuilt,butisnotsymlinkedinto/usr/local Permissiondenied@dir_s_mkdir-/usr/local/Frameworks Error:Permissiondenied@dir_s_mkdir-/usr/local/Frameworks

原因是carthage已經(jīng)安裝,但是沒有 link 到 brew,還有就是文件夾權(quán)限問題,在終端輸入:

MacBook-pro~%sudomkdir/usr/local/Frameworks MacBook-pro~%sudochown$(whoami):admin/usr/local/Frameworks MacBook-pro~%brrewlinkcarthage

問題2:安裝 libimobiledevice & ideviceinstaller 遇到:“invalid active developer path”

運(yùn)行:

MacBook-pro~%xcode-select--install MacBook-pro~%sudoxcode-select-r

可能出現(xiàn)的問題

dyld:Librarynotloaded:/usr/local/opt/openssl/lib/libssl.1.0.0.dylibReferencedfrom: /usr/local/opt/libimobiledevice/lib/libimobiledevice.6.dylibReason:imagenotfound

如果遇到如上錯(cuò)誤,則先卸載ideviceinstaller 和 libimobiledevice

MacBook-pro~%brewuninstallideviceinstaller MacBook-pro~%brewuninstalllibimobiledevice

然后再重安裝即可

問題3:ios-webkit-debug-proxy 安裝遇到 The following directories are not writable by your user:

詳細(xì)錯(cuò)誤提示:

Thefollowingdirectoriesarenotwritablebyyouruser: /usr/local/share/man/man5 /usr/local/share/man/man7

解決方法:因?yàn)槭窃撃夸洘o權(quán)限無法寫入的問題,所以直接sudo給上權(quán)限就可以了,然后再使用安裝命令就可以了,示例如下圖:

2eea37c2-904d-11ef-a511-92fbcf53809c.png

問題4:xcode-select --install命令行安裝提示 Xcode alone is not sufficient on Sierra.

Error:XcodealoneisnotsufficientonSierra. InstalltheCommandLineTools: xcode-select--install

解決方案:Mac最新場(chǎng)景下安裝Xcode時(shí)已經(jīng)沒有Command Line了,需要單獨(dú)安裝。根據(jù)提示在使用命令xcode-select --install` 安裝時(shí)最后結(jié)果是不能安裝該軟件。需要安裝如上所示

問題5:方式一 安裝WebDriverAgent 執(zhí)行 ./Scripts/bootsrap.sh 出錯(cuò)如下

2f230854-904d-11ef-a511-92fbcf53809c.png

安裝最后我們可以看到部分依賴安裝需要安裝 Carthage 這個(gè)東西,如果沒注意的話就會(huì)造成 RoutingHTTPServer 部分文件缺失,后面 build 就會(huì)報(bào)錯(cuò) 。

2f421208-904d-11ef-a511-92fbcf53809c.png

2f5d339e-904d-11ef-a511-92fbcf53809c.png

通過命令 brew install carthage 安裝后再執(zhí)行 ./Scripts/bootstrap.sh 即可。

根據(jù) WebDriverAgent 官網(wǎng)提供的步驟,將參數(shù)替換為我們真機(jī)的參數(shù)后在真機(jī)上嘗試build 。

2f7134f2-904d-11ef-a511-92fbcf53809c.png

執(zhí)行完命令后可能會(huì)出現(xiàn)如下報(bào)錯(cuò)

2f894ccc-904d-11ef-a511-92fbcf53809c.png

從報(bào)錯(cuò)信息來看,缺少 development team,那么我們回到 Xcode,將 Automatically manage signing 進(jìn)行勾選后選擇一個(gè) Team,注意要進(jìn)入 WebDriverAgentRunner 中進(jìn)行設(shè)置 。設(shè)置好之后又會(huì)出現(xiàn)報(bào)錯(cuò)

這個(gè)報(bào)錯(cuò)信息就和我們之前提到的一樣,bundle indentifler 不唯一,保險(xiǎn)起見,這里將項(xiàng)目中所有的 Targets 都進(jìn)行了修改

修改好之后我們?cè)俅?build,之前的問題解決了,不幸的是 build 又 fail 了,又出現(xiàn)了新的報(bào)錯(cuò):

2fb57e14-904d-11ef-a511-92fbcf53809c.png

解決辦法:

沒錯(cuò),我們?cè)趫?bào)錯(cuò)出雙擊,進(jìn)入到報(bào)錯(cuò)代碼處,將 assign 改為 strong 后再次 build :

2fc7fc06-904d-11ef-a511-92fbcf53809c.png

Build succeeded !!!老淚縱橫…

最終,再執(zhí)行

最后踩坑:build成功后,ios真機(jī)上沒有安裝WDA這個(gè)問題困擾了我一個(gè)星期,然后最后我把ios設(shè)備名改成英文后安裝成功了。。。

終于在 iOS 真機(jī)上看到了 WDA 的身影

2fe65b56-904d-11ef-a511-92fbcf53809c.png

問題6:執(zhí)行 ./Scripts/bootstrap.sh ERROR in ./js/app.js 報(bào)錯(cuò) 出錯(cuò)如下

3002cd54-904d-11ef-a511-92fbcf53809c.png

301f227e-904d-11ef-a511-92fbcf53809c.png

303d23fa-904d-11ef-a511-92fbcf53809c.png

問題7: 執(zhí)行時(shí)候報(bào) xcodebuild failed with code 65 錯(cuò)誤

30554368-904d-11ef-a511-92fbcf53809c.png

307d621c-904d-11ef-a511-92fbcf53809c.png

問題8: 個(gè)人證書調(diào)試失敗

Failed to register bundle identifier.The app identifier "com.facebook.WebDriverAgentRunner" cannot be registered to your development team because it is not available. Change your bundle identifier to a unique string to try again.

需要手動(dòng)更改目標(biāo)的bundle id,方法是進(jìn)入“Build Settings”選項(xiàng),更改“Product bundle Identifier”的值使Xcode將接受,默認(rèn)為com.facebook.WebDriverAgentRunner,你需要改成不一樣的,如:io.automation.WebDriverAgentRunner (此處必須修改為和你在蘋果開發(fā)者后臺(tái)申請(qǐng)的bundle Id 一樣 )

309eded8-904d-11ef-a511-92fbcf53809c.png

返回 “Signing&Capabilities” 選項(xiàng),看到對(duì)于文件WebDriverAgentRunner的配置文件已經(jīng)創(chuàng)建成功了

30d483bc-904d-11ef-a511-92fbcf53809c.png

310a51ae-904d-11ef-a511-92fbcf53809c.png

問題9: 解決警告問題

解決方案如下:

312f8a00-904d-11ef-a511-92fbcf53809c.png

問題10: 將WDA安裝到被測(cè)手機(jī)上,安裝失敗 ,提示如下

報(bào)錯(cuò): error:Noprofilesfor'io.uitest.WebDriverAgentRunner.xctrunner'werefound:Xcodecouldn'tfindanyiOSAppDevelopmentprovisioningprofilesmatching'io.uitest.WebDriverAgentRunner.xctrunner'.Automaticsigningisdisabledandunabletogenerateaprofile.Toenableautomaticsigning,pass-allowProvisioningUpdatestoxcodebuild.(intarget'WebDriverAgentRunner'fromproject'WebDriverAgent')

報(bào)這個(gè)錯(cuò)是因?yàn)闆]有接入相關(guān)的設(shè)備到MAC上,只要設(shè)備接入,并通過XCode菜單:Product->Destnation->"Select Devices"選中要連接的設(shè)備就行。

解決方案:

XCode:Product->Destination->"Select your iphone"

314ce262-904d-11ef-a511-92fbcf53809c.png

Product->Scheme->"Select WebDriverAgentRunner"

31711290-904d-11ef-a511-92fbcf53809c.png

Product -> Test

31983b36-904d-11ef-a511-92fbcf53809c.png

注意:運(yùn)行Test之前,手機(jī)先解鎖再通過USB線連接到電腦。

問題10: 解決Product -> Test報(bào)錯(cuò)問題,如下所示

31bfe140-904d-11ef-a511-92fbcf53809c.png

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeprojUser-suppliedCFBundleIdentifiervalue'com.facebook.wda.lib'intheInfo.plistmustbethesameasthePRODUCT_BUNDLE_IDENTIFIERbuildsettingvalue'com.facebook.WebDriverAgentLib'.

解決方案:

31deaee0-904d-11ef-a511-92fbcf53809c.png

運(yùn)行報(bào)錯(cuò):

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgentLib/Vendor/RoutingHTTPServer/RoutingHTTPServer.h9:'CocoaAsyncSocket/GCDAsyncSocket.h'filenotfound

解決:進(jìn)入appium-webdriveragent目錄,重新執(zhí)行:

MacBook-pro%cd/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent MacBook-proappium-webdriveragent%sh./Scripts/bootstrap.sh

31f288ac-904d-11ef-a511-92fbcf53809c.png

再次執(zhí)行Product -> Test,彈出密鑰授權(quán)彈窗,輸入密鑰(多次輸入密鑰,直到彈窗消失)

最后報(bào)錯(cuò):Command CodeSign failed with a nonzero exit code解決方案---通過終端命令:

MacBook-proappium-webdriveragent%xcodebuild-projectWebDriverAgent.xcodeproj-schemeWebDriverAgentRunner-destination'id=000-000080E'test

執(zhí)行中會(huì)彈出密鑰彈窗,多次輸入密鑰,直到彈窗消失

最后機(jī)上可以看到一個(gè)沒有圖標(biāo)的 WebDriverAgentRunner.app 應(yīng)用,進(jìn)入設(shè)置 -》通用 -》設(shè)備管理 -》點(diǎn)擊 開發(fā)者app下面的證書 -》點(diǎn)擊“第一個(gè)藍(lán)色字體信任按鈕” -》點(diǎn)擊信任,再重新執(zhí)行項(xiàng)目即可正常連接xcode點(diǎn)擊直接運(yùn)行:

32166664-904d-11ef-a511-92fbcf53809c.png

再次報(bào)錯(cuò):

/usr/local/lib/node_modules/appium/node_modules/appium-webdriveragent/WebDriverAgent.xcodeprojUser-suppliedCFBundleIdentifiervalue'com.facebook.wda.runner'intheInfo.plistmustbethesameasthePRODUCT_BUNDLE_IDENTIFIERbuildsettingvalue'io.uitest.WebDriverAgentRunner'.

解決方案:

32393d42-904d-11ef-a511-92fbcf53809c.png

最終看到這樣輸出就是成功了:

TestSuite‘Alltests’startedat2017-01-231512.585 TestSuite‘WebDriverAgentRunner.xctest’startedat2017-01-231512.586 TestSuite‘UITestingUITests’startedat2017-01-231512.587 TestCase‘-[UITestingUITeststestRunner]’started. t=0.00sStartTestat2017-01-231512.588 t=0.00sSetUp

備注:

xxx.app為 Xcode 編譯后的應(yīng)用安裝包路徑

xxx.ipa為應(yīng)用在本地的路徑

問題11: wda安裝成功了,但是 驗(yàn)證時(shí)訪問無結(jié)果

解決方案:

有些國產(chǎn)的iPhone機(jī)器通過手機(jī)的IP和端口還不能訪問,此時(shí)需要將手機(jī)的端口轉(zhuǎn)發(fā)到Mac上。

使用--HEAD安裝最新版本

$brewinstalllibimobiledevice--HEAD$iproxy81008100

這時(shí)通過訪問http://localhost:8100/status確認(rèn)WDA是否運(yùn)行成功。

此時(shí)你應(yīng)該可以看到有返回信息,只不過返回的sessionID 為空 ,此處如果有問題見問題12

問題12: Appium 重簽名后的 wda 正常啟動(dòng)了,但是沒有返回 sessionID

wda 的日志如下:

TestSuite'WebDriverAgentRunner.xctest'startedat2020-06-121528.188 TestSuite'UITestingUITests'startedat2020-06-121528.188 2020-06-121528.215329+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( KeyboardAutocorrection )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess 2020-06-121528.221426+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( KeyboardPrediction )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess 2020-06-121528.222215+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( KeyboardShowPredictionBar )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess 2020-06-121528.224043+0800WebDriverAgentRunner-Runner[616:123635][UserDefaults]Couldn'twritevaluesforkeys( DidShowGestureKeyboardIntroduction )inCFPrefsPlistSource<0x282b9ed00>(Domain:com.apple.Preferences,User:kCFPreferencesCurrentUser,ByHost:No,Container:(null),ContentsNeedRefresh:No):settingpreferencesoutsideanapplication'scontainerrequiresuser-preference-writeorfile-write-datasandboxaccess TestCase'-[UITestingUITeststestRunner]'started. t=0.00sStartTestat2020-06-121528.224 t=0.00sSetUp 2020-06-121528.230656+0800WebDriverAgentRunner-Runner[616:123635]BuiltatJun1220201529 2020-06-121528.238785+0800WebDriverAgentRunner-Runner[616:123635]ServerURLHere->http://172.18.62.8:8100<-ServerURLHere 2020-06-12?1528.239467+0800?WebDriverAgentRunner-Runner[616:123836]?Using?singleton?test?manager

使用 postman 發(fā)送請(qǐng)求,返回的 sessionID 為 null,但是 xcode 的控制臺(tái)沒有報(bào)任何錯(cuò)誤

325a061c-904d-11ef-a511-92fbcf53809c.png

啟動(dòng)應(yīng)用程序直接返回 400

3273ce9e-904d-11ef-a511-92fbcf53809c.png

此問題坑爹至極 ,網(wǎng)上搜索了眾多內(nèi)容都沒有此問題的答案 ;但是有人在testhome上已經(jīng)提出了這個(gè)問題但是至今沒有人回復(fù)答案 ;

解決方案:

安裝usbmuxd

brewinstallusbmuxd

iproxy該工具會(huì)將設(shè)備上的端口號(hào)映射到電腦上的某一個(gè)端口

32954c68-904d-11ef-a511-92fbcf53809c.png

最后使用iproxy 進(jìn)行端口轉(zhuǎn)發(fā)的時(shí)候, 一定跟上指定的設(shè)備id

即: iproxy local_port device_port -u udid

問題13:解決 XCUITest iproxy exited with code 208

命令行執(zhí)行

ps-ax|grep-**i**"iproxy"|grep-vgrep|awk'{print"kill-9"$1}'|sh

問題14:每次測(cè)試應(yīng)用都需要啟動(dòng) WebDriverAgent , 修改使用腳本方式自動(dòng)運(yùn)行

#解鎖keychain,以便可以正常的簽名應(yīng)用, PASSWORD="YourPassword" securityunlock-keychain-p$PASSWORD~/Library/Keychains/login.keychain #獲取設(shè)備的UDID,用到了之前的libimobiledevice UDID=$(idevice_id-l|head-n1) #真機(jī)運(yùn)行測(cè)試 xcodebuild-projectWebDriverAgent.xcodeproj-schemeWebDriverAgentRunner-destination"id=$UDID"test #模擬器運(yùn)行測(cè)試 #xcodebuild-projectWebDriverAgent.xcodeproj-schemeWebDriverAgentRunner-destination"platform=iOSSimulator,name=iPhoneX"test

腳本運(yùn)行完成后,同樣手機(jī)/模擬器上會(huì)出現(xiàn)一個(gè)無圖標(biāo)的 WebDriverAgent 應(yīng)用,啟動(dòng)之后,馬上又返回到桌面。此時(shí)終端會(huì)輸出 IP 地址和端口。

附錄

1. 關(guān)于Certificate、Provisioning Profile、App ID的介紹及其之間的關(guān)系

考慮到想要將待測(cè)試應(yīng)用安裝到真機(jī) ,首先繞不過去的必須得申請(qǐng)證書,申請(qǐng)證書之前又必須得要開發(fā)者賬號(hào),以上都具備了開始按步驟申請(qǐng)Certificate、Provisioning Profile、App ID ;可是即使你申請(qǐng)成功,難免對(duì)以上三者之間關(guān)系感到懵逼,以下對(duì)三者之間關(guān)系進(jìn)行簡(jiǎn)介說明,幫助理清之間的脈絡(luò)關(guān)系

開發(fā)者賬號(hào)類型

32b1e080-904d-11ef-a511-92fbcf53809c.png

概念介紹

如果你擁有一個(gè)開發(fā)者賬戶的話,在iOS Dev Center打開Certificates, Indentifiers & Profiles,你就可以看到如下的列表:

32d705e0-904d-11ef-a511-92fbcf53809c.png

Profile Portal改版有一段時(shí)間了,改版之后的結(jié)構(gòu)比以前更清晰明了,易于理解和管理。

上面的列表就包含了開發(fā)、調(diào)試和發(fā)布iOS應(yīng)用程序所需的所有內(nèi)容:Certificates、Identifiers、Devices、Provisioning Profiles。下面將一一解釋這幾個(gè)東東。

Certificate

證書是用來給應(yīng)用程序簽名的,只有經(jīng)過簽名的應(yīng)用程序才能保證他的來源是可信任的,并且代碼是完整的, 未經(jīng)修改的。在Xcode Build Setting的Code Signing Identity中,你可以設(shè)置用于為代碼簽名的證書。

眾所周知,我們申請(qǐng)一個(gè)Certificate之前,需要先申請(qǐng)一個(gè)Certificate Signing Request (CSR) 文件,而這個(gè)過程中實(shí)際上是生成了一對(duì)公鑰和私鑰,保存在你Mac的Keychain中。代碼簽名正是使用這種基于非對(duì)稱秘鑰的加密方式,用私鑰進(jìn)行簽名,用公鑰進(jìn)行驗(yàn)證。如下圖所示,在你Mac的keychain的login中存儲(chǔ)著相關(guān)的公鑰和私鑰,而證書中包含了公鑰。你只能用私鑰來進(jìn)行簽名,所以如果沒有了私鑰,就意味著你不能進(jìn)行簽名了,所以就無法使用這個(gè)證書了,此時(shí)你只能revoke之前的證書再申請(qǐng)一個(gè)。因此在申請(qǐng)完證書時(shí),最好導(dǎo)出并保存好你的私鑰。當(dāng)你想與其他人或其他設(shè)備共享證書時(shí),把私鑰傳給它就可以了。私鑰保存在你的Mac中,而蘋果生成的Certificate中包含了公鑰。當(dāng)你用自己的私鑰對(duì)代碼簽名后,蘋果就可以用證書中的公鑰來進(jìn)行驗(yàn)證,確保是你對(duì)代碼進(jìn)行了簽名,而不是別人冒充你,同時(shí)也確保代碼的完整性等。

3302ccca-904d-11ef-a511-92fbcf53809c.png

證書主要分為兩類:Development和Production,Development證書用來開發(fā)和調(diào)試應(yīng)用程序,Production主要用來分發(fā)應(yīng)用程序(根據(jù)證書種類有不同作用),下面是證書的分類信息:(括號(hào)內(nèi)為證書有效期)

(注:不同類型的開發(fā)者賬戶所能創(chuàng)建的證書種類不同,關(guān)于開發(fā)者賬戶的對(duì)比和InHouse證書相關(guān)的內(nèi)容,請(qǐng)見我的另一篇文章)

有一些類型的證書我沒有使用過,所以也不了解具體的作用。

App ID

App ID用于標(biāo)識(shí)一個(gè)或者一組App,App ID應(yīng)該是和Xcode中的Bundle ID是一致的或者匹配的。App ID主要有以下兩種:

每創(chuàng)建一個(gè)App ID,我們都可以設(shè)置該App ID所使用的APP Services,也就是其所使用的額外服務(wù)。每種額外服務(wù)都有著不同的要求,例如,如果要使用Apple Push Notification Services,則必須是一個(gè)explicit App ID,以便能唯一標(biāo)識(shí)一個(gè)應(yīng)用程序。下面是目前所有可選的服務(wù)和相應(yīng)的配置要求。

33185dc4-904d-11ef-a511-92fbcf53809c.png

如果你的App使用上述的任何一種service,就要按照要求去配置。

Device

Device最簡(jiǎn)單了,就是iOS設(shè)備。Devices中包含了該賬戶中所有可用于開發(fā)和測(cè)試的設(shè)備。每臺(tái)設(shè)備使用UDID來唯一標(biāo)識(shí)。

每個(gè)賬戶中的設(shè)備數(shù)量限制是100個(gè)。Disable 一臺(tái)設(shè)備也不會(huì)增加名額,只能在membership year 開始的時(shí)候才能通過刪除設(shè)備來增加名額。

Provisioning Profile

一個(gè)Provisioning Profile文件包含了上述的所有內(nèi)容:證書、App ID、設(shè)備。

試想一下,如果我們要打包或者在真機(jī)上運(yùn)行一個(gè)應(yīng)用程序,我們首先需要證書來進(jìn)行簽名,用來標(biāo)識(shí)這個(gè)應(yīng)用程序是合法的、安全的、完整的等等;然后需要指明它的App ID,并且驗(yàn)證Bundle ID是否與其一致;再次,如果是真機(jī)調(diào)試,需要確認(rèn)這臺(tái)設(shè)備能否用來運(yùn)行程序。而Provisioning Profile就把這些信息全部打包在一起,方便我們?cè)谡{(diào)試和發(fā)布程序打包時(shí)使用,這樣我們只要在不同的情況下選擇不同的profile文件就可以了。而且這個(gè)Provisioning Profile文件會(huì)在打包時(shí)嵌入.ipa的包里。

例如,如下圖所示,一個(gè)用于Development的Provisioning Profile中包含了該P(yáng)rovisioning Profile對(duì)應(yīng)的App ID,可使用的證書和設(shè)備。這意味著使用這個(gè)Provisioning Profile打包程序必須擁有相應(yīng)的證書,并且是將App ID對(duì)應(yīng)的程序運(yùn)行到Devices中包含的設(shè)備上去。

Explicit App ID:唯一的App ID,這種App ID用于唯一標(biāo)識(shí)一個(gè)應(yīng)用程序,例如com.ABC.demo1,標(biāo)識(shí)Bundle ID為com.ABC.demo1的程序。

Wildcard App ID:通配符App ID,用于標(biāo)識(shí)一組應(yīng)用程序。例如*可以表示所有應(yīng)用程序,而com.ABC.*可以表示以com.ABC開頭的所有應(yīng)用程序。

In-House and Ad Hoc (3年):用來發(fā)布In-House和AdHoc的應(yīng)用程序。

MDM CSR

Push Production (1年):用來在發(fā)布版本中使用Apple Push Notification。

Pass Type ID Certificate

Website Push ID Certificate

App Development (1年):用來開發(fā)和真機(jī)調(diào)試應(yīng)用程序。

Push Development (1年):用來調(diào)試Apple Push Notification

Development

Production

App Store :用來發(fā)布提交App Store的應(yīng)用程序。

33383702-904d-11ef-a511-92fbcf53809c.png

如上所述,在一臺(tái)設(shè)備上運(yùn)行應(yīng)用程序的過程如下:

334f1468-904d-11ef-a511-92fbcf53809c.png

與證書一樣,Provisioning Profile也分為Development和Distribution兩種:

(注:前面提到不同賬戶類型所能創(chuàng)建的證書種類不同,顯然Profile文件的種類是和你所能創(chuàng)建的證書種類相關(guān)的)

Development (1年)

Distribution (1年)

In House

Ad Hoc

App Store

In House 與Ad Hoc的不同之處在于:In House沒有設(shè)備數(shù)量限制,而Ad Hoc是用來測(cè)試用的,Ad Hoc的包只能運(yùn)行在該賬戶內(nèi)已登記的可用設(shè)備上,顯然是有最多100個(gè)設(shè)備的數(shù)量限制。所以這兩種Provisioning Profile文件的區(qū)別就在于其中的設(shè)備限制不一樣而已,而他們所使用的Certificate是相同的。

開發(fā)/發(fā)布流程

了解了上面的概念,再來看開發(fā)及發(fā)布流程就非常簡(jiǎn)單了,而且相信你不用看教程也能一步步完成所有的操作了。

開發(fā)/真機(jī)調(diào)試流程

根據(jù)上面的介紹,可以知道進(jìn)行Development主要有以下幾個(gè)步驟:

申請(qǐng)證書

加入設(shè)備

生成Provisioning Profile

設(shè)置Xcode Code Sign Identifer

事實(shí)上第三步通常是不需要的,因?yàn)槲覀兺ǔ6际怯肵code生成和管理的iOS Team Provisioning Profile來進(jìn)行開發(fā),因?yàn)樗浅7奖悖圆恍枰约菏謩?dòng)生成Provisioning Profile。

iOS Team Provisioning Profile是第一次使用Xcode添加設(shè)備時(shí),Xcode自動(dòng)生成的,它包含了Xcode生成的一個(gè)Wildcard App ID(*,匹配所有應(yīng)用程序),賬戶里面所有的Devices和所有Development Certificates,如下圖所示。因此,team中的所有成員都可以使用這個(gè)iOS Team Provisioning Profile在team中的所有設(shè)備上調(diào)試所有的應(yīng)用程序。并且當(dāng)有新設(shè)備添加進(jìn)來時(shí),Xcode會(huì)更新這個(gè)文件。

336c710c-904d-11ef-a511-92fbcf53809c.png

發(fā)布流程

網(wǎng)上有很多關(guān)于發(fā)布App Store的流程,我就不綴述了,不過根據(jù)上面的概念介紹,不管是App Store、In-House還是Ad-Hoc,打包流程都是差不多的,都包括了以下幾個(gè)關(guān)鍵步驟:

創(chuàng)建發(fā)布證書

創(chuàng)建App ID

創(chuàng)建對(duì)應(yīng)的Provisioning Profile文件

設(shè)備Bundle ID和App ID一致

設(shè)置Xcode Code Sign Identifer,選擇合適的Profile和證書進(jìn)行簽名,打包

2. WebDriverAgent 整體框架設(shè)計(jì)

3382f2f6-904d-11ef-a511-92fbcf53809c.png

GitHub的描述:

WebDriverAgentisaWebDriverserverimplementationforiOSthatcanbeusedtoremotecontroliOSdevices.Itallowsyoutolaunch&killapplications,tap&scrollviewsorconfirmviewpresenceonascreen.Thismakesitaperfecttoolforapplicationend-to-endtestingorgeneralpurposedeviceautomation.ItworksbylinkingXCTest.frameworkandcallingApple'sAPItoexecutecommandsdirectlyonadevice.WebDriverAgentisdevelopedandusedatFacebookforend-to-endtestingandissuccessfullyadoptedbyAppium.

WebDriverAgent在iOS端實(shí)現(xiàn)了一個(gè)WebDriverServer,可用于遠(yuǎn)程控制iOS設(shè)備。它允許您啟動(dòng)和終止應(yīng)用程序,點(diǎn)擊和滾動(dòng)視圖或確認(rèn)屏幕上的視圖狀態(tài)。這使其成為應(yīng)用端到端測(cè)試或通用設(shè)備自動(dòng)化的完美工具。它通過鏈接XCTest.framework和調(diào)用Apple的API來直接在設(shè)備上執(zhí)行命令。WebDriverAgent在Facebook上開發(fā)并用于端到端測(cè)試,并被Appium成功采用。特性:

適用于設(shè)備和模擬器

實(shí)現(xiàn)大部分WebDriver規(guī)范

實(shí)現(xiàn)Mobile JSON Wire Protocol Spec的一部分

USB支持設(shè)備

具有友好用戶界面的Inspector 端點(diǎn),用于檢查當(dāng)前設(shè)備狀態(tài)

易于開發(fā),因?yàn)樗梢酝ㄟ^Xcode直接啟動(dòng)和調(diào)試

尚不支持,但與tvOS和OSX一起使用

WDA Client

WDA Client是基于WebDriverAgent實(shí)現(xiàn)的WDA的客戶端。

我們?cè)?iOS 設(shè)備上啟動(dòng)了 WDA 的服務(wù)端。為了運(yùn)行 Mac OS 上的腳本,我們需要在 Mac OS 上安裝 WDA 客戶端。

facebook-wda 就是 WDA 的 Python 客戶端庫,通過直接構(gòu)造HTTP請(qǐng)求直接跟WebDriverAgent通信。

#安裝WDApython客戶端 pip3install--prefacebook-wda

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 自動(dòng)化測(cè)試

    關(guān)注

    0

    文章

    214

    瀏覽量

    26929
  • iOS
    iOS
    +關(guān)注

    關(guān)注

    8

    文章

    3397

    瀏覽量

    150865

原文標(biāo)題:Appium +iOS 自動(dòng)化測(cè)試全網(wǎng)最全教程(實(shí)踐、總結(jié) 、踩坑)

文章出處:【微信號(hào):TestinChina,微信公眾號(hào):Testin云測(cè)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OPhone自動(dòng)化測(cè)試技術(shù)概述

    本文將對(duì)OPhone平臺(tái)上可采用的幾種自動(dòng)化測(cè)試技術(shù)進(jìn)行介紹,并對(duì)每種技術(shù)的優(yōu)缺點(diǎn)做簡(jiǎn)要的總結(jié)。OPhone臺(tái)除了為應(yīng)用程序開發(fā)提供豐富的API外,也為開展自動(dòng)化
    發(fā)表于 05-06 08:58

    Linux學(xué)習(xí)過程過的與如何解決

    Linux記錄記錄Linux學(xué)習(xí)過程過的與如何解決1解決方法:F10進(jìn)入BIOS使能
    發(fā)表于 11-04 08:44

    軟件自動(dòng)化測(cè)試方案的效益分析

    首先對(duì)手工測(cè)試自動(dòng)化測(cè)試進(jìn)行比較,然后提出自動(dòng)化測(cè)試方案選擇需要考慮的方面,并結(jié)合工作實(shí)踐,給
    發(fā)表于 03-01 15:05 ?14次下載

    基于Web的自動(dòng)化測(cè)試框架的研究

    根據(jù)web系統(tǒng)測(cè)試的特點(diǎn),為提高軟件測(cè)試自動(dòng)化腳本的可重用性,結(jié)合在實(shí)際項(xiàng)目中軟件自動(dòng)化測(cè)試實(shí)踐
    發(fā)表于 11-07 15:58 ?0次下載
    基于Web的<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>框架的研究

    自動(dòng)化測(cè)試系統(tǒng)的最佳實(shí)踐指南秘籍

    自動(dòng)化測(cè)試系統(tǒng)的最佳實(shí)踐指南秘籍 ,學(xué)習(xí)資料。
    發(fā)表于 03-21 16:02 ?0次下載

    SaaS產(chǎn)品自動(dòng)化測(cè)試實(shí)例分析

    【摘要】本文講述某個(gè)企業(yè)級(jí)SaaS產(chǎn)品自動(dòng)化測(cè)試項(xiàng)目的實(shí)踐過程。文章介紹了項(xiàng)目遇到的挑戰(zhàn)、應(yīng)對(duì)策略和實(shí)施過程,最后總結(jié)了企業(yè)級(jí)SaaS產(chǎn)品給自動(dòng)化
    發(fā)表于 09-28 15:54 ?1次下載
    SaaS產(chǎn)品<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>實(shí)例分析

    Android 手機(jī)自動(dòng)化測(cè)試工具有哪幾種

    Android 手機(jī)自動(dòng)化測(cè)試工具有哪幾種:Monkey是Android SDK自帶的測(cè)試工具.MonkeyRunner也是Android SDK提供的測(cè)試工具。Instrumenta
    的頭像 發(fā)表于 02-06 15:35 ?1.1w次閱讀

    ATE自動(dòng)化測(cè)試系統(tǒng)是什么_ATE自動(dòng)化測(cè)試系統(tǒng)介紹

    本文首先介紹了ATE自動(dòng)化測(cè)試系統(tǒng)發(fā)展線路,其次闡述了ATE自動(dòng)化測(cè)試系統(tǒng)的作用及原理、特點(diǎn)、優(yōu)勢(shì),最后介紹了ATE自動(dòng)化
    發(fā)表于 05-23 16:47 ?3.2w次閱讀

    嵌入式Linux記錄

    Linux記錄記錄Linux學(xué)習(xí)過程過的與如何解決1解決方法:F10進(jìn)入BIOS使能
    發(fā)表于 11-01 17:21 ?10次下載
    嵌入式Linux<b class='flag-5'>踩</b><b class='flag-5'>坑</b>記錄

    STM32CubeIDE+FREERTOS記錄

    STM32CubeIDE+FREERTOS記錄
    發(fā)表于 12-05 18:06 ?15次下載
    STM32CubeIDE+FREERTOS<b class='flag-5'>踩</b><b class='flag-5'>坑</b>記錄

    什么是自動(dòng)化測(cè)試框架

    自動(dòng)化測(cè)試框架,即是應(yīng)用于自動(dòng)化測(cè)試所用的框架。按照框架的定義,自動(dòng)化測(cè)試框架要么是提供可重用的
    發(fā)表于 04-18 14:44 ?949次閱讀

    python自動(dòng)化測(cè)試攻城記

    本文介紹實(shí)施自動(dòng)化測(cè)試需要具備的技能及具體實(shí)踐流程。
    的頭像 發(fā)表于 08-16 11:39 ?1124次閱讀
    python<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>攻城記

    推挽電路的,你過沒?

    推挽電路的,你過沒?
    的頭像 發(fā)表于 11-24 16:25 ?1152次閱讀
    推挽電路的<b class='flag-5'>坑</b>,你<b class='flag-5'>踩</b>過沒?

    電源測(cè)試怎么自動(dòng)化?電源模塊自動(dòng)化測(cè)試系統(tǒng)如何實(shí)現(xiàn)?

    納米軟件在電測(cè)行業(yè)深耕十余年,在行業(yè)的大背景下,為了進(jìn)一步完善自動(dòng)化測(cè)試,開發(fā)出了新的智能的電源模塊自動(dòng)化測(cè)試系統(tǒng)ATECLOUD-POW
    的頭像 發(fā)表于 12-15 14:40 ?940次閱讀
    電源<b class='flag-5'>測(cè)試</b>怎么<b class='flag-5'>自動(dòng)化</b>?電源模塊<b class='flag-5'>自動(dòng)化</b><b class='flag-5'>測(cè)試</b>系統(tǒng)如何實(shí)現(xiàn)?

    自動(dòng)化仿真系統(tǒng)搭建實(shí)踐

    今天我們分享TIAV17+PLCSIM+PS+SIMIT:自動(dòng)化仿真系統(tǒng)搭建實(shí)踐
    的頭像 發(fā)表于 01-04 11:28 ?2374次閱讀
    <b class='flag-5'>自動(dòng)化</b>仿真系統(tǒng)搭建<b class='flag-5'>實(shí)踐</b>
    主站蜘蛛池模板: 乳色吐息未增删樱花ED在线观看| 婷婷久久无码欧美人妻| 动漫在线观看免费肉肉| 国产欧美国产综合第一区| 啦啦啦 中国 日本 高清 在线| 色噜噜噜噜亚洲第一| 少妇高潮A片特黄久久精品网| 岛国片在线看| 黑色丝袜美腿美女被躁翻了| 欧美日韩亚洲第一区在线| 亚洲一卡久久4卡5卡6卡7卡 | 99re在线播放| 黄色大片aa| 久久视频这里只精品99热在线| 色多多污污下载| 97人视频国产在线观看| 成人精品视频在线观看| 久久亚洲电影www电影网| 女教师跟黑人男朋友激情过后| 任你躁精品一区二区三区 | 母狗黄淑珍| 色噜噜2017最新综合| 99er热精品视频国产免费| 久久99久久成人免费播放| 亚洲高清国产拍精品影院| 国产国产乱老熟视频网站| 日本片bbbxxx| 超级最爽的乱淫片免费| 国自产拍 高清精品| 老师在讲桌下边h边讲课| 亚洲成年男人的天堂网| 18禁三级黄| qvod小电影| 免费99精品国产自在现线| 亚洲欧美成人综合| 国产三级级在线电影| 内射人妻骚骚骚| 吸奶舔下面| 国产日韩久久久精品影院首页| 免费99精品国产自在现线| 中文字幕日本一区|