技術分享 | 想做App測試就一定要了解的App結構
本文節選自霍格沃茲測試開發學社內部教材
app 的結構包含了 APK 結構和 app 頁面結構兩個部分
APK結構
APK 是 Android Package 的縮寫,其實就是 Android 的安裝包。通過將 APK 檔案直接傳到 Android 模擬器或 Android 手機中執行即可安裝。
APK 檔案其實是 zip 格式,但字尾名被修改為 apk,通過 Android Studio 可以看到 APK 內部的檔案。
下面拿雪球 APK 來舉例,APK 內部結構如圖所示:
lib/ 目錄
lib/ 目錄存放的是一些 so 檔案。so 檔案是二進位制檔案,用來相容各種型別的 CPU。
Android 開發中,在打包釋出應用時會選擇應用適配的 CPU 架構平臺,在引用第三方庫時也遇到根據不同 CPU 架構引入相應的 so 包。Android 主要包括這幾種 CPU 架構:armeabi、armeabi-v7a、arm64-v8a、x86、x86_64、mips,大多數情況下只需要支援 armabi 與 x86 的架構即可。
不同的 CPU 架構決定了 app 可以執行在哪些裝置上。比如手機裝置一般來說用的是 arm 架構,而模擬器一般來說是 x86 架構。如果 app 只支援 arm 架構的話,那麼就只能安裝在真機上,模擬器上安裝就會不成功。如果是兩種架構都支援的話,那麼就是真機和模擬器都可以安裝了。
res/ 目錄
res 目錄是工程資源目錄,存放的是各種資原始檔,包括介面佈局,圖片,字串等。
assets/ 目錄
assets 目錄用來存放配置檔案。
classes(n).dex 檔案
DEX 編譯 Java 的 Class 檔案,生成 classes.dex 檔案。
resources.arsc 檔案
resources.arsc 檔案是編譯後的二進位制資原始檔。
AndroidManifest.xml 檔案
AndroidManifest.xml 檔案是 Android 的清單檔案,是每個應用都必須定義和包含的。它描述了應用的名字、版本、許可權、引用的庫檔案等等資訊。
app頁面結構
移動端 app 分類
app 可以分為下面這些型別
- Native App:原生 app 手機應用程式,使用原生的語言開發的手機應用。比如系統自帶的計算器、鬧鐘就是原生 app。
- Hybrid App:混合型 app 手機應用程式,混合使用原生的程式和 HTML5 頁面開發的手機應用。現在大部分的 app 都是這種混合型的,比如微信,支付寶等等。
- Web App:基於 Web 的 app 手機應用程式,完全使用 HTML5 頁面加前端 JS 框架開發的手機應用。比如在瀏覽器中開啟美團,這個頁面就是網頁 Web App。
Native App
對於 Native APP 來說,一個頁面上有下面這些型別的物件。
ACTIVITY
Activity 是 Android 四大元件之一,用於展示一個與使用者互動的介面。Activity 是存放 View 物件的容器,也是介面的載體,可以用來展示一個介面。
WINDOW
Window 是 Android 中的視窗,表示頂級視窗,也就是主視窗。它提供標準的使用者介面策略,如背景、標題、區域、預設按鍵處理等。
VIEW
View 就是一個個檢視的物件。檢視,是使用者介面元件的基本構建塊,它在螢幕中佔用一個矩形區域,它是所有 UI 控制元件的基類,如一個按鈕或文字框。View 負責圖形介面渲染及事件處理。
VIEWGROUP
ViewGroup 是 Android 中的檢視組。包含多個 View,也可以包含 ViewGroup。
檢視介面元素
對於 Android 來說,要檢視 app 介面的元素需要用到定位工具,常用的工具有 uiautomatorviewer。這是 Android SDK 自帶的工具,使用起來非常簡單。它可以獲取到整個介面的佈局,通過它就可以很容易的檢視介面當中的元素和元素的屬性了。
左側就是同步過來的介面,可以在介面上直接選擇元素,然後右面就會展示介面佈局和對應元素的屬性。
元素屬性
佈局
瞭解 app 的介面佈局,做自動化測試的時候更容易去定位頁面上的元素。
這裡的佈局就是指介面元素排布的方式。介面上的佈局方式都有以下這些方式:
- 線性佈局(LinearLayout):所有子檢視在單個方向(垂直或水平)保持對齊
- 相對佈局(RelativeLayout):每個檢視的位置可以指定為相對於同級元素的位置。例如在另一個檢視的左側或下方,或相對於父級區域的位置,例如在底部、左側或中心對齊
- 幀佈局(FrameLayout):座標原點是螢幕的左上角,位置固定,只需為控制元件指定大小即可,用來顯示一個單一的檢視
- 絕對佈局(AbsoluteLayout):能夠指定其子檢視的確切位置
- 表格佈局(TableLayout):通過畫表表格的方式來實現佈局,整個頁面就相當於一張大的表格,控制元件就放在每個 Cell 中
常見屬性
- index:元素索引
- text:顯示文字
- resource-id:元素id
- class:類名
- package:包名
- content-desc:描述文案
- checkable:是否可以選擇
- checked:是否已經選擇
- clickable:是否可以點選
- enabled:是否可用
- focusable:是否可以聚焦
- fucused:是否已經聚焦
- scrollable:是否可以滾動
- long-clickable:是否可以長選擇
- password:是否為密碼輸入框
- selected:是否已選擇
- bounds:元素位置座標
在這些屬性當中,對於測試有意義的幾個屬性有 text、resource-id class 和 content-desc,其餘的暫時不用太關注。這幾個屬性在後面做自動化的時候,可以用來定位元素。
⬇️ 你好呀,喜歡這篇文章的話煩請點個“贊”哦!萬分感謝~(▽) PS:有問題可以聯絡我們哦~v ceshiren001