Android中如何實現自動化測試

目錄

前言:

一、方法介紹

1、UI Automator

3、shell腳本

二、shell腳本實現自動化測試原理和步驟

1、?原理

2、步驟

三、shell自動化測試實例


前言:

? ? ? ?在開發項目的過程中,我們將某個階段的需求完成并且提測,通常,在測試工程師更細致的測試之下,會測試出一些我們沒有考慮周全而出現的代碼邏輯問題或自測沒有測出來的交互問題,有些問題可以直接通過打印定位,但是對于一些偶現,且在當前打印中并不能快速定位的問題,那我們接下來的調試步驟一般是在相關代碼里添加一些自己的新的打印,然后根據測試工程師描述的步驟進行操作,然后再觀察打印,重復這兩個步驟之后一步步debug出有問題的代碼段,由于這個問題是偶現的,若概率非常小,則需要我們不斷的手動點擊屏幕,做大量的重復的動作去復現測試工程師描述的問題,該過程相當費“體力”,此時我們會想,既然該操作動步驟是重復的,那我們有沒有方法進行自動化測試呢。

? ? ? ? 那么接下來我重點介紹一種自動測試的方法,shell腳本自動化測試。

一、方法介紹

?????要實現自動化測試,方法有很多,例如使用原生框架UI Automator、使用第三方開源工具Appium、以及我提到的shell腳本自動化測試等等。接下來,對于前兩種方法我只是做一個簡單的介紹,第三種自動化測試方法我會著重說明。

1、UI Automator

? ? ? UI Automator 是一個適用于跨應用功能界面的界面測試框架,對系統和已安裝的應用進行測試。借助 UI Automator API 在設備上測試可見元素,而無論 Activity 位于哪里。因此你可以執行打開“設置”菜單等操作或測試設備中的應用。你的測試可以通過描述詞查找界面組件,例如該組件中顯示的文字,或內容說明等。

??類型:官方原生測試框架。

??用途:跨應用UI自動化測試,支持操作系統級界面元素(如通知欄、設置菜單)。

??特點:無需源碼,提供API定位控件,支持多設備并行測試。

??工具鏈:UI Automator Viewer用于控件層級分析。

??缺點:對H5支持有限。

2、Appium

Appium是開源的、跨平臺的測試自動化測試框架,主要用于測試移動端應用,Appium支持模擬器和真機上的原生應用、混合應用、Web應用。Appium使用WebDriver的JSON wire協議來驅動Apple系統的UI Automator庫、Android系統的UI Automator框架,因Appium集成了Selendroid框架,所以Appium支持比較老版本的Android,Appium支持Selenium WebDriver支持的所有語言(Java、Python、JavaScript、Objective-C、PHP、Ruby、C#、Clojure、Perl等)。

??用途:跨平臺端到端測試,支持原生、混合和Web應用。

??優勢: ?

1)多語言支持(Python、Java等),腳本復用性高。

2)無需修改應用代碼,通過Desired Capabilities配置設備參數。

??典型操作:元素定位(ID/XPath)、滑動、輸入文本。

3、shell腳本

相比于以上提到的兩個方法,該方法較為輕量化,但可以測試的功能較為有限,優勢是對于一些簡單的測試,例如簡單的重復點擊屏幕幾個固定坐標的測試,使用該方法方便快捷,輕量化,不需要配置較為繁雜的壞境,且代碼量非常小。

??

??用途:測試一些較為簡單的測試項,例如重復點擊屏幕的固定坐標等。

??優勢:輕量化,系統級別測試,代碼編寫簡單,不需要配置復雜的環境等。

??缺點:不能實現較為復雜的測試。

二、shell腳本實現自動化測試原理和步驟

1、?原理

? ? ? Shell自動化測試實際上就是將我們平時adb調試時使用的各種命令組合起來,組成一個可以滿足我們測試要求的測試文本,由于我們的測試需求通常是做大量重復操作復現問題,故該腳本通常包含循環語句。測試的時候運行該腳本即可實現自動化測試。

2、步驟

(1)將我們的測試邏輯通過shell語句組合起來,形成一個文本,例如myTest.sh;

(2)adb或者串口連接我們的設備,將該shell文本復制到我們的設備的某個路徑下,例如etc/myTest.sh;

(3)使用執行命令使該腳本執行起來(./etc/myTest.sh)。

三、shell自動化測試實例

