iT邦幫忙

2024 iThome 鐵人賽

DAY 28
0
DevOps

建立應用程式 UI 自動化測試 - 以 Robot Framework 為例系列 第 28

[28] Robot Framework 結合 Appium 進行 App 自動化測試 - 整合 BrowserStack (雲端設備測試服務平台)

  • 分享至 

  • xImage
  •  

在前面我們都是透過模擬機進行展示,但是實際上我們的測試是可以透過實體機進行測試的,而且相較於模擬機在實體機上測試是更加符合使用者的情境的,但是這時候我們就會遇到一個問題是使用者的裝置涵蓋的範圍及版本的排列組合太多了,公司沒有這麼多的資源可以覆蓋到使用者的機型及版本,這時候便可以透過像是 BrowserStack 這樣的雲裝置平台工具來協助,BrowserStack 提供了一個無須實體設備即可完成這些測試的雲端平台。在本章節中,我們將介紹什麼是 BrowserStack、為什麼使用它,以及如何將 BrowserStack 整合到 Robot Framework 中進行 App 測試。

選擇雲端裝置的另一個好處是,我們在前幾個章節有提到,App 在整合 github actions 時,會遇到需要有執行裝置的問題,若是我們想要執行在我們手邊的實體裝置時,勢必需要架設 self-host-runner,如果此時我們希望,測試跑在實體裝置上,然後測試又都需要上雲,那麼透過 github 提供的 runner 機器搭配 BrowserStack 會是一個很棒的選擇。

小補充~ 這章節主要介紹 BrowserStack 執行 App 的測試,但是 BrowserStack 也有提供 Web Playwright 的測試,因此如果想要整合 Web 測試跑在不同瀏覽器及裝置版本的話,也是可以的喔!

雲端設備測試服務平台是什麼?

雲端設備測試服務平台是一種基於雲的解決方案,允許開發者在各種實際設備上進行測試,而無需擁有實體設備。透過這類服務平台,開發者可以遠端訪問大量的真實手機、平板、桌上型設備,瀏覽器,這些設備通常涵蓋不同的作業系統版本、解析度及硬體規格。

這類平台的核心目標是解決多樣設備需求的痛點,提供即時、可擴展的測試環境,尤其對於需要在短時間內測試多種裝置的應用程式而言,這類平台變得不可或缺。

導入雲端設備測試服務平台的好處

  • 節省硬體成本:在過去測試相容性測試時,我們需要測試許多不同的裝置,有些比較特殊的版本或是裝置難以取得,同時測試團隊也不再需要購買和維護大量不同型號的設備。雲端測試服務平台提供即時存取,讓測試不受限於本地設備的可用性
  • 廣泛設備覆蓋:這些平台通常涵蓋大量的真實裝置和多版本操作系統,有助於確保應用程式在不同設備上的兼容性和性能
  • 隨時隨地測試:透過網路連接即可訪問設備,開發者可以隨時隨地進行測試,靈活且高效
  • 加速測試週期:由於可以在多個設備上同時進行測試,因此可以顯著縮短測試週期,讓應用更快進入市場
  • 更真實的測試場景:相比模擬器,這些平台上的實機測試能夠提供更真實的用戶體驗和操作行為,讓測試結果更加準確
  • 平行測試:相比本地端的裝置,在有限的裝置數量下,我們能夠同時執行的裝置有限,在平台上我們則是可以以相同的裝置來執行平行測試,可以有效的縮短測試的時間

關於 BrowserStack

BrowserStack 介紹

BrowserStack 是一個提供雲端設備測試服務的平台,讓開發者和測試人員可以即時在真實的設備上進行測試,而不必購買大量的實體設備或建構自己的測試基礎設施。BrowserStack 支援各種行動裝置和桌面瀏覽器,提供跨平台的測試環境,包括 Android 和 iOS 系統的真實裝置。
https://ithelp.ithome.com.tw/upload/images/20241007/20168859556PeQx3tW.png
圖片來源

