您的位置 首页 > 新农资讯

常用安卓自动化测试框架,安卓自动化测试平台

Android测试概述Android自动化测试是应用程序开发中提高开发效率的一种方式,可以让开发者在短时间内执行所有测试计划并实现各种交互,使代码实现效果更加方便并且可以直观地了解。 Android自动化测试可以分为三种类型:单元测试、UI测试和猴子测试,以及小型、中型和大型测试。

单元测试也称为模块测试,是测试程序模块(软件设计的最小单元)正确性的测试。程序单元是应用程序的最小可测试组件。 Android单元测试基于JUnit,可以分为本地测试和插桩测试。本地测试的项目目录是module-name/src/test/java/。本地测试在本地JVM 上运行,不需要相应的目录来进行仪器测试。该项目是module-name/src./androidTest/java/。该测试涉及Android系统API,因此必须在模拟器或设备上运行,比本地测试耗时更长。

最常用的单元测试框架是JUnit 和Mockito 测试框架。 Mockito 用于运行主要测试代码,并允许您创建特定的测试对象(而不是对象本身)并为测试设置一些特定属性。 UI测试UI测试是测试应用程序内的不同交互是否达到预期的效果。常用的UI 测试框架包括Espresso 和UIAutomator。 UIAutomator是一个接口测试框架,适用于多个已安装应用程序之间的系统范围和跨应用程序功能接口测试,并提供一组API用于构建在用户和系统应用程序之间执行交互的接口测试。 Espresso 是Google 的开源自动化测试框架。相比UIAutomator,它更小,更简洁,有更准确的API,更容易编写测试代码,更容易快速上手。它基于仪器,因此不能跨应用程序。使用Espresso Espresso 具有三个重要的类:Matchers、ViewActions(界面操作)和ViewAssertions(界面决策)。其中,Matcher常用于搜索UI组件并通过匹配条件过滤UI。另一方面,ViewAction用于模拟用户交互界面的行为,ViewAssertion用于验证模拟行为的View的转换和结果。执行顺序为:

依赖关系和配置

导入包后,你就可以在模块的AndroidTest包下开始编写自己的UI自动化测试代码了。测试界面跳转如果你想测试界面跳转,你应该使用Espresso-Intents 库。这是Espresso 的扩展,支持验证和测试中的应用程序发出的大量意图。这与Mockit 类似,但适用于Android Intents。 Espresso-Intents 有两个重要的方法:itending() 和owned()。意图()该方法可用于插装(设置跳转到另一个活动后返回的参数)。原始活动通过调用startActivityForResult() 触发存根测试。 owned() 方法用于检查发送的意图,如果不是指定的意图,则会报告错误。 @Test fun validateIntentSentToPackage() { user.clickOnView(system.getView(R.id.callButton))owned(toPackage('com.android.phone')) } 异步测试Espresso 测试包括执行每个测试操作的能力。是。它是线程安全的。等待当前进程的消息队列上的UI 事件,并且测试操作等待异步任务完成后再运行下一个测试。 Espresso 异步测试需要导入两个包:

异步测试过程创建一个继承自IdlingResource 的新类。 public class SimpleIdlingResourceimplements IdlingResource { private Final String mResourceName //这个计数器值就像一个标记,默认为0 private last AtomicInteger counter=new AtomicInteger(0); public SimpleIdlingResource(String resourceName) { mResourceName=resourceName; Override public String getName() { return mResourceName; } @Override public boolean isIdleNow() { return counter.get() } @Override public void registerIdleTransitionCallback(ResourceCallback resourceCallback) { this.resourceCallback=resourceCallback } //每次启动时异步请求时,计数器值加1 public voidincrement() { counter.getAndIncrement() } //获取网络数据时,计数器值- 1 public void decrement() { int counterVal=counter.decrementAndGet(); //如果此时counter==0,则异步终止完成并执行回调。 if (counterVal==0) { //if (null !=resourcesCallback) { resourceCallback.onTransitionToIdle() } } if (counterVal 0) { //如果小于0,则抛出异常throw new IllegalArgumentException('Counter has has has been损坏!'); } }}创建一个新的管理类来管理上述类。 public class EspressoIdlingResource { private static last String RESOURCE='GLOBAL'; { mCountingIdlingResource.increment(); } public static void decrement() { mCountingIdlingResource.decrement(); } public static IdlingResource getIdlingResource() { return mCountingIdlingResource }} 对于异步任务之前插入代码。 Start: protected void onReqStart(int where) { //EspressoIdlingResource.increment() before async start; }在异步任务完成后插入代码: private void onFinish() { if(!EspressoIdlingResource.getIdlingResource().isIdleNow()){ EspressoIdlingResource在您的测试代码中注册IdlingResource。 @Before public void setUp() throws Exception { //调用Activity中设置的getIdlingresource()方法获取IdlingResource对象idlingresource=ActivityRule.getActivity( ).getIdlingresource(); //注释掉最后一行测试代码(test) Pass) 只会在异步终止后运行: //注册异步监听,只有指定了counter标签,下面的测试代码才会运行。 idlingresource的值为0 Espresso.registerIdlingResources(idlingresource); @Test public void onLoadingFinished() throws Exception { //不需要这段代码//Thread.sleep(5000) //如果idlingResource没有注册,则测试此时,异步过程未完成,报错(测试失败) onView(withId(R.id.text)) .check(matches(withText('success!')) );@ public void release() throws Exception { //测试结束后取消注册并释放资源Espresso.unregisterIdlingResources(idlingresource); 我在ViewAction() 中使用typeText() 进行测试时遇到了问题。如果直接调用typeText(),则该对象必须是editText。不继承editText并使用typeText()的自定义视图在使用前需要supportInputMethods()。否则会报如下错误: onView(allOf) () supportInputMethods(), isDescendantOfA(withId(R.id.test)))).perform(typeText('111111')) typeText() 最好调用closeSoftKeyboard () 调用后。否则点击时会显示一些视图。如果阻塞的话会报错。

综上所述,自动化测试的目的不仅是解放双手,还可以帮助开发人员提前捕获某些小错误,这样他们就不必等到测试阶段才报告错误,从而提高开发效率。

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023