以下是自動化測試腳本實例,該腳本的功能是打開應用一和應用二,且將它們進行分屏,重復200次。

  1. #!/system/bin/sh
  2. sleep?1
  3. i=1
  4. while?[?$(($i))?-le?200?]
  5. do
  6. i=$(($i+1))
  7. #?最近任務
  8. input?tap?3811?1087? ???//點擊坐標(38111087)?
  9. sleep?0.5
  10. input?tap?3796?1141
  11. sleep?0.5
  12. #?kill?all_pid
  13. input?tap?3615?1483? ? ? ?//點擊坐標(3615,1483)?
  14. sleep?0.5
  15. #?init
  16. input?keyevent?HOME
  17. sleep?2
  18. #?進入側邊欄
  19. input?tap?3811?1087
  20. sleep?0.5
  21. input?tap?3796?1141
  22. sleep?0.5
  23. #?打開應用分屏
  24. input?tap?3238?702
  25. sleep?0.5
  26. #?選擇應用一
  27. input?tap?2627?738
  28. sleep?0.5
  29. #?選擇應用二
  30. input?tap?2265?925
  31. sleep?0.5
  32. #?確認開啟進入分屏
  33. input?tap?2643?1178
  34. sleep?6
  35. done

部分代碼語句解析:

while?[?$(($i))?-le?200?] ??: 循環測試兩百次

input?tap?3811?1087?????: 點擊屏幕坐標(3811,1087)

input?keyevent?HOME????: 點擊home按鍵,回到主頁

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96404.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96404.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96404.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

綠聯科技全球化突圍:業財一體化如何打通全球電商全鏈路數字化

綠聯科技專注數碼配件20年,產品覆蓋全球100多個國家,年銷售額突破30億。作為"連接"領域的專家,綠聯深知連接的真諦不僅在于硬件產品,更在于數據的全球化連接。在全球電商競爭日益激烈的今天,綠聯率先探索業財…

uv教程 虛擬環境

什么是uv 可以創建虛擬環境 安裝依賴 安裝uv 參見官方文檔 安裝 | uv-zh-cn 自定義安裝目錄,winr 輸入powershell,輸入如下命令 $env:UV_INSTALL_DIR "C:\Custom\Path";powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/inst…

繞過codex在vscode中登錄403的問題

codex安裝: npm i -g openai/codex codex升級: npm install -g openai/codexlatest 繞過codex在vscode中登錄403的問題: https://linux.do/t/topic/924206/4 1.在windows端powelshell登陸好codex; $env:HTTP_PROXY"http://…

軟件研發如何選對方法論?傳統計劃驅動與敏捷價值驅動的全面對比

軟件項目研發中的方法論是一個核心話題,它決定了團隊如何規劃、執行和交付軟件。下面我將對這些方法論進行一個全面的概述,從傳統的到現代的,并說明它們的核心思想、適用場景和趨勢。 一、 方法論的核心分類 軟件研發方法論主要分為兩大陣營:傳統計劃驅動(Plan-Driven)…

【服務器】將本地項目部署到服務器

當我們已經有了一個服務器后 如何將本地項目部署到服務器呢第一步,找到云服務器實例,查看公網IP地址第二步,推薦使用 Windows 自帶的 PowerShell ssh root你的公網IP # 例如: ssh root47.98.123.45如果超時,首先檢查服…

Flink中的 BinaryRowData 以及大小端

背景 本文基于 Flink 1.17.0 寫此文章的目的是為了說明 Flink 堆內和堆外內存以及 內部 BinaryRowData 行處理的優化。 分析 堆內和堆外內存 跟Spark的內存管理不一樣,Flink 中的堆內和堆外一直都是存在的。 堆內內存(JVM Heap)存儲用戶對象和…

HTTP/3.0:網絡通信的技術革新與性能飛躍

🌐 HTTP/3.0:網絡通信的技術革新與性能飛躍 Refer:PPP PRIVATE NETWORK? 2 企業級虛擬以太網接入綜合解決方案介紹 🚀 引言:悄然來臨的網絡革命 你是否曾期待視頻加載卡頓成為過去?YouTube 已經邁出了重…

【golang學習筆記 gin 】1.1 路由封裝和mysql 的使用封裝

安裝gin go get -u github.com/gin-gonic/gin go get -u github.com/go-sql-driver/mysql創建相關目錄 gotest->conifg->database.go->redis.go->controller ->index.go->model->user.go->router->router.gomain.go 創建用戶模型 package model imp…

SQL 層面行轉列