BrowserStack 主要特點

  • 降低設備成本:由於不必購買和維護實體設備,企業可以大幅降低測試設備的成本。
  • 擴展性:可以輕鬆進行跨裝置、跨平台的測試,適合具有多種設備需求的專案。
  • 方便整合自動化測試框架:BrowserStack 可以與各種自動化測試框架整合,包括 Selenium、Appium、Robot Framework 等,能夠將本地環境中的測試直接移植到雲端設備上進行。
  • 全球分佈測試:在本章節撰寫的當下,BrowserStack 已經擁有 19 座資料中心座落在各地,測試團隊可以在全球不同地點的真實網路條件下測試應用程式,確保應用程式在不同的網路環境中都能正常運作。
  • 整合 BrowserStack 其他服務:BrowserStack 除了提供雲機器自動化測試之外,還有測試結果管理平台、可用性測試、視覺測試、網頁測試等服務可以整合,讓測試通通在一個平台上完成,相當方便管理
  • 第三方整合:BrowserStack 也與許多的第三方平台整合,像是 Jira, Github, Azure DevOps 等平台
  • 支援多種測試框架:BrowserStack 支援許多常見的程式語言及測試框架,這讓我們在整合測試上方便不少

BrowserStack 付費方式

BrowserStack 的付費採訂閱制,團隊能夠依據實際的使用需求選擇適合的方式,並且 BrowserStack 將 App, Web 分開,以及手動自動分開,因此能夠選擇的方案也非常彈性,更多關於訂閱價格的部分,可以查看官方連結

BrowserStack 競品

除了 BrowserStack 是目前最受歡迎的雲端設備測試服務平台之一外,也是有許多廠商提供相同的服務,這個章節我們主要針對 BrowserStack 做介紹,因此不會提到其他的平台,大家如果有興趣的話還是可以參考一下每個平台的差異喔!

團隊可以依照各自的需求選擇最符合團隊發展的工具。

使用 BrowserStack 進行 App 測試

將 BrowserStack 與 Robot Framework 整合起來進行 App 測試相對簡單。下方的範例成果也有公開放在 Github 上的,大家如果有興趣的話也可以一起到 Github 上觀看成果!附上連結:https://github.com/max-tsai-qa/rf-browserstack-example

註冊 BrowserStack 並取得憑證

前往 BrowserStack 註冊一個帳號,註冊完成並且完成登入後,我們能夠在主畫面取得使用者名稱 (User Name) 和訪問金鑰(Access Key)。這些憑證將用來在 Robot Framework 中配置連接到 BrowserStack 的設置。https://ithelp.ithome.com.tw/upload/images/20241007/20168859eBkyqqUsfh.png

安裝必要的工具

首先,我們需要先安裝 app 測試及 BrowserStack 需要使用到 library。我們可以使用以下指令來安裝:

pip install robotframework robotframework-appiumlibrary robotframework-pabot browserstack-sdk robotframework-pabot robotframework-seleniumlibrary

上傳 app 到 BrowserStack

在測試開始前我們需要將測試的 app 上傳到 BrowserStack,讓 BrowserStack 的裝置能夠安裝,我們可以透過 api 上傳或是在 UI 上上傳,上傳的步驟如下:
https://ithelp.ithome.com.tw/upload/images/20241007/20168859WJ1unZNFHP.png

上傳後我們可以取得一個 bs:// 開頭的位址,後續我們測試指定 app 的時候便是需要設定這個位址。

設定 BrowserStack SDK Configurator

BrowserStack SDK 是 BrowserStack 提供的一個軟體開發工具包,用於簡化測試自動化的設置和運行流程。BrowserStack SDK 幫助開發者輕鬆的將測試自動化腳本與 BrowserStack 平台整合,無需手動配置複雜的網絡設置或設備參數,BrowserStack SDK 為近期推出的工具,早期串接 BrowserStack 的作法是將配置放到 Capabilities 中。

