軟件測(cè)試專家工具包3移動(dòng)端

UI Automator

UI Automator提供了一組API來(lái)構(gòu)建基于交互UI的測(cè)試。API允許你執(zhí)行操作,如打開設(shè)置菜單,非常適合黑盒自動(dòng)化測(cè)試,在測(cè)試代碼不依賴于應(yīng)用的內(nèi)部實(shí)現(xiàn)

uiautomatorviewer提供了一個(gè)方便的圖形用戶界面進(jìn)行掃描和分析在Android設(shè)備上當(dāng)前顯示的UI組件。您可以使用此工具來(lái)檢查的布局層次和查看UI組件。

UiDevice類可以訪問(wèn)設(shè)備并進(jìn)行操作。你可以調(diào)用它的方法來(lái)訪問(wèn)設(shè)備屬性,如當(dāng)前的方向或顯示尺寸。該UiDevice類也讓您執(zhí)行操作,例如:旋轉(zhuǎn)設(shè)備;按下D-pad按鈕;按Back、Home、Menu等;打開通知樹欄;當(dāng)前窗口截圖等。

應(yīng)用相關(guān)的API: UiCollection枚舉容器的UI元素以計(jì)數(shù),或通過(guò)文字(或?qū)傩缘?針定位子元素; UIObject表示是在設(shè)備上可見(jiàn)的UI元素; UiScrollable?:為可滾動(dòng)UI容器提供查找支持; UiSelector?:查詢一個(gè)或者多個(gè)UI元素; Configurator: 設(shè)置參數(shù)。

圖片.png

示例:更改語(yǔ)言

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from uiautomator import device as d

d.screen.on()
d.press.home()
d(text=u"設(shè)置").click()
d(text=u"其他高級(jí)設(shè)置").click()
d(text=u"語(yǔ)言和輸入法").click()
d(text=u"中文 (簡(jiǎn)體)").click()
d(text=u"English").click()

https://github.com/xiaocong/uiautomator

Appium

Appium是一個(gè)移動(dòng)端的自動(dòng)化框架,可用于測(cè)試原生應(yīng)用,移動(dòng)網(wǎng)頁(yè)應(yīng)用和混合型應(yīng)用,且是跨平臺(tái)的??捎糜贗OS和Android以及firefox的操作系統(tǒng)。原生應(yīng)用是指用android或ios的sdk編寫的應(yīng)用,移動(dòng)網(wǎng)頁(yè)應(yīng)用是指網(wǎng)頁(yè)應(yīng)用,類似于ios中safari應(yīng)用或者Chrome應(yīng)用或者類瀏覽器的應(yīng)用?;旌蠎?yīng)用是指一種包裹webview的應(yīng)用,原生應(yīng)用網(wǎng)頁(yè)內(nèi)容交互性的應(yīng)用??缙脚_(tái),是當(dāng)今比較流行的開源測(cè)試工具。

配置比uiautomator復(fù)雜,需要指定被測(cè)應(yīng)用。

圖片.png
圖片.png

示例:python代碼操作計(jì)算器

#-*-coding: utf-8 -*-
#coding=utf-8
from appium import webdriver
desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '4.4.4'
desired_caps['deviceName'] = 'baf59937'
desired_caps["unicodeKeyboard"]="True"  
desired_caps["resetKeyboard"]="True"  
desired_caps['appPackage'] = 'com.miui.calculator'  
desired_caps['appActivity'] = '.cal.CalculatorActivity'  
driver = webdriver.Remote('http://localhost:4723/wd/hub',desired_caps)  

driver.find_element_by_name("1").click()
driver.find_element_by_name("5").click()
driver.find_element_by_id("btn_plus").click()
driver.find_element_by_name("6").click()
driver.find_element_by_id("btn_equal").click()
driver.quit()
圖片.png

Eggplant

