圖像識別自動化android,Android自動化測試

寫在開頭:Android UI 自動化測試推薦網易的Airtest,也是谷歌推薦的,操作簡單,而且基于圖像識別根據用戶操作界面自動生成Python測試代碼

JUnit單元測試

testImplementation 'junit:junit:4.12'

5dfcdb23e101

image.png

5dfcdb23e101

image.png

使用gradle命令進行單元測試gradle test,還可以通過gradle testDebugUnitTest,或者是gradle testReleaseUnitTest,分別運行 debug 和 release 版本的 unit testing

Espresso

黑盒白盒測試區別如下:黑盒測試:已知產品的功能設計規格,可以進行測試證明每個實現了的功能是否符合要求。白盒測試:已知產品的內部工作過程,可以通過測試證明每種內部操作是否符合設計規格要求,所有內部成分是否以經過檢查。

Espresso是官方默認引入的,我們先看一下這個白盒測試工具

androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'

發個牢騷,看英文文檔好費勁,只能用翻譯插件一點一點翻譯,效率很低,效果還不如看一些相關中文博客,但是畢竟官網全面系統,而且很多技術文檔都是英文。希望自己堅持看英文文檔,提高英文水平。

當我根據文檔書寫代碼的時候,發現找不到onView方法,雙擊Shift,發現該方法在Espresso.onView

5dfcdb23e101

image.png

然后執行測試報錯java.lang.RuntimeException: No activities found. Did you forget to launch the activity by calling getActivity() or startActivitySync or similar?

解決方法

@get:Rule

var mActivityRule = ActivityTestRule(MainActivity::class.java)

簡單介紹一下Rule

一個JUnit Rule就是一個實現了TestRule的類,這些類的作用類似于@Before、@After,是用來在每個測試方法的執行前后執行一些代碼的一個方法

@RunWith(AndroidJUnit4::class)

class ExampleInstrumentedTest {

@get:Rule

var mActivityRule = ActivityTestRule(MainActivity::class.java)

@Test

fun useA() {

//EditText輸入文字

onView(withId(R.id.et)).perform(replaceText("劉德華"))

val btn = onView(withId(R.id.btn))

println("-------------------$btn")

//驗證更新按鈕是否顯示

btn.check(matches(isDisplayed()))

//點擊更新按鈕

btn.perform(click())

}

}

這里記錄一個遇到的問題:輸入中文的時候,由于鍵盤上沒有中文,所以要用replaceText而不是typeText,否則會報錯誤i.e. current IME does not understand how to translate the string into key events). As a workaround, you can use replaceText action to set the text directly in the EditText field.

單頁面測試使用Espresso,多頁面測試使用 UI Automator

3.UI Automator

5dfcdb23e101

測試錄屏.gif

參考官方文檔

在 Android 應用模塊的 build.gradle 文件中,您必須設置對 UI Automator 庫的依賴項引用

dependencies {

...

androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0'

}

示例代碼

private const val PACKAGE_NAME = "club.guozengjie.jetpack"

private const val LAUNCH_TIMEOUT = 5000L

@RunWith(AndroidJUnit4::class)

@SdkSuppress(minSdkVersion = 18)

class UIAutomatorTest {

private lateinit var device: UiDevice

@Before

fun startMainActivityFromHomeScreen() {

device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())

device.pressHome()

// Wait for launcher

val launcherPackage: String = device.launcherPackageName

assertThat(launcherPackage, notNullValue())

device.wait(

Until.hasObject(By.pkg(launcherPackage).depth(0)),

LAUNCH_TIMEOUT

)

// Launch the app

val context = ApplicationProvider.getApplicationContext()

val intent = context.packageManager.getLaunchIntentForPackage(

PACKAGE_NAME

)?.apply {

// Clear out any previous instances

addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)

}

context.startActivity(intent)

// Wait for the app to appear