BrowserStack SDK 的主要特點

  1. 簡化測試配置:BrowserStack SDK 內置了多種設備和瀏覽器的配置,使得用戶可以通過簡單的幾行程式碼選擇要測試的設備和環境,而不必為每次測試手動設置大量參數。
  2. 自動並行化:SDK 提供自動並行化功能,可以同時在多個設備上運行測試,縮短測試執行的時間,提高效率。
  3. 簡化的集成:通過 SDK,用戶可以更快的集成本地測試環境與 BrowserStack 雲端環境,不需要手動配置代理或網絡設置。
  4. 報告和分析:SDK 提供詳細的測試報告和設備狀態信息,幫助開發者快速定位測試失敗的原因。

首先我們需要在專案資料夾中,先建立一個 browserstack.yml 檔案,這個檔案建議新增在需要測試的 OS 底下,例如,當今天專案的架構有 Android 也有 iOS,那就需要在各別的底下新增:

userName: <<YOUR_USERNAME>>
accessKey: <<YOUR_ACCESS_KEY>>
framework: robot
app: <<YOUR_APP>>
platforms:
  - platformName: android
    deviceName: Samsung Galaxy S22 Ultra
    platformVersion: 12.0
  - platformName: android
    deviceName: Samsung Galaxy Tab S9
    platformVersion: 13.0
  - platformName: android
    deviceName: Google Pixel 7 Pro
    platformVersion: 13.0
browserstackLocal: false
buildName: demo-first-browserStack
projectName: BrowserStack Demo

接著我們根據上面的配置說明一下:

  • userName:如同上面介紹的,登入後我們可以在頁面上方找到這個參數,我們需要將 yaml 中改成自己的
  • accessKey:如同上面介紹的,登入後我們可以在頁面上方找到這個參數,我們需要將 yaml 中改成自己的
  • framework:這裡指的是測試的框架,由於我們這個系列介紹的是 Robot Framework,因此這邊我們填入 robot
  • app:這個是指需要測試的 app,上傳步驟如同上面介紹,我們可以透過手動先上傳到 BrowserStack,或是透過 api 上傳,上傳後會回傳一個 bs:// 開頭的資料,這個便是 app 在 BrowserStack 上的位置
  • platforms:在 platforms 這邊就是需要選擇測試裝置的時候拉!我們可以選擇測試裝置是 Android 還是 iOS,以及裝置的名稱及版本,像上面範例這樣選擇三台裝置的話,執行測試時便會同一份腳本,平行測試執行在三台裝置上

關於更多的設置,我們可以到 BrowserStack 提供的這個網頁: https://www.browserstack.com/docs/app-automate/appium/sdk-config-generator 我們能夠在這個網頁透過 UI 選擇後,直接複製右側產生的 YAML 即可。
https://ithelp.ithome.com.tw/upload/images/20241007/20168859FbmM35Dhf3.png

撰寫 Robot Framework 測試腳本

接著我們來撰寫測試的腳本吧!老樣子,先在專案中新增一個 .robot 檔案,接著新增以下程式碼:

*** Settings ***
Library    AppiumLibrary

Suite Teardown    Close Application

*** Variables ***
${REMOTE_URL}     https://hub-cloud.browserstack.com/wd/hub

*** Test Cases ***
Test Browserstack
    Open Application    ${REMOTE_URL}
    Click Page Element    //android.widget.FrameLayout[@content-desc="My lists"]
    Click Page Element    //android.widget.FrameLayout[@content-desc="History"]
    Click Page Element    //android.widget.FrameLayout[@content-desc="Nearby"]
    Click Page Element    //android.widget.FrameLayout[@content-desc="Explore"]

*** Keywords ***
Click Page Element
    [Arguments]    ${element}
    Wait Until Page Contains Element    ${element}
    Click Element    ${element}