使用VNC server之類的網(wǎng)關(guān)。 支持iOS, Android,Windows Phone, BlackBerry,是基于圖像識(shí)別的測(cè)試工具。腳本:SenseTalk。不受坐標(biāo)限制。

腳本跨OS、不會(huì)修改應(yīng)用,能完全控制設(shè)備。

商業(yè)軟件 http://www.testplant.com/eggplant/testing-tools/

流行的軟件測(cè)試工具介紹
流行的軟件測(cè)試工具介紹

adb

adb用于獲取Android日志,android設(shè)備的日志存儲(chǔ)在設(shè)備的循環(huán)內(nèi)存緩沖區(qū)中。adb在android SDK的platform-tools目錄。首先在系統(tǒng)設(shè)置 - >開發(fā)人員設(shè)置中打開USB調(diào)試。

圖片.png

然后使用USB連接線將手機(jī)連接到計(jì)算機(jī)。運(yùn)行adb devices獲取連接的設(shè)備列表。

圖片.png

如果要將整個(gè)日志保存到文件而不進(jìn)行過(guò)濾,請(qǐng)使用命令“adb logcat> logs.txt“。


圖片.png

運(yùn)行命令“adb logcat | findstr Exception“僅顯示例外情況。Linux使用“adb logcat | grep Exception“。


圖片.png

或者,您可以從Google Play安裝logcat查看器(如Catlog)查看logcat條目。

圖片.png

CPU Monitor Advanced Lite

來(lái)自Google Play,用于監(jiān)控CPU,可以保存歷史記錄,并以圖形直觀展示,但是大陸的應(yīng)用市場(chǎng)貌似搜索不到。

通常使用替代:CPU Monitor(豌豆莢)、CPU-Z等。

流行的軟件測(cè)試工具介紹
流行的軟件測(cè)試工具介紹
流行的軟件測(cè)試工具介紹
流行的軟件測(cè)試工具介紹

TestObject

TestObject是擁有成百上千真實(shí)設(shè)備的測(cè)試平臺(tái),可以直接通過(guò)瀏覽器訪問(wèn)。上載APP然后可以查看執(zhí)行情況,支持Robotium, Espresso和Appium。

通常用于安卓機(jī)型的測(cè)試。

商業(yè)軟件:https://testobject.com/

有幾個(gè)類似的提供云測(cè)試服務(wù)的公司:

云測(cè)匯:https://www.yuncehui.cn/ 專注于性能測(cè)試

Testin: 即云測(cè),http://testin.cn/ 支持Robotium、淘寶Athrun框架

易測(cè)云:支持Robotium、Athrun、Guerrilla等開源測(cè)試框架,并使用基于控件識(shí)別的、東軟自主研發(fā)的測(cè)試工具Radar。http://www.yiceyun.com/

以上幾家沒(méi)有TestObject強(qiáng)大,但是有中國(guó)特色的選擇之一。

流行的軟件測(cè)試工具介紹
流行的軟件測(cè)試工具介紹

Scan

IOS命令行工具:

圖片.png

ZAPTEST

用于測(cè)試跨平臺(tái)應(yīng)用程序的軟件測(cè)試自動(dòng)化解決方案。ZAPTEST允許在任何現(xiàn)代操作系統(tǒng),移動(dòng)設(shè)備或移動(dòng)設(shè)備上測(cè)試任何基于GUI的軟件。包括iOS,Android,WinMo,Blackberry,Windows,Mac和Linux,并支持Agile和CI(DevOps)開發(fā)的測(cè)試。 社區(qū)版本是免費(fèi)的,允許您測(cè)試網(wǎng)絡(luò),新的Windows應(yīng)用程序或移動(dòng)應(yīng)用程序。

圖片.png
圖片.png
圖片.png

Traceview

很好的性能分析的工具。它可以通過(guò)圖形化的方式讓我們了解我們要跟蹤的程序的性能,并且能具體到method。