背景:如果對一些評論、點贊、收藏等互動數據,使用了按照 type 分類存儲,num 也是對應的。這樣如果創建一個帖子,那么就會出現 3 行數據(type 不同,num 不同,對應評論點贊和收藏)&…

langchain4j筆記篇(陽哥)

一 概述1.1 概述langchain4j:langchain for java1.2 作用langchain4j的目標是簡化將LLM集成到java應用程序中的過程。二 案例簡單helloworld2.1 大模型調用三件套1.阿里百煉平臺的通義模型: https://bailian.console.aliyun.com/2獲取api-key&#x…

有鹿機器人的365天奇幻日記:我在景區當掃地僧

第一章 古建守護者:2cm的極致藝術琉璃瓦下的秘密記得那是個晨霧繚繞的清晨,我接到首個重要任務:清掃明代琉璃碑亭。這里的每塊地磚都是文物,傳統清潔工具根本不敢靠近。每天以2cm的精準貼邊沿碑座作業,如今我每周都要為…

Objective-C方法參數標簽怎么設置

在Objective-C中,方法名稱可以通過幾個標簽名稱組成,這是跟C/C中完全不一樣的地方。每個標簽都是字段冒號的寫法,冒號后面是方法的參數,參數包括參數類型和參數變量,其中參數類型要用括號括起。方法參數的標簽是通過在…

20250910_《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》以10.1.1.31服務器的gtp-default數據庫為例

《SQL Server 數據庫事務日志定期清理方案(精簡優化版)》 一、前提條件 數據庫 gtp-default 已設置為完整恢復模式 (FULL)。 每天凌晨02:00執行完整備份,保證日志備份可用。 SQL Server Agent 已啟用。 作業所有者為 sa,具有 sysadmin 權限。 Agent 服務賬號 NT Service\S…

實習項目包裝--HTTP 協議和 Web API

好的,完全沒問題!你問到了一個非常核心且基礎的知識領域,這是現代Web開發和幾乎所有網絡應用的基石。我們暫別嵌入式系統,專門來上一堂關于 HTTP 協議和 Web API 的詳細課程。 我會從最根本的概念講起,逐步深入到你所…

ICCV-2025 | 中科院自動化所世界模型助力具身導航!NavMorph:連續環境中的視覺語言導航自演化世界模型

作者:Xuan Yao1,2^{1,2}1,2, Junyu Gao1,2^{1,2}1,2, Changsheng Xu1,2,3^{1,2,3}1,2,3單位:1^{1}1中科院自動化所多模態人工智能系統國家重點實驗室,2^{2}2中國科學院大學人工智能學院,3^{3}3鵬城實驗室論文標題:NavM…

【ARDUINO】ESP8266的AT指令返回內容集合

一、基礎測試指令(確認模塊通信) 1. AT(測試模塊是否響應) 功能:檢測ESP8266與控制器(如Arduino)的串口通信是否正常。 返回內容: 成功:OK(無額外數據,僅確認通信正常) 失敗:無返回(可能是波特率不匹配、接線錯誤) 示例:發送:AT 返回: OK二、Wi-Fi模式配置指…

Mockoon:開源免費的本地Mock服務工具,提升前后端聯調效率

你有沒有過這種經歷?做前端開發時,后端同事的接口還沒寫完,你這邊要調頁面數據,只能對著空控制臺發呆?要么手動寫個 JSON 文件當假數據,改一次數據就得重新保存文件、刷新頁面;要么用在線 Mock …

【Mysql|第一篇】Mysql的安裝與卸載、Navicat工具的使用

一、Mysql的安裝與卸載: 1、查看是否安裝過mysql: (1)cmd中輸入mysql看是否有顯式提醒 (2)右擊此電腦,選擇管理,在左側欄中找到服務,查看是否有與mysql相關的 2、卸載的…

貪心算法應用:流行病干預策略問題詳解

Java中的貪心算法應用:流行病干預策略問題詳解 貪心算法是一種在每一步選擇中都采取當前狀態下最優的選擇,從而希望導致全局最優解的算法策略。在流行病干預策略問題中,貪心算法可以有效地幫助我們做出資源分配決策,以達到最優的防…

git刪除最近一次提交包括歷史記錄。

方法一:刪除最近的一次提交(最常見) 如果你只是想撤銷最后一次提交,這是最簡單的方法。在本地刪除提交 使用 git reset --hard 命令,將你的本地分支回退到上一次提交。Bashgit reset --hard HEAD^HEAD^ 指的是 HEAD 的…