python实现图像识别水果_使用Python实现基于图像识别的iOS自动化测试
相對于Android來講,iOS比較封閉。這一點,在設(shè)計和評估自動化測試方案的時候感受尤為強烈。iOS平臺上沒有特別好用的自動化測試工具。蘋果針對iOS提供了UI Automation的Instruments工具,以及相配合使用的Javascript庫,可是使用起來有很大的局限性。主要問題是必須使用Javascript來編寫測試腳本,不支持其余語言,很難實現(xiàn)復(fù)雜的功能。并且,在一臺mac機上同時只能運行一個Instruments實例,沒法對多個設(shè)備同時進行測試。在多數(shù)游戲應(yīng)用中,UI都不是使用標(biāo)準(zhǔn)控件的,因此不可避免的要使用圖像識別技術(shù)。而iOS UI Automation API里面除了截屏的功能并無提供多少幫助。html
所幸的是咱們找到了UIAHost.performTaskWithPathArgumentsTimeout()方法。這個方法是用來調(diào)用外部程序的。巧妙地利用這個方法能夠?qū)崿F(xiàn)比較復(fù)雜的功能。可是我仍然但愿測試邏輯能用Python來寫,由于Python用起來至關(guān)順手并且有成熟的測試框架。python
要讓UI Automation的Javascript腳本遵從Python腳本的指揮,能夠把Javascript腳本寫成一個服務(wù)器,接受來自Python腳本的指令,并調(diào)用相應(yīng)的API完成任務(wù)。通訊的任務(wù)可使用socket。固然Javascript腳本自己沒法完成這個任務(wù),因此須要調(diào)用外部程序來實現(xiàn)。這個外部程序能夠用Python來寫,我稱之為slave.py,而Javascript腳本就是master.js,由于是master建立的slave進程。固然實際上slave并不聽命于master,master反而要遵從slave從socket得到的指令。ios
這樣一來,只須要寫個驅(qū)動層,把API調(diào)用包裝一下,經(jīng)過socket傳輸?shù)絪lave.py,再經(jīng)過slave.py的stdout返回到master.js,再經(jīng)過調(diào)用UI Automation API就實現(xiàn)了Python腳本的自動化測試。固然本文沒有涉及不少細(xì)節(jié)實現(xiàn)問題,留給之后有時間再闡述。服務(wù)器
如下是簡化的master.js示例代碼:app
UIALogger.logMessage("Instruments started.")var target =UIATarget.localTarget();var app =target.frontMostApp();var window =app.mainWindow();var host =target.host();var screenshotPath = "screen";var python_path = host.performTaskWithPathArgumentsTimeout("/usr/bin/which", ['python'], 1).stdout.replace("\n", "");if (python_path == "") {
UIALogger.logError("python is not found.");
}else{while(1) {var result =host.performTaskWithPathArgumentsTimeout(
python_path,['InstrumentsSlave.py'], 30);var ins = ("" + result.stdout).split('\n');if (ins[0] == 'exitApp')break;switch (ins[0]) {case 'tap':var x = ins[1];var y = ins[2];
target.tap({x:x, y:y})break;case 'input':var s = ins[1];
app.keyboard().typeString(s)break;case 'captureScreen':
target.captureScreenWithName(screenshotPath);break;default:break;
}
}
}
總結(jié)
以上是生活随笔為你收集整理的python实现图像识别水果_使用Python实现基于图像识别的iOS自动化测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android处理图片透明度并绘画图片
- 下一篇: 使用OpenCV和Python进行人脸识