使用Espresso实现完整覆盖的App功能测试
作者:何梁伟 发布时间:[ 2017/5/16 9:49:29 ] 推荐标签:APP测试 功能测试
不同线程 IdlingResource 的 bug
在进行 UI 测试的时候,有两个主线程需要区分一下,一个是主 App 运行的主线程([main,5,main]),另一个是 UI 测试跑的主线程([Instr: android.support.test.runner.AndroidJUnitRunner,5,main])。我们触发的UI事件都是在 App 主线程里面执行的,如果我们想要在 App 的线程里面做一些操作需要切换到对应的线程操作。如下面的代码:
mActivityTestRule.getActivity().runOnUiThread
(new Runnable() {
@Override
public void run() {
LogUtils.d(TAG, "runOnUiThread..." +
Thread.currentThread());
TaskApi.Companion.getMyTasks(0, 10000, "",
new HSAPICallback
<TaskListResult>() {
public void onRequestSuccess(TaskListResult data,
int httpStatus,
Boolean fromCache) {
super.onRequestSuccess(data, httpStatus, fromCache);
mTasks = data.getDatas();
}
});
}
});
理论上这里进行的异步操作应该和 App 里面执行的异步操作是一样的,可以用 IdlingResource 去守护这样一个后台操作,但是实际使用下来,虽然 IdlingResource 已经接受到对应的异步完成回调,但是并没有回调到被注册的 ResourceCallback。
hasProperty 异常
Espresso 用的是 Hamcrest 的语法来进行的验证,理论上应该支持所有 Hamcrest 的写法,但是当我们在使用 hasProperty 这个方法的时候,会发现下面这样的错误。这主要是由于 Android SDK 里面并没有完整 JDK 的库,我们用到这部分刚好在 Android SDK 没有。
java.lang.NoClassDefFoundError:
Failed resolution of: Ljava/beans/Introspector;
at org.hamcrest.beans.PropertyUtil.propertyDescriptorsFor
(PropertyUtil.java:47)
at org.hamcrest.beans.PropertyUtil.getPropertyDescriptor
(PropertyUtil.java:28)
at org.hamcrest.beans.HasPropertyWithValue.propertyOn
(HasPropertyWithValue.java:94)
at org.hamcrest.beans.HasPropertyWithValue.matchesSafely
(HasPropertyWithValue.java:81)
at org.hamcrest.TypeSafeDiagnosingMatcher.matches(
TypeSafeDiagnosingMatcher.java:55)
at org.hamcrest.core.AllOf.matches(AllOf.java:27)
at org.hamcrest.DiagnosingMatcher.matches
(DiagnosingMatcher.java:12)
at android.support.test.espresso.action.
AdapterDataLoaderAction.
perform(AdapterDataLoaderAction.java:83)
at android.support.test.espresso.ViewInteraction$1.run
(ViewInteraction.java:144)
at java.util.concurrent.Executors$RunnableAdapter.
call(Executors.java:422)
at java.util.concurrent.FutureTask.
run(FutureTask.java:237)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
根据 Android espresso onData error
这篇文章可以找到对应的解决方案,但是实际使用下来效果并不好,主要是 gradle 的 Android 插件在不同的版本里面对于引入 Java Core 的代码处理方式有差别,而且我用的 2.2.3 的版本根本不能用,所以这里的建议绕过不要使用这个方法,我们后是通过自己定义了一个 Match 来解决这个问题的。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南