谷歌自动化测试框架图片(chrome 自动化测试工具)
Android测试概述
Android自动化测试是应用开发中提升开发效率的一种方式,它可以在短时间内跑完所有的测试方案以及实现各种交互,从而让开发者更加方便和直观的知道代码的实现效果。
Android自动化测试可以分为单元测试、UI测试、Monkey测试三种,同时也分小中大三种测试。
单元测试
单元测试又称为模块测试,是针对程序模块来进行正确性检验的测试工作,程序单元是应用的蕞小可测试部件。
Android中的单元测试是基于JUnit,可分为本地测试和Instrumented 测试。
本地测试对应的项目目录是module-name/src/test/java/,本地测试是运行在本地JVM上的,不需要模拟器或者设备的支持Instrumented 测试在项目中对应的目录是module-name/src/androidTest/java/,这个测试包含了Android系统的api,所以要在模拟器或者设备上运行,速度比本地测试慢。
单元测试蕞常用的框架就是JUnit跟Mockito组合的测试框架,其中JUnit用来跑主要的测试代码,Mockito可以创建特定测试对象并设置一些特定的属性供测试使用。
UI测试
UI测试是测试应用中的各种交互是否达到了实现的效果。常用的UI测试框架有Espresso和UIAutomator。
UIAutomator是一个界面测试框架,适用于整个系统上以及多个已安装应用间的跨应用功能界面测试,它提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试。
Espresso是Google的开源自动化测试框架。相对于UIAutomator,它的特点是规模更小、更简洁,API更加精确,编写测试代码简单,容易快速上手。因为他是基于Instrumentation的,所以不能跨App。
Espresso的使用
Espresso有三个重要的类:分别是Matchers、ViewAction、ViewAssertions。
其中Matchers是常常是通过匹配条件来找UI组件或过滤UI,而ViewAction是来模拟用户操作界面的行为,ViewAssertions对模拟行为操作的View进行变换和结果验证。
执行顺序如下:
依赖和配置
在导入好包之后就可以module的AndroidTest包下开始编写自己的UI自动化测试代码了。
测试界面跳转
测试界面跳转时需要用的Espresso-Intents库,它是Espresso的扩展程序,支持对被测应用发出的intent进行验证和打桩。
它与Mockit 类似,但适用于Android Intent,Espresso-Intents有两个比较重要的方法itending和intended。
intending 该方法可以插桩,原来的Activity调用startActivityForResult触发桩测试。
intended 方法是对发送出去的intent进行确认,如果不是给出的intent则会报错。
@Test fun validateIntentSentToPackage {
user.clickOnView)
intended)
}
异步测试
Espresso测试有个很强大之处就是它在多个测试操作中是线程安全的,它会等待当前进程的消息队列中的UI事件,并且在任何一个测试操作中会等待其中的异步任务结束才会执行下一个测试。
Espresso异步测试是要导入以下两个包:
异步测试的流程
新建一个类继承IdlingResource:
public class SimpleIdlingResource implements IdlingResource {
private final String mResourceName;
//这个counter值就像一个标记,默认为0
private final AtomicInteger counter = new AtomicInteger;
private volatile ResourceCallback resourceCallback;
public SimpleIdlingResource {
mResourceName = resourceName;
}
@Override
public String getName {
return mResourceName;
}
@Override
public boolean isIdleNow {
return counter.get == 0;
}
@Override
public void registerIdleTransitionCallback {
this.resourceCallback = resourceCallback;
}
//每当我们开始异步请求,把counter值+1
public void increment {
counter.getAndIncrement;
}
//当我们获取到网络数据后,counter值-1;
public void decrement {
int counterVal = counter.decrementAndGet;
//如果这时counter == 0,说明异步结束,执行回调。
if {
//
if {
resourceCallback.onTransitionToIdle;
}
}
if {
//如果小于0,抛出异常
throw new IllegalArgumentException;
}
}
}
新建一个管理类去管理上述类:
public class EspressoIdlingResource {
private static final String RESOURCE = "GLOBAL";
private static SimpleIdlingResource mCountingIdlingResource =
new SimpleIdlingResource;
public static void increment {
mCountingIdlingResource.increment;
}
public static void decrement {
mCountingIdlingResource.decrement;
}
public static IdlingResource getIdlingResource {
return mCountingIdlingResource;
}
}
将管理类插入到异步代码中,在异步任务开始前插入代码:
protected void onReqStart {
//异步开始前
EspressoIdlingResource.increment;
}
异步任务结束后插入代码:
private void onFinish {
if.isIdleNow){
EspressoIdlingResource.decrement;
}
}
在测试代码中注册IdlingRecource:
@Before
public void setUp throws Exception {
//调用Activity中我们已经设置好的getIdlingresource方法,获取Idlingresource对象
idlingresource = activityRule.getActivity.getIdlingresource;
//去掉下行注释,只有异步结束后,才进行接下来的测试代码
//注册异步监听,当该idlingresource中的counter标记值为0时才进行接下来的测试代码
Espresso.registerIdlingResources;
@Test
public void onLoadingFinished throws Exception {
// 不再需要这样的代码
// Thread.sleep;
// 未注册idlingResource时,立即进行test,此时异步并未结束,报错
onView)
.check));
@After
public void release throws Exception {
//我们在测试结束后取消注册,释放资源
Espresso.unregisterIdlingResources;
测试过程中遇到的问题
ViewAction中的typeText使用。
如果直接调用typeText,那么它的使用对象就一定是editText,如果是自定义的未继承editText的view使用typeText时,要在使用前supportsInputMethods,否则会报错误:
onView, isDescendantOfA))).perform)
在调用完typeText后蕞好调用一下 closeSoftKeyboard,否则会出现某些view在点击时被阻挡而报错。
总结
自动化测试的目的不仅仅是解放双手,它也可以让开发者提前知道某些小Bug,不用到了测试阶段才被提出来,这样就提升了开发的效率。
海外精品引流脚本–最强海外引流
唯一TG:https://t.me/Facebook181818
更多海外引流脚本方案
如果你需要脚本演示、部署咨询或海外获客方案,可以通过下面入口继续查看。
