2011-08-15 2 views
4

단위 테스트 프로젝트에서 간단한 UI 작업을 수행하기 위해 Robotium을 사용하고 있습니다. 나는 솔로가 현저하게 느린 것을 알아 차렸고, 나는 이유를 모른다. 나는 그것에 익숙하지 않다.Android 기본 코드와 비교하여 간단한 UI 작업을 수행 할 때 Robotium이 느린 이유는 무엇입니까?

이 코드는 Robotium로 수행됩니다

solo.clearEditText(editTextLogin); 
    solo.clearEditText(editTextSenha); 
    solo.enterText(editTextLogin, "[email protected]"); 
    solo.enterText(editTextSenha, "12345"); 
    solo.clickOnButton(0); 

이 네이티브 코드로 수행됩니다 두 번째에 비해 Robotium 수행

m_Activity.runOnUiThread(new Runnable() { 

     @Override 
     public void run() { 
      editTextLogin.setText("[email protected]"); 
      editTextSenha.setText("12345"); 
      loginButton.performClick(); 
     } 
    }); 

코드는 훨씬 느립니다. Robotium은 실제 기계적으로 모든 작업을 수행하는 것으로 쉽게 알 수 있습니다. 네이티브 코드는 객체에 값을 설정하는 것으로 차이점을 설명 할 수 있지만, Robotium을 사용해야 할 때 가장 좋은 방법은 Robotium을 사용해야 할 때입니다. 실제 성능 향상을 달성 할 수있는 방법.

실수를해서 죄송합니다.

+0

자바 코드가 원시 코드가 아닙니다! –

답변

0

테스트 성능이 매우 걱정됩니다.

Android UI 테스트 방법은 매우 복잡하며 따를 수없는 테스트 케이스가 있습니다. Robotium은 성능에 중점을 두지 않으며, 개발자가 테스트를 쉽게 작성하고 읽을 수있게 해주는 API를 만드는 데 중점을 둡니다.

테스트를 수행하는 데 가장 좋은 방법이 무엇인지 판단하지 않겠습니다. Robotium에서는 코드 작성이 쉬우 며 필요에 따라 나중에 네이티브로 이식하기 때문에이 작업을 수행합니다.

개인적인 경우 Robotium이 내 테스트를 느리게하는 것에 신경을 쓰지 않습니다. 그것이 네이티브 UI 테스트 도구를 사용하지 않기 위해 지불해야하는 가격이라면, 나는 그걸로 멋지다.

테스트가 너무 오래 걸리면 항상 CI에서 실행할 수 있습니다.

+1

지금 으로서는 제 테스트는 그다지 시간이 걸리지는 않지만 오랜 기간 실행 한 결과입니다. 왜냐하면 필자는 여전히 안드로이드 테스팅의 기본 단계에 있기 때문에 편의/성능 등급에서 우리의 요구에 가장 잘 맞는 프레임 워크를 연구하고 있습니다. 내 첫 인상은 Robotium의 제안 중 하나가 더 빨라 졌기 때문에 뭔가 놓친 것 같았습니다. Robotium은 UI 테스팅 API의 일부 불명료 함을 남겨두고 테스트의 일부 유형을 수행 할 때 내 요구 사항에 완벽하게 부합합니다. 귀하의 의견을 보내 주셔서 감사합니다. – kaneda

+0

@Marcase. CI에서만 실행하는 것은 좋지 않습니다. 가능한 한 개발주기 초기에 테스트 실패가 감지되어야합니다. 코드를 병합하기 전에 실행해야합니다. – rfsk2010

3

robotium의 소스 코드를 다운로드하고 디버그해야합니다. 후드 아래에서 더 많은 일이 진행되고 있음을 알 수 있습니다. 예를 들어 다음은 클릭 버튼에 대한 간단한 스 니펫입니다.

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); 
    } 
} 
+0

주목할만한 pyoussef 주셔서 감사합니다! 실제로 Robotion은 더 많은 작업을하고 있습니다. 한 번 소스 코드를 다운로드했습니다. – kaneda

0

solo.clickOnButton("String")solo.clickOnButton(index)의 사용 경험이 다른 경우 다른 방법을 시도해보십시오. 처음으로 많은 검색을하는 것처럼 보입니다.

관련 문제