Appium 做 flutter 自動化測試實踐&採坑
最近公司正在做 flutter sdk 的研發工作,指令碼開發工作也隨之而來,網上也找了很多資料對於 flutter 的自動化,貌似使用最多的還是本身 flutter_driver 驅動來做自動化測試,解決起來也踩了不少坑,這裡記錄一下
flutter_driver 驅動自動化測試
我們們先來看看這篇官方文件
https://flutter.dev/docs/cookbook/testing/integration/introduction
如果要用 flutter_driver 做自動化三個重要點:
- 程式碼依賴裡面需要 dev_dependencies 新增依賴 flutter_driver
- 要在 app 程式碼主程式 main() 裡的 runApp 之前加入 enableFlutterDriverExtension() 開啟除錯功能。 例如:
//void main() => runApp(MyApp());
main() {
enableFlutterDriverExtension();
runApp(new MyApp());
}
- app 啟動方式需要是 profile 或者 debug 包
#打包 debug > flutter build apk --debug > flutter build ios --debug #執行 profile 或 debug > flutter run --debug > flutter run --profile
準備工作做完了,執行下看看 flutter_driver 做了啥
flutter run --profile
使用 profile 除錯模式啟動顯示如下:
Flutter run key commands.
h Repeat this help message.
c Clear the screen
q Quit (terminate the application on the device).
An Observatory debugger and profiler on iPhone11 is available at:
http://localhost:51295
開啟 web 頁面:
監聽了 51295 埠,看下這個埠程式是啥:
> lsof -i:51295
dart 3186 rong 17u IPv4 0x1a4dc03ef78fcf23 0t0 TCP localhost:51298->localhost:51295 (ESTABLISHED)
dart 3186 rong 21u IPv4 0x1a4dc03ef76f6523 0t0 TCP localhost:51300->localhost:51295 (ESTABLISHED)
iproxy 5936 rong 3u IPv4 0x1a4dc03f0f581523 0t0 TCP localhost:51295 (LISTEN)
iproxy 5936 rong 4u IPv6 0x1a4dc03eef247263 0t0 TCP localhost:51295 (LISTEN)
iproxy 5936 rong 5u IPv4 0x1a4dc03ef7993f23 0t0 TCP localhost:51295->localhost:51298 (ESTABLISHED)
iproxy 5936 rong 8u IPv4 0x1a4dc03ef05318a3 0t0 TCP localhost:51295->localhost:51300 (ESTABLISHED)
看來是 iproxy 轉發了 dart 程式埠:
> ps -ax|grep iproxy
5936 ttys010 0:00.04 /Users/rong/tools/flutter/bin/cache/artifacts/usbmuxd/iproxy 51295:58019 --udid *******62c60b38c5e5*************
iproxy 轉發了 ios 裝置的 58019 埠,
搜一搜 ios 控制檯日誌
flutter: Observatory listening on http://127.0.0.1:58019/
基本邏輯貌似搞清楚了,通過 flutter_driver 埠拼接 ws 地址轉發來執行操作命令,有興趣的可以自己抓包看看, 下面我們們看看 Appium 怎麼做自動化
官方 API 地址:https://api.flutter.dev/flutter/flutter_driver/FlutterDriver/getLayerTree.html
Appium 使用 flutter-driver 驅動執行 執行自動化測試
appium 1.16 之後的版本已經有大佬寫了支援 flutter_driver 驅動了 (當然 bug 不少,吐槽一下)
appium-flutter-driver 倉庫地址:
https://github.com/truongsinh/appium-flutter-driver
我們寫個 python demo 試試
driver = Remote('http://localhost:4723/wd/hub', dict(
platformName='iOS',
automationName='flutter',
deviceName='iPhone 11',
app="cn.rongcloud.sealbiz",
udid="*****7b3785e8f58****",
xcodeOrgId="***VMN****",
xcodeSigningId="iPhone Developer",
))
print(driver.execute_script('flutter: getRenderTree'))
ws 連線地址好像和上面 web 頁面挺像的,但是一直連線不上,lsof 看看埠
lsof -i:57537
啥也沒有,根據上面的原理,應該是要做本地轉發手機裡的 flutter-driver 埠應該才能連線上,試一下看看
iproxy 57537:57537 --udid ****62c60b38c5e5**********
成功連線上了,應該是 appium-flutter-driver 埠轉發問題。
知道這個問題了去看看這個倉庫啥情況,並沒有看到任何埠轉發,fork 倉庫 做了一些埠轉發 bug,重連時間的修改
https://github.com/YueChen-C/appium-flutter-driver 分支:real-device
!!!必須安裝了 iproxy 工具!!!
可以自己打包,也可以使用我打包好的檔案,
替換掉 appium/node_modules/appium-flutter-driver/bulid
build 檔案 下載
連結: https://pan.baidu.com/s/1t2uAIC3YOPL8zZ5gZT8jrA 提取碼: jbma
appium-flutter-driver 還有很多功能沒做,也存在很多 bug 希望小夥伴們能共同研究 flutter ~
相關文章
- python+appium+pytest做app自動化測試PythonAPP
- 3分鐘瞭解Appium:使用appium做Android手機自動化測試!APPAndroid
- API自動化測試實踐API
- 自動化測試的最佳實踐
- 前端自動化混沌測試實踐前端
- UI自動化測試工程實踐UI
- 自動化測試實踐總結
- Docker與自動化測試及其測試實踐Docker
- appium uiautomator 移動端自動化測試工具APPUI
- Jenkins整合appium自動化測試(Windows篇)JenkinsAPPWindows
- Appium自動化(15) - 針對 webview 進行自動化測試APPWebView
- 介面自動化測試工程實踐分享
- Appium+Python實現iOS自動化測試~環境搭建APPPythoniOS
- 如何做自動化測試?什麼是自動化測試?
- 搭建appium+python自動化測試環境APPPython
- Appium自動化測試之常用的adb命令APP
- iOS appium UI 自動化測試配置可控 xpathiOSAPPUI
- 自動化測試:Monkey工具實踐應用~
- 測試自動化中遵循的最佳實踐
- 採用自動化測試的情形及自動化測試的優缺點
- 『與善仁』Appium基礎 — 8、Appium自動化測試框架介紹APP框架
- 使用 testng 做介面自動化測試
- 介面自動化測試的最佳工程實踐(ApiTestEngine)API
- 基於postman的api自動化測試實踐PostmanAPI
- 降本增效下的自動化測試實踐
- Web前端自動化測試Cypress實踐總結Web前端
- appium 自動化測試,無法獲取具體元素APP
- appium自動化APP
- Flutter應用進行自動化測試Flutter
- JMeter做WEB和API自動化測試JMeterWebAPI
- 如何用Postman做介面自動化測試Postman
- robotframework + appium進行自動化測試時遇到的問題FrameworkAPP
- 測試開發之自動化篇-Appium指令碼開發APP指令碼
- android appium微信等自動化的那些坑兒AndroidAPP
- 自動化測試系列 —— UI自動化測試UI
- pyest+appium實現APP自動化測試,思路全總結在這裡APP
- 介面自動化測試世界裡的“身份證”—測試工具Jmeter實踐篇JMeter
- 自動化測試selenium在小公司的成功實踐