device.wait(

Until.hasObject(By.pkg(PACKAGE_NAME).depth(0)),

LAUNCH_TIMEOUT

)

}

@Test

fun aaa() {

// Type text and then press the button.

device.findObject(

By.res(

PACKAGE_NAME,

"et"

)

).text = "文川雪"

device.findObject(

By.res(

PACKAGE_NAME,

"btn"

)

).click()

device.waitForIdle()

device.findObject(By.res(PACKAGE_NAME, "tv")).click()

}

}

Airtest

Airtest是一款由網易研發并開源的自動化測試框架,官網

官網有詳細的文檔,這里就不記錄了。只想對Airtest說一個字:牛。強烈推薦

SoloPi

SoloPi是一個無線化、非侵入式的Android自動化工具,公測版擁有錄制回放、性能測試、一機多控三項主要功能,能為測試開發人員節省寶貴時間。

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

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

相關文章

如何重構“箭頭型”代碼

本文主要起因是,一次在微博上和朋友關于嵌套好幾層的if-else語句的代碼重構的討論(微博原文),在微博上大家有各式各樣的問題和想法。按道理來說這些都是編程的基本功,似乎不太值得寫一篇文章,不過我覺得很多…

Django博客--4.開發博客文章詳情頁

文章目錄0.思路引導1.設計文章詳情頁的 URL2.獲取文章的URL3.編寫 detail 視圖函數4.編寫詳情頁模板5.更改主頁中跳轉詳情頁的地址鏈接6.模板繼承--抽取base.html7.模板繼承--修改 index.html使其繼承base.html8.模板繼承--修改detail.html使其繼承base.html9.結果展示0.思路引…

10、并發容器,ConcurrentHashMap

Java 提供了不同層面的線程安全支持。在傳統集合框架內部,除了 Hashtable 等同步容器,還提供了所謂的同步包裝器(Synchronized Wrapper),我們可以調用 Collections 工具類提供的包裝方法,來獲取一個同步的包…

程序員的本質

Computers are useless. They can only give you answers. – Picasso計算機沒有什么作用。他們只能告訴你答案。——畢加索很多人(包括我岳母)認為計算機變得如此智能,所以在不久的未來將不再需要程序員。另外一些人認為程序員是天才&#x…

模式-視圖-控制器模式2.0

1 MVC的實現   1.1 分析應用問題,對系統進行分離   分析應用問題,分離出系統的內核功能、對功能的控制輸入、系統的輸出行為三大部分。設計模型部件使其封裝內核數據和計算功能,提供訪問顯示數據的操作,提供控制內部行為的操作…

總體設計的原理

1 模塊化 2 抽象 3 逐步求精 4 信息隱藏和局部化 5 模塊獨立

android 手動回收對象,Android Studio Studio回收列表中的JSON對象