記錄過(guò)程中每個(gè)API的耗時(shí)及調(diào)用次數(shù),出現(xiàn)卡頓時(shí),可通過(guò)top排序等手段分析是哪些API引起的。

圖片.png

https://developer.android.com/studio/profile/traceview

Memory Profiler

Android Profiler 中的一個(gè)組件,可幫助您識(shí)別導(dǎo)致應(yīng)用卡頓、凍結(jié)甚至崩潰的內(nèi)存泄漏和流失。 它顯示一個(gè)應(yīng)用內(nèi)存使用量的實(shí)時(shí)圖表,讓您可以捕獲堆轉(zhuǎn)儲(chǔ)、強(qiáng)制執(zhí)行垃圾回收以及跟蹤內(nèi)存分配。

要打開 Memory Profiler,請(qǐng)按以下步驟操作:

點(diǎn)擊 View > Tool Windows > Android Profiler(也可以點(diǎn)擊工具欄中的 Android Profiler )。
從 Android Profiler 工具欄中選擇您想要分析的設(shè)備和應(yīng)用進(jìn)程。 如果您通過(guò) USB 連接了某個(gè)設(shè)備但該設(shè)備未在設(shè)備列表中列出,請(qǐng)確保您已啟用 USB 調(diào)試。
點(diǎn)擊 **MEMORY **時(shí)間線中的任意位置可打開 Memory Profiler。

或者,您可以在命令行中使用 dumpsys 檢查您的應(yīng)用內(nèi)存,同時(shí)查看 logcat 中的 GC Event。

https://developer.android.com/studio/profile/memory-profiler

圖片.png

Systrace

Systrace的功能包括跟蹤系統(tǒng)的I/O操作、內(nèi)核工作隊(duì)列、CPU負(fù)載以及Android各個(gè)子系統(tǒng)的運(yùn)行狀況等。

它能展示API的執(zhí)行時(shí)序、耗時(shí)及各線程狀態(tài),出現(xiàn)卡頓時(shí)可分析API調(diào)用邏輯是否合理及是否出現(xiàn)主線程阻塞。

圖片.png

https://github.com/catapult-project/catapult/tree/master/systrace

AndroidJUnitRunner

AndroidJUnitRunner類是JUnit測(cè)試運(yùn)行器,可以讓你在Android設(shè)備上執(zhí)行JUnit3或JUnit4中風(fēng)格的測(cè)試類,兼容Espresso和UI Automator測(cè)試框架。測(cè)試運(yùn)行器加載測(cè)試包和應(yīng)用,運(yùn)行測(cè)試并報(bào)告測(cè)試結(jié)果。該類取代 InstrumentationTestRunner類(僅支持JUnit 3)。

這個(gè)運(yùn)行器的主要特點(diǎn):

  • JUnit支持

  • 獲得Instrumentation信息

  • 測(cè)試篩選

  • 測(cè)試分片

要求的Android2.2(API 8)或更高。

AndroidJunitRunner通過(guò)InstrumentationRegistry提供了訪問(wèn)instrumentation的API。

  • InstrumentationRegistry.getInstrumentation()返回當(dāng)前正在運(yùn)行的Instrumentation

  • InstrumentationRegistry.getContext()返回此Instrumentation軟件包的上下文。

  • InstrumentationRegistry.getTargetContext()返回目標(biāo)應(yīng)用的應(yīng)用上下文。

  • InstrumentationRegistry.getArguments()返回傳遞給此Instrumentation的參數(shù)Bundle。當(dāng)你要訪問(wèn)命令行參數(shù)時(shí)非常有用。

測(cè)試運(yùn)行器兼容JUnit3和JUnit4的(最高JUnit4.10)測(cè)試。在同一個(gè)包混淆JUnit 3和和JUnit4測(cè)試代碼可能會(huì)導(dǎo)致不可預(yù)測(cè)的結(jié)果。instrumented JUnit 4測(cè)試類在設(shè)備或仿真器上運(yùn)行,必須在前面加上@RunWith(AndroidJUnit4.class)注釋。

