­

python uiautomator,比 appium 更簡單的 app 測試工具

  • 2019 年 11 月 8 日
  • 筆記

1,場景

在 app 測試的蠻荒時代,如果要進行 app 自動化測試非常麻煩。張大胖如果想做Android自動化測試,首先必須要學 Java。因為Android自動化測試都繞不開 google 自己研發的自動化測試框架,於是張大胖哼哧哼哧開始學 java,開始上手 UiAutomator 做自動化測試。2 周過去了,張大胖開始向王哥抱怨:

 

 

王哥一看他的程式碼,demo 都還沒跑起來,再讓他玩下去,公司都倒閉了。於是王哥給張大胖推薦了一個工具叫 appium, 這個工具強就強在跨平台,跨語言,還開源。張大胖之前學過半個月 python, 搞這個問題應該不大。

過了一天,張大胖果然興沖沖的跑過來,高興的說流程跑通了。appium 這玩意真不錯,就是有一個不好的地方,通過程式碼查找 app 上的元素經常要嵌套 java 程式碼,而且要帶上一長串的設備資訊。

王哥又給張大胖推薦了一個工具,這個工具叫 python uiautomator。它可以在手機上裝一個 http rpc 服務,你可以通過其他語言作為客戶端去遠程調用 uiautomator 的介面。這個庫解決了原始 uiautomator 的 2 個問題:

  • 必須要會 Java 程式碼
  • 腳本要傳到設備上才能運行

他的原理圖類似於這樣:

 

 

而相比 appium, 這個工具封裝的 api 更加簡潔,使用起來更加高效。張大胖馬上回去研究了一下,15 分鐘就把流程跑通了,當天就請王哥搓了頓小龍蝦。有了這麼好用的工具,張大胖趕緊回來寫筆記。

2,安裝

安裝不要太簡單,一行命令搞定。相比 appium 要裝的各種依賴,簡直不要太幸福。安裝好以後,連接手機,輸入 adb devices 指令,確認手機連接成功,輕鬆完成。

# 官方下載安裝  pip install automator2    如果官方站點無法訪問,可以訪問豆瓣源下載:  pip install -i https://pypi.doubanio.com/si  mple/ uiautomator2  

 

3,快速使用

手工怎麼測,這個工具的流程完全一樣,省心省力,一行多餘的程式碼都沒有。而使用 appium 的時候,張大胖為了寫長長的 desired capabilities 不知消耗了多少腦細胞。

1, 連接設備;
2, 啟動app;
3, 元素定位;
4,元素操作;
5,關閉 app。

import uiautomator2    # 連接手機  d = uiautomator2.connect()  # 啟動app  d.app_start("com.lemon.lemonban")  # 定位元素  my = d(resourceId='com.lemon.lemonban:id/navigation_my')  # 操作元素  my.click()  # 關閉 app  d.app_stop("com.lemon.lemonban")  

相同版本的 appium 程式碼,對比了解一下:

from appium.webdriver import Remote    caps = {      "platformName": "Android",      "platformVersion": "5.1",      "deviceName": "Android Emulator",      # "app": r"D:Program Filesadt-bundle-windows-x86_64-20140702sdkbuild-tools28.0.3Future-release-2018.apk.apk",      "appActivity": "com.lemon.lemonban.activity.addition.WelcomeActivity",      "appPackage": "com.lemon.lemonbano",      "noReset": "False",  }  # 連接手機  driver = Remote(desired_capabilities=caps)  # 定位  my = driver.find_element_by_id('com.lemon.lemonban:id/navigation_my')  my.click()  # 退出  driver.quit()  

做一個簡單的對比, python 版的 uiautomator 具有如下優勢:

  • 連接手機的時候可以省去大段資訊
  • 元素定位直接採用更加優雅的 __call__() 機制,不需要調函數名稱,而是通過關鍵字參數的形式直接完成元素定位。
  • 將 app 作為一個管理單元(session),會有更大的靈活性。
  • 這裡還不包括更加靈活的等待和 watcher 機制。

 

4,使用 weditor 工具查看元素定位

為了更加方便的進行元素定位,可以使用 weditor 輔助獲取元素定位表達式,如果不想用,也可以用 uiautomatorviewer 等原生Android輔助工具。

安裝 weditor, 你懂的 pip install weditor。 安裝完成後命令行輸入 weditor 一鍵啟動,直接彈出圖形化介面。

 

 

weditor 的優勢在於:

  • 可以同時管理多個設備;
  • 直接在調試介面操作手機,不需要另一隻手去動手機;
  • 自動生成 uiautotor 程式碼。

 

5,總結

本篇介紹了非常簡單的 uiautomator 使用,總結一下它的優勢:

  • 不用會 java, 也可以體驗原生測試的“快”感;
  • api 封裝異常簡單,符合 python 的優雅性格;
  • 上手迅速,略懂 python,就可以玩轉。

不聊了,這麼好用的工具,我要趕緊回去吃透它。