我想在recyclerview中顯示一些JSON對象,并且希望它們在日期之后排序,我該如何實現?下面是下載從JSON URL的數據的方法:Android Studio Studio回收列表中的JSON對象public void downloadFromSkistar(){try{URL url new URL("…

剖析管理所有大數據組件的可視化利器:Hue

歡迎關注大數據和人工智能技術文章發布的微信公眾號:清研學堂,在這里你可以學到夜白(作者筆名)精心整理的筆記,讓我們每天進步一點點,讓優秀成為一種習慣! 日常的大數據使用都是在服務器命令行中…

Django博客--5.讓博客支持 Markdown 語法和代碼高亮

文章目錄0.前言1.安裝 Python Markdown2.在 detail 視圖中解析 Markdown3.safe 標簽4.代碼高亮5.效果展示0.前言 Markdown 是一種 HTML 文本標記語言,只要遵循它約定的語法格式,Markdown 的解析工具就能夠把 Markdown 文檔轉換為標準的 HTML 文檔&#…

耦合

模塊的獨立性很重要,因為有效的模塊化(即具有獨立的模塊)的軟件比較容易開發出來。 獨立的模塊比較容易測試和維護。 模塊的獨立程度可以由兩個定性標準度量,這兩個標準分別稱為內聚和耦合。 耦合 耦合是對一個軟件結構內不同模塊之間互連程度的度量。…

成為更優秀的開發人員:第二步-知道你的核心競爭力

編者按:原文作者羅布沃林(Rob Walling)從事Web應用開發10年之久,擔任過業內顧問、自由開發人員和全球最大的信用卡預付公司City of Pasadena的開發經理。現居住于加州中部城市弗雷斯諾(Fresno)。關注并指導…

android 字體間間隔,TextView設置行間距、字體間距

一、設置行間距1、設置行間距:android:lineSpacingExtra,取值范圍:正數、負數和0,正數表示增加相應的大小,負數表示減少相應的大小,0表示無變化2、設置行間距的倍數:android:lineSpacingMultipl…

破解mysql數據庫的密碼

發現的1小問題 語句打錯以后應該退出本語句,再繼續打新語句.也可以打\c,退出本語句. 如何破解數據庫的密碼: 1:通過任務管理器或者服務管理,關掉mysqld(服務進程) 2:通過命令行特殊參數開啟mysqld Mysqld --skip-grant-tables 3:此時,mysqld服務進程已經打開,并且,不需要權限檢…

Diango博客--6.Markdown 文章自動生成目錄

文章目錄0.思路引導1.在文中插入目錄2.在頁面的任何地方插入目錄3.美化標題的錨點 URL0.思路引導 Markdown 在解析內容的同時還可以自動提取整個內容的目錄結構,本文內容將從以下幾個方面展開: 1)在文中插入目錄; 2)在…

Java中對象和引用的理解

2019獨角獸企業重金招聘Python工程師標準>>> 偶然想起Java中對象和引用的基本概念,為了加深下對此的理解和認識,特地整理一下相關的知識點,通過具體實例從兩者的概念和區別兩方面去更形象的認識理解,再去記憶。12一、對…

android怎樣封裝,如何封裝屬于自己的博客網站安卓APP 源碼家園

說實話我今天在寫這個文章的時候是我使用易語言(E4A\易安卓)的第一天,我也是易小白,但是的確可以用!我為什么寫這個文章呢?因為之前我也想封裝自己的網站,然后去網上找的在線封裝生成APP,果然能封裝好了&am…

程序員常犯的5個非技術性錯誤

一個好的軟件開發人員需要培養兩種技能:技術技能和非技術技能。不幸的是一些開發者只注重技術的部分,以致養成一些陋習,下面是最常犯的5個非技術性錯誤: 0. 缺乏自律 Jim Rohn曾經說過:自律是目標和成果之間的橋梁。我…

Redis進階實踐之二十 Redis的配置文件使用詳解

一、引言   寫完上一篇有關redis使用lua腳本的文章,就有意結束Redis這個系列的文章了,當然了,這里的結束只是我這個系列的結束,但是要學的東西還有很多。但是,好多天過去了,總是感覺好像還缺點什么…

web流程設計器 工作流的 整合視頻教程 activiti畫圖 SSM和獨立部署

本視頻為activiti工作流的web流程設計器整合視頻教程整合Acitiviti在線流程設計器(Activiti-Modeler 5.21.0 官方流程設計器)本視頻共講了兩種整合方式1. 流程設計器和其它工作流項目分開部署的方式2. 流程設計器和SSM框架項目整合在一起的方式視頻大小 1.13 GB ~【…

Diango博客--7.自動生成文章摘要

文章目錄0.思路引導1.方法一:覆寫 save 方法2.方法二:使用 truncatechars 模板過濾器0.思路引導 博客文章的模型有一個 excerpt 字段,這個字段用于存儲文章的摘要。 若在 django admin 后臺手動為文章輸入摘要,每次手動輸入摘要…