比如測(cè)試CalculatorActivity類中的加操作:

import android.support.test.runner.AndroidJUnit4;
import android.support.test.runner.AndroidJUnitRunner;
import android.test.ActivityInstrumentationTestCase2;

@RunWith(AndroidJUnit4.class)
public class CalculatorInstrumentationTest
        extends ActivityInstrumentationTestCase2<CalculatorActivity> {
        
    @Before
    public void setUp() throws Exception {
        super.setUp();
        
        // Injecting the Instrumentation instance is required
        // for your test to run with AndroidJUnitRunner.
        injectInstrumentation(InstrumentationRegistry.getInstrumentation());
        mActivity = getActivity();
    }
    
    @Test
    public void typeOperandsAndPerformAddOperation() {
        // Call the CalculatorActivity add() method and pass in some operand values, then
        // check that the expected value is returned.
    }
    
    @After
    public void tearDown() throws Exception {
        super.tearDown();
    }
}

InstrumentationRegistry類可以訪問(wèn)測(cè)試運(yùn)行的信息。該類包括Instrumentation對(duì)象,目標(biāo)應(yīng)用上下文對(duì)象,測(cè)試應(yīng)用上下文對(duì)象及傳遞到測(cè)試的命令行參數(shù)。

JUnit 4.x的測(cè)試可以使用annotation來(lái)配置測(cè)試運(yùn)行,并支持Androidannotation:

@RequiresDevice:物理設(shè)備上運(yùn)行。

@SdkSupress:限定最低SDK版本。例如@SDKSupress(minSdkVersion=18)。
@SmallTest,@MediumTest和@LargeTest:測(cè)試分級(jí)。

單個(gè)test suite可以分片,同一Instrumentation的同一分片可以作為一個(gè)組。每個(gè)片都有索引號(hào)。當(dāng)運(yùn)行測(cè)試,使用-e numShards選項(xiàng)指定片數(shù)和-e shardIndex選項(xiàng)來(lái)指定要運(yùn)行的片。

例如分成10個(gè)碎片,僅執(zhí)行第二片測(cè)試,請(qǐng)使用以下命令:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

Espresso

Espresso提供了一組API來(lái)構(gòu)建UI測(cè)試來(lái)測(cè)試用戶流程。這些API讓你寫簡(jiǎn)潔和可靠運(yùn)行的自動(dòng)化UI測(cè)試。Espresso非常適合白盒自動(dòng)測(cè)試,測(cè)試代碼利用了被測(cè)應(yīng)用的代碼細(xì)節(jié)。

Espresso的主要特性:

  • 視圖匹配(View matching): 靈活的API用于查看和適配目標(biāo)應(yīng)用。

  • Action API:一套擴(kuò)展的action API自動(dòng)化UI交互。

  • UI線程同步(UI thread synchronization)以提高測(cè)試的可靠性。

要求Android2.2(API 8)或更高。

Espresso.onView()方法可以訪問(wèn)目標(biāo)應(yīng)用程序的UI組件并與之交互。該方法接受一個(gè)Matcher參數(shù),搜索視圖層來(lái)定位視圖實(shí)例。定位方法可以基于類名、內(nèi)容描述、R.id、顯示的文本。比如

onView(withId(R.id.my_button));

如果搜索成功,onView()方法返回對(duì)應(yīng)view的引用,可執(zhí)行用戶操作和斷言。

AdapterView由子view動(dòng)態(tài)生成。如果目標(biāo)視圖在AdapterView(ListView或GridView)中,onView()方法可能不起作用,因?yàn)榭赡苤患虞d了一部分,Espresso.onData()則可以。

ViewActions可以執(zhí)行視圖點(diǎn)擊(View clicks),滑動(dòng)(Swipes),按鍵或者按鈕(Key and button press)、文本輸入(Typing text)、打開鏈接(Opening a link)。

