对于我的CI基础设施,我需要在控制器机器(linux)的两个(或更多)Android手机之间自动部署和运行复杂的测试.
到目前为止,android monkeyrunner与android单元测试相结合并不是一个令人满意的解决方案:
有什么建议吗?
我正在使用Robotium和ActivityInstrumentationTestCase2为Android运行UIAutomation.我有一个包含5个测试的测试套件.有时我的测试随机崩溃,因为测试开始,一旦前一个测试尚未结束.有办法避免这种情况吗?是否有可能在每次测试之前手动添加10秒的延迟以摆脱这个可怕的恼人的bug?
编辑:
public class MyTest<T extends RoboActivity> extends ActivityInstrumentationTestCase2<T>
{
protected Solo solo;
@Override
protected void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
}
@Override
protected void tearDown() throws Exception {
solo.finishOpenedActivities();
try {
solo.finalize();
}
catch (Throwable e) {
Assert.fail(e.getMessage()+ e.toString());
e.printStackTrace();
}
super.tearDown();
}
}
Run Code Online (Sandbox Code Playgroud) 我想用Robotium测试下一件事:在搜索栏中输入一些文字,我这样做,然后点击软键盘'搜索'按钮(android:imeOptions = actionSearch),我没有做到.我尝试使用solo.sendKey(Solo.Enter)但没有成功.我不确定这是否重要,但软键盘根本没有显示 - 我试图以某种方式实现,但也没有成功.
我想编写在模拟器上运行的自动化测试,以验证当网络连接自发断开时我的应用程序行为是否正确。为此,我想编写如下测试:
我已经看到了各种 stackoverflow 答案,这些答案通过建议通过命令行手动禁用主机 PC 的网络连接来解决这个问题。这不能通过仿真器上运行的测试来自动化,因为仿真器无法访问其主机 PC。并且在主机 PC shell 脚本中运行命令将很难尝试与模拟器测试自动同步。
或者,我看到了建议操纵模拟器网络设置的答案,这显然实际上并没有禁用访问,它们只会导致显式连接检查,例如networkInfo.isConnected()
报告断开连接状态。它们仍然允许双向通信。(例如,当禁用模拟器网络访问时,浏览器仍然可以正常运行。)
有没有人能够构建在模拟器上运行的自动化测试,并在测试中根据需要实际打开和关闭网络访问?
我正在使用Robotium对Android应用进行功能测试.我想在调用onDestroy之后测试onResume行为. 这篇文章提示使用Instrumentation,但我无法让它工作.我已经包含以下内容,但是这会因IllegalStateException而失败.是否有可能销毁应用程序并重新启动它?
public class MainActivityFunctionalTest extends ActivityInstrumentationTestCase2<MainActivity> {
private Solo solo;
public MainActivityFunctionalTest() {
super(MainActivity.class);
}
public void testActionList() {
getInstrumentation().callActivityOnDestroy(solo.getCurrentActivity());
...
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
java.lang.IllegalStateException: Must be called from main thread of process at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1373) at android.app.FragmentManagerImpl.dispatchDestroy(FragmentManager.java:1825) at android.app.Activity.performDestroy(Activity.java:5171) at android.app.Instrumentation.callActivityOnDestroy(Instrumentation.java:1109) at nl.handypages.trviewer.test.MainActivityFunctionalTest.testActionList(MainActivityFunctionalTest.java:81) at java.lang.reflect.Method.invokeNative(Native Method) at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:214) at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:199) at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:192) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190) at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175) at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555) at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1584)
Run Code Online (Sandbox Code Playgroud) 我们正在将Robotium与一起android.test.InstrumentationTestRunner
用于测试。虽然如此,我们想用Robotium代替Espresso,但是我们仍然有一些疑问,因为我们有一台装有Jenkins的CI机器。
Espresso使用的是android.support.test.runner.AndroidJUnitRunner
Robotium ,而Robotium使用的是上述第一个,我们希望能够同时使用两个测试框架。可能吗?我们如何在build.gradle
文件中指定呢?我们如何配置我们的jenkins机器以针对不同的测试框架执行不同的任务?
我知道Espresso可以扩展ActivityInstrumentationTestCase2
,因为我们的Robotium测试类也使用从扩展的测试运行程序ActivityInstrumentationTestCase2
,但是我们仍然需要解决仪器测试运行程序的问题。
continuous-integration android robotium jenkins android-espresso
我正在使用Robotium进行Android测试.我有一个功能,如果用户输入编辑文本字段,然后按回车键,他将被带到下一个字段.现在要在Robotium中测试它,我能够在文本字段中插入文本.但我不知道如何模拟Robotium中的回车键.如果有人对此有所了解请告诉我.除了Robotium之外,还有其他更好的测试方法可以告诉我吗?谢谢你的帮助和时间.
我有一个日期选择器字段,我想在其中设置日期(月份,日期和年份的选择器,+和 - 每个字段),但不知道如何在Robotium中执行此操作.我尝试使用solo.setDatePicker(int,int,int,int),但代码抱怨setDatePicker不是solo的有效函数.有谁知道如何做到这一点?谢谢!
我按照以下步骤测试了我的应用.
我收到以下错误..如何解决这个问题..
java.lang.RuntimeException: Exception during suite construction
at android.test.suitebuilder.TestSuiteBuilder$FailedToCreateTests.testSuiteConstructionFailed(TestSuiteBuilder.java:239)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:520)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
Caused by: java.lang.NullPointerException: Method name must not be null.
at java.lang.ClassCache.findMethodByName(ClassCache.java:297)
at java.lang.Class.getMethod(Class.java:985)
at android.test.suitebuilder.TestMethod.getAnnotation(TestMethod.java:60)
at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:39)
at android.test.suitebuilder.annotation.HasMethodAnnotation.apply(HasMethodAnnotation.java:30)
at com.android.internal.util.Predicates$OrPredicate.apply(Predicates.java:106)
at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:42)
at android.test.suitebuilder.annotation.HasAnnotation.apply(HasAnnotation.java:31)
at com.android.internal.util.Predicates$NotPredicate.apply(Predicates.java:122)
at android.test.suitebuilder.TestSuiteBuilder.satisfiesAllPredicates(TestSuiteBuilder.java:254)
at android.test.suitebuilder.TestSuiteBuilder.build(TestSuiteBuilder.java:190)
at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:373)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4218)
at android.app.ActivityThread.access$3000(ActivityThread.java:125)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:123)
at android.app.ActivityThread.main(ActivityThread.java:4627)
at java.lang.reflect.Method.invokeNative(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
at …
Run Code Online (Sandbox Code Playgroud) 我一直在谷歌搜索这个问题几个小时,我很难过.我试图为Android设备编写一个全面的测试套件,我的第一个想法是使用logcat输出验证测试结果.Logcat拥有我需要的操作系统和应用程序的所有事件信息.
使用Robotium或Monkeyrunner,我发现无法动态访问logcat.创建一个外部应用程序来监控logcat是不可能的(很难将事件同步到结果).
有什么想法吗?