我正在使用Robotium在我的单元测试项目上执行一些简单的UI任务。我注意到Solo明显变慢了,我不知道为什么。我是新手。
此代码使用Robotium完成:
solo.clearEditText(editTextLogin);
solo.clearEditText(editTextSenha);
solo.enterText(editTextLogin, "tecnico@mail.com");
solo.enterText(editTextSenha, "12345");
solo.clickOnButton(0);
使用本机代码完成:
m_Activity.runOnUiThread(new Runnable() {
@Override
public void run() {
editTextLogin.setText("tecnico@mail.com");
editTextSenha.setText("12345");
loginButton.performClick();
}
});
与第二个相比,使用Robotium执行的代码要慢得多。我可以很容易地发现Robotium实际上是机械地完成所有的东西,而本机代码只是设置对象的值,这可以解释差异,但我最好的解释是,何时使用Robotium,它应该是什么样的,可以实现真正的性能提升的方式。
我为任何错误道歉。
答案 0 :(得分:3)
您应该下载robotium的源代码并通过它进行调试。你会发现在幕后还有很多事情要发生。例如,这里有一个clickonbutton的小片段:
public <T extends TextView> void clickOn(Class<T> viewClass, String nameRegex) {
final Pattern pattern = Pattern.compile(nameRegex);
waiter.waitForText(nameRegex, 0, TIMEOUT, true, true);
ArrayList<T> views = viewFetcher.getCurrentViews(viewClass);
views = RobotiumUtils.removeInvisibleViews(views);
T viewToClick = null;
for(T view : views){
if(pattern.matcher(view.getText().toString()).matches()){
viewToClick = view;
if(viewToClick.isShown())
break;
}
}
if (viewToClick != null) {
clickOnScreen(viewToClick);
} else if (scroller.scroll(Scroller.DOWN)){
clickOn(viewClass, nameRegex);
}else {
for (T view : views) {
Log.d(LOG_TAG, nameRegex + " not found. Have found: " + view.getText());
}
Assert.assertTrue(viewClass.getSimpleName() + " with the text: " + nameRegex + " is not found!", false);
}
}
答案 1 :(得分:0)
它引起了我的注意,你非常担心测试性能。
Android UI测试方法非常复杂,并且为您提供了难以理解的测试用例。 Robotium并不专注于性能,它专注于使开发人员可以访问API,使他们的测试更容易编写和阅读。
我不会尝试确定哪种方法最适合进行测试。我会在Robotium中做到这一点,因为它更容易编码,然后在必要时移植到本机。
在我个人的情况下,我不关心Robotium使我的测试变慢。如果这是我为避免使用本机UI测试工具而必须付出的代价,我对此感到很满意。
如果测试花费的时间过长,您可以随时在CI中运行。
答案 2 :(得分:0)
尝试使用不同的方法作为我的使用经验
solo.clickOnButton("String")
和solo.clickOnButton(index)
也有很大不同。
因为第一个似乎做了很多搜索。