// Type text into an EditText view, then close the soft keyboard
onView(withId(R.id.editTextUserInput))
    .perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());
// Press the button to submit the text change
onView(withId(R.id.changeTextBt)).perform(click());

由于時(shí)間問(wèn)題,在Android設(shè)備上測(cè)試隨機(jī)失敗。之前一般通過(guò)sleep和超時(shí)處理解決。Espresso測(cè)試框架處理Instrumentation和UI線程之間的同步,很好地解決了這些問(wèn)題。

API參考:developer.android.com/reference/android/support/test/package-summary.html
測(cè)試參考:http://developer.android.com/training/testing/ui-testing/espresso-testing.html

robotium

Android用戶場(chǎng)景測(cè)試,在Espresso出來(lái)直接比較流行,現(xiàn)在有弱化的趨勢(shì)。

https://github.com/RobotiumTech/robotium

Genymotion

高效的安卓模擬器 http://www.genymotion.net/

圖片.png

Robolectric

開源。使用shadow objects運(yùn)行測(cè)試于普通的工作站/服務(wù)器JVM,它并不依賴于Android提供的測(cè)試功能,無(wú)須模擬器、設(shè)備,效率高。無(wú)須dexing(編譯成Dalvik VM使用的格式),打包,部署和運(yùn)行的過(guò)程。

是安卓單元測(cè)試的首選工具。

網(wǎng)址:pivotal.github.com/robolectric

Monkey

Monkey是Android中的命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢(shì)輸入等),實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試。Monkey測(cè)試是一種為了測(cè)試軟件的穩(wěn)定性、健壯性的快速有效的方法。

https://developer.android.com/studio/test/monkey

Android Lint

Android Studio 提供一個(gè)名為 Lint 的代碼掃描工具,可幫助您發(fā)現(xiàn)并糾正代碼結(jié)構(gòu)質(zhì)量的問(wèn)題,而無(wú)需實(shí)際執(zhí)行該應(yīng)用,也不必編寫測(cè)試用例。該工具會(huì)報(bào)告其檢測(cè)到的每個(gè)問(wèn)題并提供該問(wèn)題的描述消息和嚴(yán)重級(jí)別,以便您可以快速確定需要優(yōu)先進(jìn)行哪些關(guān)鍵改進(jìn)。此外,您可以調(diào)低問(wèn)題的嚴(yán)重級(jí)別,忽略與項(xiàng)目無(wú)關(guān)的問(wèn)題,也可以調(diào)高嚴(yán)重級(jí)別,以突出特定問(wèn)題。

Lint 工具可檢查您的 Android 項(xiàng)目源文件是否包含潛在錯(cuò)誤,以及在正確性、安全性、性能、易用性、便利性和國(guó)際化方面是否需要優(yōu)化改進(jìn)。在使用 Android Studio 時(shí),配置的 Lint 和 IDE 檢查會(huì)在您每次構(gòu)建應(yīng)用時(shí)運(yùn)行。不過(guò),您可以手動(dòng)運(yùn)行檢查或從命令行運(yùn)行 Lint。

圖片.png

https://developer.android.com/studio/write/lint?hl=zh-cn#commandline

兼容性測(cè)試套件 (CTS)

兼容性測(cè)試套件 (CTS) 是一個(gè)免費(fèi)的商業(yè)級(jí)測(cè)試套件CTS 代表兼容性的“機(jī)制”。

CTS 在桌面設(shè)備上運(yùn)行,并直接在連接的設(shè)備或模擬器上執(zhí)行測(cè)試用例。CTS 是一套單元測(cè)試,旨在集成到工程師構(gòu)建設(shè)備的日常工作流程(例如通過(guò)連續(xù)構(gòu)建系統(tǒng))中。其目的是盡早發(fā)現(xiàn)不兼容性,并確保軟件在整個(gè)開發(fā)過(guò)程中保持兼容性。

