Google Espresso 또는 Robotium [닫힘]


115

자동화 된 UI 테스트 도구를 사용해야하는데 Robotium과 Google Espresso를 사용하는 것이 혼동됩니다.

둘의 주요 차이점은 무엇입니까? 하나에는 있지만 다른 하나에는없는 기능이 있습니까?


19
나는 사람들이 코멘트를 쓰지 않고 반대 투표를하는 것을 솔직히 싫어한다. 반대 투표를 한 사람이 왜 그렇게하는지에 대한 의견을 작성 해주시면 감사하겠습니다.
Androidme

8
질문이 매우 도움이된다고 생각합니다. 많은 개발자들이 스스로 이것을 요구하고 있습니다. 차이점은 무엇입니까? 문제는 당신이 요구하는 방식이라고 생각합니다. 어떤 것을 사용할 것인지 물어 보는 것이 아니라 더 자세히 물어봐야합니다.
tasomaniac

8
이것이 제가 답을 원했던 정확한 질문입니다. 게시 주셔서 감사합니다
리처드 봉

8
나는 이것이 StackOverflow에 따라 주제를 벗어났다는 사실을 싫어합니다. 모든 라이브러리와 도구를 비교해야한다면 의견 기반 답변이 많을 수 있지만 두 리소스의 차이점을 묻는 질문이 매우 유용합니다.
David Argyle Thacker 2015 년

답변:


175

전체 공개 : 저는 Espresso의 저자 중 한 명입니다.

Espresso와 Robotium은 모두 계측 기반 프레임 워크입니다. 즉, Android 계측 을 사용 하여 테스트중인 활동을 검사하고 상호 작용합니다.

Google에서는 재고 계측보다 편리했기 때문에 Robotium을 사용하기 시작했습니다 (Robotium 개발자가 그렇게 만드는 것을 싫어함). 그러나 개발자가 신뢰할 수있는 테스트를 쉽게 작성할 수있는 프레임 워크에 대한 우리의 요구를 충족시키지 못했습니다 .

Robotium보다 Espresso의 주요 발전 :

  1. 동기화. 기본적으로 계측 테스트 논리는 UI 작업 (UI 스레드에서 처리됨)과 다른 (계측) 스레드에서 실행됩니다. 테스트 작업을 UI 업데이트와 동기화하지 않으면 테스트가 불안정 해지기 쉽습니다. 즉, 타이밍 문제로 인해 무작위로 실패합니다. 대부분의 테스트 작성자는이 사실을 무시하고 일부는 절전 / 재시도 메커니즘을 추가하고 더 정교한 스레드 안전 코드를 구현하는 사람은 더 적습니다. 이들 중 어느 것도 이상적이지 않습니다. Espresso는 테스트 작업 및 어설 션을 테스트중인 애플리케이션의 UI와 원활하게 동기화하여 스레드 안전성을 관리합니다. Robotium은이 문제를 수면 / 재시도 메커니즘으로 해결하려고합니다. 이는 신뢰할 수 없을뿐만 아니라 테스트가 필요 이상으로 느리게 실행되도록합니다.

  2. API. Espresso에는 사용자 지정이 가능한 작고 잘 정의되고 예측 가능한 API가 있습니다. 표준 hamcrest 매처를 사용하여 UI 요소를 찾는 방법을 프레임 워크에 지시 한 다음 대상 요소에서 작업을 수행하거나 어설 션을 확인하도록 지시합니다. 이를 테스트 작성자가 30 개 이상의 클릭 방법 중에서 선택해야하는 Robotium의 API와 대조 할 수 있습니다. 또한 Robotium은 getCurrentActivity (어쨌든 current가 무엇을 의미합니까?) 및 getView와 같은 위험한 메서드를 노출하여 주 스레드 외부의 개체에서 작업 할 수 있습니다 (위의 요점 참조).

  3. 실패 정보를 지 웁니다. Espresso는 오류 발생시 풍부한 디버깅 정보를 제공하기 위해 노력합니다. 또한 고유 한 오류 처리기를 사용하여 Espresso에서 오류를 처리하는 방식을 사용자 지정할 수 있습니다. 나는 한동안 그것을 시도하지 않았지만 이전 버전의 Robotium은 일관성없는 오류 처리로 어려움을 겪었습니다 (예 : clickOnView 메서드는 SecurityExceptions를 삼킬 것입니다).

이전 답변과 달리 Espresso는 사용자 수가 많은 모든 API 버전에서 지원됩니다 ( http://developer.android.com/about/dashboards/index.html 참조 ). 일부 이전 버전에서 작동하지만 테스트는 리소스 낭비입니다. 테스트에 대해 말하면 ... Espresso는 포괄적 인 테스트 모음 (95 % 이상 적용)과 Google에서 개발 한 대부분의 Android 애플리케이션을 통해 모든 변경 사항에 대해 테스트됩니다.


안녕하세요 ! 답변 해 주셔서 감사합니다. Espresso는 동일한 테스트 케이스에서 여러 애플리케이션을 테스트 할 수있는 가능성을 제공합니까? 다른 애플리케이션 (동일한 sharedUserId를 공유하는 다른 앱)에서 활동을 호출 한 다음 결과를 검색하는 애플리케이션을 테스트해야합니다. Robotium으로는 할 수 없지만 Espresso에서는 가능할까요? :-)
nbe_42 2014 년

1
아니요-Espresso를 사용하여 프로세스 외부에서 UI와 상호 작용할 수 없습니다. 이는 계측 프레임 워크의 제한 사항입니다.
ValeraZakharov

1
@ValeraZakharov :: 히이 ... !! 말씀하신대로 에스프레소는 UI 스레드 동기화를 처리하므로 절전 모드를 설정할 필요가 없습니다. 하지만 제 경우에는 테스트 케이스를 거의 작성하지 않았고 모든 테스트 케이스가 로컬 컴퓨터에서 작동하고 있습니다 (시작으로 TestSuite 당 하나의 절전 모드 사용). 하지만 로컬 / 서버 젠킨스로 실행할 때 거의 99 %의 테스트 케이스가 실패합니다. 젠킨스 에뮬레이터에서 모든 애니메이션을 비활성화했습니다. 대부분의 경우 AppNotIdleException이 발생합니다. 근본 원인을 파악할 수 없습니다. 저 좀 도와 주 시겠어요?
Naresh Gunda

@ Radu 해냈어. 귀하의 의견은 무효이며 적절한 설명이 없으면 관심을 끌기위한 어리석은 시도처럼 보입니다.
Rakib

9

Espresso는 Robotium보다 훨씬 빠르지 만 일부 SDK 버전에서만 작동합니다.

따라서 모든 장치에서 작동하는 테스트를 원한다면 Roboitum으로 이동하십시오. 그렇지 않다면 에스프레소를 마시고, 당신은 여전히 ​​얼마 동안 베타 테스터가 될 것임을 잊지 마십시오.


upvote에 날이 태그의 동의어를 만드는 데 도움이 될 것이다 ..;)
Snicolas

2
위 링크가 변경되었습니다. 다음은 새로운 링크입니다. google.github.io/android-testing-support-library/docs/espresso/…
Evin1_
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.