透過上面的程式碼我們可以發現,跟我們平常寫測試沒有太大的差異呀,是的!這得益於 BrowserStack SDK,我們將測試的配置都放在那邊,這測試腳本專注於測試本身,接著我們針對上方的程式碼稍微說明一下:

  • Open Application:這邊會是最大的差異,過去我們都將 Open Application 的 URL 指向本地端的 appium server,在這邊我們改成指向 remote 的 BrowserStack
  • Click Page Element:接著我們針對 app 底下的 tab 進行點擊

其實最大的差異就是在 Open Application,其他部分跟我們平常寫程式時一樣,因此在串接 BrowserStack 上是非常的容易的。

觸發測試

當我們測試腳本寫好了,browserstack.yml 也配置好了,那麼便可以來觸發測試啦!我們在終端機上,輸入以下指令觸發測試:

browserstack-sdk robot test.robot

輸入上方的指令觸發測試後,我們的測試將會在 BrowserStack 的雲端設備上執行,並可以在 BrowserStack 儀表板中查看測試結果和相關的測試資訊。

  • 觸發測試後我們也可以在終端機上看到相關的 log 產出
  • 每個裝置的測試狀態,由於我們在 browserstack.yml 設定三台裝置的測試,因此在下方的 log 中我們可以看見測試執行了三次
  • 測試結束後在本地端也會產生 Robot Framework 的測試報告
  • 測試結束後提供本次測試在 BrowserStack observability 及 app-automate dashboard 上的連結
➜ ✗ browserstack-sdk robot test.robot        

10:19:28 [browserstack_sdk.__init__][INFO] - Using App : bs://.

10:19:28 [browserstack_sdk.__init__][INFO] - Project and debug logs are captured by default. To disable, set disableAutoCaptureLogs: true in config.