CTS 是一個(gè)自動(dòng)化測(cè)試工具,其中包括兩個(gè)主要軟件組件:

CTS tradefed 自動(dòng)化測(cè)試框架會(huì)在桌面設(shè)備上運(yùn)行,并管理測(cè)試執(zhí)行情況。

單獨(dú)的測(cè)試用例會(huì)在被測(cè)設(shè)備 (DUT) 上執(zhí)行。測(cè)試用例采用 Java 語(yǔ)言編寫為 JUnit 測(cè)試,并打包為 Android .apk 文件,以在實(shí)際目標(biāo)設(shè)備上運(yùn)行。

兼容性測(cè)試套件驗(yàn)證程序(CTS 驗(yàn)證程序)是對(duì) CTS(可在此處下載)的補(bǔ)充。CTS 驗(yàn)證程序?yàn)闊o(wú)法在沒(méi)有手動(dòng)輸入(例如音頻質(zhì)量、加速度計(jì)等)的固定設(shè)備上進(jìn)行測(cè)試的 API 和功能提供測(cè)試。

CTS 驗(yàn)證程序是一款手動(dòng)測(cè)試工具,包含以下軟件組件:

在 DUT 上執(zhí)行并收集結(jié)果的 CTS 驗(yàn)證程序應(yīng)用。

在桌面設(shè)備上執(zhí)行,以便為 CTS 驗(yàn)證程序應(yīng)用中的某些測(cè)試用例提供數(shù)據(jù)或額外控制的可執(zhí)行文件或腳本。

圖片.png

monkey runner

monkeyrunner工具提供了API,使用此API寫出的程序可以在Android代碼之外控制Android設(shè)備和模擬器。通過(guò)monkeyrunner,您可以寫出一個(gè)Python程序去安裝一個(gè)Android應(yīng)用程序或測(cè)試包,運(yùn)行它,向它發(fā)送模擬擊鍵,截取它的用戶界面圖片,并將截圖存儲(chǔ)于工作站上。monkeyrunner工具的主要設(shè)計(jì)目的是用于測(cè)試功能/框架水平上的應(yīng)用程序和設(shè)備,或用于運(yùn)行單元測(cè)試套件,但您當(dāng)然也可以將其用于其它目的。

下面是簡(jiǎn)單的monkeyrunner程序,它連接到設(shè)備,創(chuàng)建MonkeyDevice對(duì)象。 程序使用MonkeyDevice對(duì)象安裝Android應(yīng)用程序包,運(yùn)行activity,并將關(guān)鍵事件發(fā)送到activity。 然后程序截取結(jié)果的屏幕截圖,創(chuàng)建MonkeyImage對(duì)象。 從該對(duì)象,程序輸出包含屏幕截圖的.png文件。

# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()

# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('myproject/bin/MyApplication.apk')

# sets a variable with the package's internal name
package = 'com.example.android.myapplication'

# sets a variable with the name of an Activity in the package
activity = 'com.example.android.myapplication.MainActivity'

# sets the name of the component to start
runComponent = package + '/' + activity

# Runs the component
device.startActivity(component=runComponent)

# Presses the Menu button
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)

# Takes a screenshot
result = device.takeSnapshot()

# Writes the screenshot to a file
result.writeToFile('myproject/shot1.png','png')

DDMS

DDMS 的全稱是DalvikDebug Monitor Service,是 Android 開發(fā)環(huán)境中的Dalvik虛擬機(jī)調(diào)試監(jiān)控服務(wù)。提供測(cè)試設(shè)備截屏、查看特定進(jìn)程正在運(yùn)行的線程以及堆信息、Logcat、廣播狀態(tài)信息、模擬電話呼叫、模擬接收及發(fā)送SMS、虛擬地理坐標(biāo)等服務(wù)。

https://developer.android.com/studio/profile/monitor

openstf

通過(guò)瀏覽器控制管理多臺(tái)安卓設(shè)備。

https://github.com/openstf/stf

參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容