UI Automator
UI Automator提供了一组API来构建基于交互UI的测试。API允许你执行操作,如打开设置菜单,非常适合黑盒自动化测试,在测试代码不依赖于应用的内部实现
uiautomatorviewer提供了一个方便的图形用户界面进行扫描和分析在Android设备上当前显示的UI组件。您可以使用此工具来检查的布局层次和查看UI组件。
UiDevice类可以访问设备并进行操作。你可以调用它的方法来访问设备属性,如当前的方向或显示尺寸。该UiDevice类也让您执行操作,例如:旋转设备;按下D-pad按钮;按Back、Home、Menu等;打开通知树栏;当前窗口截图等。
应用相关的API: UiCollection枚举容器的UI元素以计数,或通过文字(或属性等)针定位子元素; UIObject表示是在设备上可见的UI元素; UiScrollable?:为可滚动UI容器提供查找支持; UiSelector?:查询一个或者多个UI元素; Configurator: 设置参数。
示例:更改语言
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from uiautomator import device as d
d.screen.on()
d.press.home()
d(text=u"设置").click()
d(text=u"其他高级设置").click()
d(text=u"语言和输入法").click()
d(text=u"中文 (简体)").click()
d(text=u"English").click()
https://github.com/xiaocong/uiautomator
Appium
Appium是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。可用于IOS和Android以及firefox的操作系统。原生应用是指用android或ios的sdk编写的应用,移动网页应用是指网页应用,类似于ios中safari应用或者Chrome应用或者类浏览器的应用。混合应用是指一种包裹webview的应用,原生应用网页内容交互性的应用。跨平台,是当今比较流行的开源测试工具。
配置比uiautomator复杂,需要指定被测应用。
示例:python代码操作计算器
#-*-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()
Eggplant
使用VNC server之类的网关。 支持iOS, Android,Windows Phone, BlackBerry,是基于图像识别的测试工具。脚本:SenseTalk。不受坐标限制。
脚本跨OS、不会修改应用,能完全控制设备。
商业软件 http://www.testplant.com/eggplant/testing-tools/
adb
adb用于获取Android日志,android设备的日志存储在设备的循环内存缓冲区中。adb在android SDK的platform-tools目录。首先在系统设置 - >开发人员设置中打开USB调试。
然后使用USB连接线将手机连接到计算机。运行adb devices获取连接的设备列表。
如果要将整个日志保存到文件而不进行过滤,请使用命令“adb logcat> logs.txt“。
运行命令“adb logcat | findstr Exception“仅显示例外情况。Linux使用“adb logcat | grep Exception“。
或者,您可以从Google Play安装logcat查看器(如Catlog)查看logcat条目。
CPU Monitor Advanced Lite
来自Google Play,用于监控CPU,可以保存历史记录,并以图形直观展示,但是大陆的应用市场貌似搜索不到。
通常使用替代:CPU Monitor(豌豆荚)、CPU-Z等。
TestObject
TestObject是拥有成百上千真实设备的测试平台,可以直接通过浏览器访问。上载APP然后可以查看执行情况,支持Robotium, Espresso和Appium。
通常用于安卓机型的测试。
商业软件:https://testobject.com/
有几个类似的提供云测试服务的公司:
云测汇:https://www.yuncehui.cn/ 专注于性能测试
Testin: 即云测,http://testin.cn/ 支持Robotium、淘宝Athrun框架
易测云:支持Robotium、Athrun、Guerrilla等开源测试框架,并使用基于控件识别的、东软自主研发的测试工具Radar。http://www.yiceyun.com/
以上几家没有TestObject强大,但是有中国特色的选择之一。
Scan
IOS命令行工具:
ZAPTEST
用于测试跨平台应用程序的软件测试自动化解决方案。ZAPTEST允许在任何现代操作系统,移动设备或移动设备上测试任何基于GUI的软件。包括iOS,Android,WinMo,Blackberry,Windows,Mac和Linux,并支持Agile和CI(DevOps)开发的测试。 社区版本是免费的,允许您测试网络,新的Windows应用程序或移动应用程序。
Traceview
很好的性能分析的工具。它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到method。
记录过程中每个API的耗时及调用次数,出现卡顿时,可通过top排序等手段分析是哪些API引起的。
https://developer.android.com/studio/profile/traceview
Memory Profiler
Android Profiler 中的一个组件,可帮助您识别导致应用卡顿、冻结甚至崩溃的内存泄漏和流失。 它显示一个应用内存使用量的实时图表,让您可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。
要打开 Memory Profiler,请按以下步骤操作:
点击 View > Tool Windows > Android Profiler(也可以点击工具栏中的 Android Profiler )。
从 Android Profiler 工具栏中选择您想要分析的设备和应用进程。 如果您通过 USB 连接了某个设备但该设备未在设备列表中列出,请确保您已启用 USB 调试。
点击 **MEMORY **时间线中的任意位置可打开 Memory Profiler。
或者,您可以在命令行中使用 dumpsys 检查您的应用内存,同时查看 logcat 中的 GC Event。
https://developer.android.com/studio/profile/memory-profiler
Systrace
Systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。
它能展示API的执行时序、耗时及各线程状态,出现卡顿时可分析API调用逻辑是否合理及是否出现主线程阻塞。
https://github.com/catapult-project/catapult/tree/master/systrace
AndroidJUnitRunner
AndroidJUnitRunner类是JUnit测试运行器,可以让你在Android设备上执行JUnit3或JUnit4中风格的测试类,兼容Espresso和UI Automator测试框架。测试运行器加载测试包和应用,运行测试并报告测试结果。该类取代 InstrumentationTestRunner类(仅支持JUnit 3)。
这个运行器的主要特点:
-
JUnit支持
-
获得Instrumentation信息
-
测试筛选
-
测试分片
要求的Android2.2(API 8)或更高。
AndroidJunitRunner通过InstrumentationRegistry提供了访问instrumentation的API。
-
InstrumentationRegistry.getInstrumentation()返回当前正在运行的Instrumentation
-
InstrumentationRegistry.getContext()返回此Instrumentation软件包的上下文。
-
InstrumentationRegistry.getTargetContext()返回目标应用的应用上下文。
-
InstrumentationRegistry.getArguments()返回传递给此Instrumentation的参数Bundle。当你要访问命令行参数时非常有用。
测试运行器兼容JUnit3和JUnit4的(最高JUnit4.10)测试。在同一个包混淆JUnit 3和和JUnit4测试代码可能会导致不可预测的结果。instrumented JUnit 4测试类在设备或仿真器上运行,必须在前面加上@RunWith(AndroidJUnit4.class)
注释。
比如测试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类可以访问测试运行的信息。该类包括Instrumentation对象,目标应用上下文对象,测试应用上下文对象及传递到测试的命令行参数。
JUnit 4.x的测试可以使用annotation来配置测试运行,并支持Androidannotation:
@RequiresDevice:物理设备上运行。
@SdkSupress:限定最低SDK版本。例如@SDKSupress(minSdkVersion=18)
。
@SmallTest,@MediumTest和@LargeTest:测试分级。
单个test suite可以分片,同一Instrumentation的同一分片可以作为一个组。每个片都有索引号。当运行测试,使用-e numShards选项指定片数和-e shardIndex选项来指定要运行的片。
例如分成10个碎片,仅执行第二片测试,请使用以下命令:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
Espresso
Espresso提供了一组API来构建UI测试来测试用户流程。这些API让你写简洁和可靠运行的自动化UI测试。Espresso非常适合白盒自动测试,测试代码利用了被测应用的代码细节。
Espresso的主要特性:
-
视图匹配(View matching): 灵活的API用于查看和适配目标应用。
-
Action API:一套扩展的action API自动化UI交互。
-
UI线程同步(UI thread synchronization)以提高测试的可靠性。
要求Android2.2(API 8)或更高。
Espresso.onView()方法可以访问目标应用程序的UI组件并与之交互。该方法接受一个Matcher参数,搜索视图层来定位视图实例。定位方法可以基于类名、内容描述、R.id、显示的文本。比如
onView(withId(R.id.my_button));
如果搜索成功,onView()方法返回对应view的引用,可执行用户操作和断言。
AdapterView由子view动态生成。如果目标视图在AdapterView(ListView或GridView)中,onView()方法可能不起作用,因为可能只加载了一部分,Espresso.onData()则可以。
ViewActions可以执行视图点击(View clicks),滑动(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());
由于时间问题,在Android设备上测试随机失败。之前一般通过sleep和超时处理解决。Espresso测试框架处理Instrumentation和UI线程之间的同步,很好地解决了这些问题。
API参考:developer.android.com/reference/android/support/test/package-summary.html
测试参考:http://developer.android.com/training/testing/ui-testing/espresso-testing.html
robotium
Android用户场景测试,在Espresso出来直接比较流行,现在有弱化的趋势。
https://github.com/RobotiumTech/robotium
Genymotion
高效的安卓模拟器 http://www.genymotion.net/
Robolectric
开源。使用shadow objects运行测试于普通的工作站/服务器JVM,它并不依赖于Android提供的测试功能,无须模拟器、设备,效率高。无须dexing(编译成Dalvik VM使用的格式),打包,部署和运行的过程。
是安卓单元测试的首选工具。
网址:pivotal.github.com/robolectric
Monkey
Monkey是Android中的命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
https://developer.android.com/studio/test/monkey
Android Lint
Android Studio 提供一个名为 Lint 的代码扫描工具,可帮助您发现并纠正代码结构质量的问题,而无需实际执行该应用,也不必编写测试用例。该工具会报告其检测到的每个问题并提供该问题的描述消息和严重级别,以便您可以快速确定需要优先进行哪些关键改进。此外,您可以调低问题的严重级别,忽略与项目无关的问题,也可以调高严重级别,以突出特定问题。
Lint 工具可检查您的 Android 项目源文件是否包含潜在错误,以及在正确性、安全性、性能、易用性、便利性和国际化方面是否需要优化改进。在使用 Android Studio 时,配置的 Lint 和 IDE 检查会在您每次构建应用时运行。不过,您可以手动运行检查或从命令行运行 Lint。
https://developer.android.com/studio/write/lint?hl=zh-cn#commandline
兼容性测试套件 (CTS)
兼容性测试套件 (CTS) 是一个免费的商业级测试套件CTS 代表兼容性的“机制”。
CTS 在桌面设备上运行,并直接在连接的设备或模拟器上执行测试用例。CTS 是一套单元测试,旨在集成到工程师构建设备的日常工作流程(例如通过连续构建系统)中。其目的是尽早发现不兼容性,并确保软件在整个开发过程中保持兼容性。
CTS 是一个自动化测试工具,其中包括两个主要软件组件:
CTS tradefed 自动化测试框架会在桌面设备上运行,并管理测试执行情况。
单独的测试用例会在被测设备 (DUT) 上执行。测试用例采用 Java 语言编写为 JUnit 测试,并打包为 Android .apk 文件,以在实际目标设备上运行。
兼容性测试套件验证程序(CTS 验证程序)是对 CTS(可在此处下载)的补充。CTS 验证程序为无法在没有手动输入(例如音频质量、加速度计等)的固定设备上进行测试的 API 和功能提供测试。
CTS 验证程序是一款手动测试工具,包含以下软件组件:
在 DUT 上执行并收集结果的 CTS 验证程序应用。
在桌面设备上执行,以便为 CTS 验证程序应用中的某些测试用例提供数据或额外控制的可执行文件或脚本。
monkey runner
monkeyrunner工具提供了API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
下面是简单的monkeyrunner程序,它连接到设备,创建MonkeyDevice对象。 程序使用MonkeyDevice对象安装Android应用程序包,运行activity,并将关键事件发送到activity。 然后程序截取结果的屏幕截图,创建MonkeyImage对象。 从该对象,程序输出包含屏幕截图的.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 开发环境中的Dalvik虚拟机调试监控服务。提供测试设备截屏、查看特定进程正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、模拟接收及发送SMS、虚拟地理坐标等服务。
https://developer.android.com/studio/profile/monitor
参考资料
- 本文相关书籍下载
- python测试等IT技术支持qq群: 144081101(后期会录制视频存在该群群文件) 591302926 567351477
- 道家技术-手相手诊看相中医等钉钉群21734177 qq群:391441566 184175668 338228106 看手相、面相、舌相、抽签、体质识别。服务费50元每人次起。请联系钉钉或者微信pythontesting
- 本文最新版本地址
- 本文涉及的python测试开发库 谢谢点赞!
- 接口自动化性能测试线上培训大纲