10:19:32 [browserstack_sdk.__init__][INFO] - Setting up for Browserstack, using framework: robot
warnings.warn("ArgumentParser option 'auto_pythonpath' is deprecated "
Storing .pabotsuitenames file
2024-10-06 10:19:32.585173 [PID:44417] [0] [ID:1] EXECUTING Test App
2024-10-06 10:19:32.590007 [PID:44418] [2] [ID:2] EXECUTING Test App
2024-10-06 10:19:32.590381 [PID:44419] [1] [ID:0] EXECUTING Test App
2024-10-06 10:19:48.158783 [PID:44417] [0] [ID:1] still running Test App after 15.0 seconds
2024-10-06 10:19:48.160508 [PID:44418] [2] [ID:2] still running Test App after 15.0 seconds
2024-10-06 10:19:48.183751 [PID:44419] [1] [ID:0] still running Test App after 15.0 seconds
2024-10-06 10:20:08.339594 [PID:44419] [1] [ID:0] PASSED Test App in 34.4 seconds
2024-10-06 10:20:08.919316 [PID:44417] [0] [ID:1] still running Test App after 35.0 seconds
2024-10-06 10:20:08.921280 [PID:44418] [2] [ID:2] still running Test App after 35.0 seconds
2024-10-06 10:20:09.646573 [PID:44418] [2] [ID:2] PASSED Test App in 35.7 seconds
2024-10-06 10:20:13.081721 [PID:44417] [0] [ID:1] PASSED Test App in 39.0 seconds
3 tests, 3 passed, 0 failed, 0 skipped.
===================================================
Output:  /ithome/rf-browserstack-example/output.xml
Log:     /ithome/rf-browserstack-example/log.html
Report:  /ithome/rf-browserstack-example/report.html
Total testing: 1 minute 49.10 seconds
Elapsed time:  40.62 seconds

10:20:14 [bstack_utils.bstack1l1llll1_opy_][INFO] - Visit https://observability.browserstack.com/ to view build report, insights, and many more debugging information all at one place!

10:20:15 [browserstack_sdk.__init__][INFO] - View build on BrowserStack dashboard: https://app-automate.browserstack.com/

10:20:15 [browserstack_sdk.__init__][INFO] - Handling session close

10:20:15 [browserstack_sdk.__init__][INFO] - All done!

查看 BrowserStack 上的測試報告

當我們觸發測試後,同時會將測試的過程及資料上傳到 BrowserStack 上,這也是我們選擇雲端設備測試服務平台的優點之一,除了有雲裝置可以使用外,在測試結果上我們也能夠透過 BrowserStack 提供的 dashboard 取得許多關於測試過程中的資訊,下面我們就一起來看看 BrowserStack 提供哪些有趣的測試資訊吧!

列表頁

在點擊剛剛終端機顯示的 BrowserStack dashboard 後台連結後,我們可以進入到列表頁,這邊會顯示過去所有測試的紀錄,透過下圖我們可以看到,剛剛我們在 browserstack.yml 上設定的 projectName 參數會對應到畫面中的哪裡

點擊 buildName 後我們可以看到測試設定三台裝置執行同一隻 test case 的測試結果,每一個 Session 便是一隻裝置的測試結果,以及 overview 這個 build 的測試資訊。
https://ithelp.ithome.com.tw/upload/images/20241007/201688591n8aEoMn99.png

Session Detail 頁面

在列表頁點擊 Session 後我們可以進入到 Session Detail,大家還記得 Appium Session 的概念嗎~ 這邊一個 session 便是相同的道理,我們可以畫面上看到許多測試的資訊,像是:

  • 測試過程錄影:在畫面中我們可以看到本次測試過程中的錄影,當今天測試 fail 時,這個錄影可以幫助我們很好的排查問題
  • session 資訊:在畫面上方或是影片的下方,我們都可以看到測試相關的資訊,像是這個 app 的資訊、裝置的資訊及 session 的資訊
  • Test Log:在 Test Log 這邊,我們能夠看到每一個步驟執行的時間及資訊,點擊該步驟的話,測試影片還會跳到該步驟的時間點,這可以說是相當方便呀!
    https://ithelp.ithome.com.tw/upload/images/20241007/20168859KLqWOFLvyz.png
  • App Profiling:在這裡我們還能夠查看測試執行時 App 的使用狀態,這讓我們對於 App 的效能可以有更高的掌握度,也能夠更找發現效能所引發的問題
    https://ithelp.ithome.com.tw/upload/images/20241007/20168859zvPlNHUOHA.png

BrowserStack Observability

剛剛介紹的 dashboard 主要是提供給測試人員及開發人員了解測試過程,當今天我們想要將測試結果同步給其他只關注測試結果而不是過程的夥伴時 (像 PM, 測試主管),這時候 BrowserStack Observability 便提供很好的協助,我們可以在這個畫面中,直接看到本次測試的結果統計,以及設定 alert 等功能,Observability 變是 BrowserStack 的測試結果管理平台,提供了許多測試管理的功能,關於更多 Observability 的資訊,礙於本章節篇幅已經超長了,這邊就提供官方網址讓有興趣的夥伴參考囉!
https://ithelp.ithome.com.tw/upload/images/20241007/20168859sVgW5nCxB4.png


結語

BrowserStack 為移動應用程式的測試提供了強大且靈活的解決方案,特別是對於需要進行跨裝置測試的專案來說,能夠大大簡化測試流程。透過將 Robot Framework 與 BrowserStack 整合,我們可以高效地進行應用程式的自動化測試,並且不必擔心設備成本或測試環境的限制,以及透過 dashboard 我們能夠對測試的掌握度有所提升,在誇團隊的溝通上也有個平台可以操作,提供在串接上也非常的容易。希望本篇文章對如何使用 BrowserStack 進行 App 測試有所幫助。


上一篇
[27] Robot Framework 結合 Appium 進行 App 自動化測試 - 提高測試穩定
下一篇
[29] Robot Framework 結合 Appium 進行 App 自動化測試 - 將測試與 Github Actions 整合
系列文
建立應用程式 UI 自動化測試 - 以 Robot Framework 為例30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言