您的位置:首页 > 移动开发 > Android开发

android 的 Testing Support Library 测试支持包(库)

2015-10-12 21:50 597 查看
Testing Support Library  测试支持包(库)这个库提供了一系列的api来快速的创建和运行测试对于你的app,包括jUnit 4 和用户(UI)的测试,创建可以使用android studio IDE 或者通过命令行。【两种方式:(1)IDE   (2)命令行】测试包支持库对安卓的sdk是有效的,++++》该库在sdk上是有效的。android测试支持库包括下面的自动化测试工具:1)AndroidJUnitRunner  即为 JUnit 4 组合测试 ===========》单元测试 https://developer.android.com/tools/testing-support-library/index.html#AndroidJUnitRunner 2)Espresso  UI测试框架,是给一个app的UI测试 ===========》白盒测试 https://developer.android.com/tools/testing-support-library/index.html#Espresso 3)UI Automator ,UI测试框架 ,适用于 跨系统 和 安装的应用程序 的跨应用程序功能的用户界面测试。  =======》黑盒测试(界面测试) https://developer.android.com/tools/testing-support-library/index.html#UIAutomator 1、AndroidJUnitRunnerAndroidJUnitRunner类是一个JUnit的测试运行(类)。可以让JUnit 3 或者JUnit 4 android系统的设备上测试。包括使用Espresso和UI Automator测试框架。这个框架下载“测试包” 和 app 到(手机或模拟器)设备上,进行测试并且返回测试结果。并且这个库代替了InstrumentationTestRunner类(它只是支持JUnit 3 的测试)。测试的关键特色:1)JUnit support (JUnit支持)2)Access to instrumentation information (访问仪表器的信息)3)Test filtering  (测试过滤)4)Test sharding  (测试分片) Android 2.2 (API level 8) 以上支持。(课件很老的的手机都是可以用来进行测试的)1)JUnit support 适合JUnit 3 和JUnit 4的测试,可是不允许混合他们在同一个包中(否则将会出现问题),如果想使用JUnit 4 来进行测试,我们将会使用前缀声明才可以:@RunWith(AndroidJUnit4.class)代码如下:测试CalculatorActivity 类的运行(这个文件应该在创建工程的时候在test文件夹下有这个文件)
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();
}
}
//这个和ios的单眼测试都似乎是一样的类似。
2)Access to instrumentation information 访问仪表气信息可以使用InstrumentationRegistry 类来访问关联你的测试运行,该类包括Instrumentation对象,目标app的上下文对象和命令行参数在测试中。当你写测试通过UIautomator框架或者当你写测试(这个测试用来instrumentation或上下文对象)的时候,这些数据是有用的。3)Test filtering 测试过滤在JUnit 4的时候需要注释声明,这样最大程度减少了模板文件和控制代码在测试中。为了能够标准的被JUnit 4支持,这个测试运行同样支持android指定的注释。包括:@RequiresDevice:指定设备只能够在物理设备上运行,不能够在模拟器上运行。@SdkSupress:使能够在低于给定的adk的水平上运行。 可以使用注释@SDKSupress(minSdkVersion=18).@SmallTest, @MediumTest, and @LargeTest:设置多上时间可以运行,应该是运行时间的间隔的设置。4)Test shading 测试分片测试支持将一个单个测试分成为很多个片段,所以你能够容易的运行测试在同样的分片中在一个组中,在一个相同的仪表器的实例中。每一个分片都是被一个所以数字确定。运行测试的时候,使用 -e numShards 选项去指定分片的数字去创建和 -e shardIndex 选项指定哪一个分片去运行。示例:将一个测试分成为合适的10个片段只是运行组中的第二个片段的命令:
adb shell am instrument -w -e numShards 10 -e shardIndex 2
测试的API https://developer.android.com/reference/android/support/test/package-summary.html 总结一下:相关的信息,可以知道这里存在分片,以及过滤,单元测试的意图明显。2、Espresso  这个框架提供了一系列的API 去创建UI tests去测试用户流在一个app中。这些API能够使我们写测试更加的精确和可靠。Espresso适合白盒自动测试,在通过测试代码利用实现代码的细节来实现的。特色:1)【界面匹配】灵活的API 对于界面和适配在目标apps,2)【动作API】一系列拓展的动作api去自动化UI交互3)【UI进程异步】 UI进程异步提高测试的可靠性1)界面匹配Espresso.onView() 这个方法来访问UI组件在目标app中并且和它进行交互;这个方法访问了一个匹配器参数和查找接卖弄的额层次去分配一个响应界面的实例,这个界面实例满足一些给定的标准,通过制定标准能够改善查找。(1)界面类的名字(2)界面内容的描述(3)view上面的R.id(4)view的text显示(文字内容)示例:目标按钮有一个id值是my_button,你制定匹配器如下:onView(withId(R.id.my_button)); //这样表示一个匹配器(对象)如果查找成功,这个方法将会返回一个关系让你执行用于动作和测试断言在目标界面上。(在目标上简历一个连接关系使用户能够执行动作和测试断言)1.2)适配匹配一个适配界面布局,布局是动态填充孩子界面在运行时。(即为:界面是动态布局的)如果目标界面在一个布局的子类从适配界面上(例如:ListView or GridView),onView()这个方法可能会出现错误,以为只有子系列的布局界面才可能下载当前的界面的层次。(也就是onview这个方法在AdapterView可能会出现错误)替代的方法:Espresso.onData()方法访问目标借面单额元素,这个方法返回一个关系,这个关系让你执行用户的动作和测试断言通过元素在一个AdapterView上。2、动作APIs你可以测试我app通过执行一些用户交互在app的用户界面,可以很容易的自动执行这些动作在你的测试通过使用ViewActions的API,执行如下UI接卖弄的交互:View clicks 界面点击Swipes  重击Key and button presses 关键和按钮的按压Typing text   写入文本Opening a link  打开一个链接例如:模拟输入一个字符串值,和按下一个按钮提交值,你可以写一些自动测试的脚本像这些,ViewInteraction.perform()和 DataInteraction.perform() 方法带有一个或者多个viewAction参数 并且运行给出的动作。
// Type text into an EditText view, then close the soft keyboardonView(withId(R.id.editTextUserInput)).perform(typeText(STRING_TO_BE_TYPED), closeSoftKeyboard());// Press the button to submit the text changeonView(withId(R.id.changeTextBt)).perform(click());
3)、UI线程异步在android设备上可能会随机失败因为时间的问题,在执行Expresso之前,我们会在工作的周围插入一些有效的睡眠时间,或者时间过期在一个测试中去增加代码去保持再一次尝试失败的运行动作(失败的动作通过代码设置为不断地运行到执行成功)。Espresso框架处理异步在instrumentation和UI 线程,移除需求对于以前的时间工作环境和确保你的测试动作和断言的运行更加的可靠。(在ios测试中我们也经常会增加等待时间,多线程异步则需要不断地尝试访问来执行。)这个测试问题涉及到测试的片状,相关api的链接: https://developer.android.com/reference/android/support/test/package-summary.html https://developer.android.com/training/testing/ui-testing/espresso-testing.html 3、UI Automator UI自动化UI自动化测试框架提供了一系列的APIs 去创建UI测试,执行交互在用户的apps上和系统的apps上。 UI自动化框架运行你执行操作像:打开设置菜单或app的启动咋一个测试设备上。UI自动化测试框架非常适合黑盒自动化测试,在测试代码不依赖目标app的内部实现的细节的情况下。特色:1)【自动化界面(检测)器】一个界面观察器检测布局的层次。2)【访问设备的状态】一个api检索到设备的状态信息和执行操作在目标设备上。3)【UI自动化的APIs】APIs 支持夸app UI测试。***要求android系统是4.3(API level 18)****1)UI 自动化(检测)器uiautomatorviewer工具提供一个便利的图形界面去窥视和分析当前UI组件展示在android设备上。你可以使用这个工具来检测布局的层次和UI组件的界面的属性(这些都是可见的在设备的前端)。这个信息让你创建更加有细密文理的测试通过是UI Automator,eg:通过创建UI selector 匹配一个指定的可见的属性。2)访问设备的状态uiautomator提供了UiDevice类访问和执行操作在设备上(目标app在运行的设备上),你可以调用它的方式来访问设备的属性,eg:当前的方向和显示的大小。还有以下的动作:Change the device rotation (改变设备的)Press a D-pad button (按下一个D-pad按钮)Press the Back, Home, or Menu buttons(按下回车,返回等等键)Open the notification shade(打开通知)Take a screenshot of the current window(当前的界面截图)eg:模拟home按钮,按下操作方法为:UiDevice.pressHome()3)UI Automator APIs(UI 自动化的api)UI Automator APIs 允许你对目标app写更加健壮都 测试不需要知道内部实现的细节。你能够使用这些APIs去捕获和操做UI组件在不同的apps之间。UiCollection:给计数的目标列举容器的UI 元素,或 (目标)执行的子元素通过他们的可见的text或者内容的描述属性。UiObject:代表一个在设备上可见的UI元素。UiScrollable: 提供在一个UI容器上支持查找items。UiSelector:代表在设备上查询一个或者更多个在目标UI 元素。Configurator:允许设置重要的参数给运行的UI Automator 测试。示例:显示你怎么写一个测试脚本,提出默认app的启动在设备上。
// Initialize UiDevice instancemDevice = UiDevice.getInstance(getInstrumentation());// Perform a short press on the HOME buttonmDevice().pressHome();// Bring up the default launcher by searching for// a UI component that matches the content-description for the launcher buttonUiObject allAppsButton = mDevice.findObject(new UiSelector().description("Apps"));// Perform a click on the button to bring up the launcherallAppsButton.clickAndWaitForNewWindow();
API 、Testing UI for Multiple Apps链接: https://developer.android.com/reference/android/support/test/package-summary.html https://developer.android.com/training/testing/ui-testing/uiautomator-testing.html 4、Testing Support Library Setup测试支持库的建立  android测试支持库包包括罪行的版本的android支持仓库,你可以获得想一个额外下载通过android SDK manager。1、开启android SDK Manager2、在SDK Manager 窗口,滚动到包列表的最后,找到额外的文件夹,如果需要,扩展区显示它的内容。3、选择android Support Repository 选项4、点击 Install packages 按钮(上面的这个过程基本上时我们开发android的时候,同样需要这样的操作。)下载之后,库文件将会被分配到下面的子目录中:<sdk>/extras/android/m2repositoryandroid 测试支持库类被分配通过 android.support.test 包。使用android测试支持库在你的gradle项目,怎家依赖在你的build.gradle文件中。
dependencies {androidTestCompile 'com.android.support.test:runner:0.4'// Set this dependency to use JUnit 4 rulesandroidTestCompile 'com.android.support.test:rules:0.4'// Set this dependency to build and run Espresso testsandroidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'// Set this dependency to build and run UI Automator testsandroidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'}去设置AndroidJUnitRunner当成一个默认的测试仪表气运行对象在你的gradle项目中,执行这个依赖在你的build.gradle文件。android {defaultConfig {testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"}}
强烈推荐使用android Testing support library和android Studio IDE库,android studio 提供支持测试发展的能力。(1)灵活的基于gradle创建系统支持依赖管理对于你的测试代码(2)单一的项目结构包括你的单元和仪表器测试代码和你的app源代码一起。(3)支持不住和运行测试在虚拟或者物理设备,来自于命令行或者图形的用户界面。总结:测试框架的建立:1、单元测试的androidJunitRunner2、白盒测试 Espresso3、黑河测试 UI Autumator   上面相关的内容的应用需要再一次查阅上面的文章,通过相关的链接查看android的官方文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: