0

Android 앱에서 테스트 인프라를 설정하기 위해 노력하고 있습니다. Android Studio, gradle, Espresso, MonkeyRunner, 에뮬레이터 및 실제 기기를 사용하고 있습니다. 나는 gradlew connectedAndroidTest을 사용하여 AndroidTest를 실행합니다.AndroidTest가 실행되는 동안 다른 프로세스를 만드는 방법은 무엇입니까?

적절한 테스트 픽스처를 설정하는 데 테스트가 시작되기 전에 시작된 백그라운드 프로세스가 필요합니다. 테스트가 완료되면 분해됩니다. gradle 등으로 할 수있는 방법이 있습니까?

특히 제가 지금하고있는 일은 에스프레소 테스트 중에 MonkeyRunner와 함께 화면 캡처를하는 것입니다. 테스트 중간에 MonkeyRunner를 돌리는 것은 시간이 많이 걸리므로 데몬으로 실행하면 테스트 속도를 높일 수 있습니다. (나는 모든 것이 다소 혼란 스럽다고 생각하지만 궁극적으로는 화면 캡처 비교를위한 효율적인 방법을 찾고있다. 자바 라이브러리에 기본 방식으로 빌드 된 것이라면 그렇게 할 수있다). 이 경우 MonkeyRunner 프로세스가 스핀 업하여 장치에 연결됩니다. 그런 다음 AndroidTest 프로세스가 회전하여 MonkeyRunner 프로세스에 스냅 샷을 찍어 참조와 비교하도록 신호를 보내는 테스트를 실행 한 다음 AndroidTest는 다음 테스트를 계속 수행합니다.

다른 프로세스 패턴이 가능하게하는 다른 것들은 외부 통신이거나 테스트 픽스처에 필요할 수있는 다른 것들입니다.

+0

왜 젠킨스를 사용하지 않으시겠습니까 ?? 나는 그것을 잠시 사용 해왔고 가상 머신을 부팅하고 거기에서 테스트를 실행하는 설정을했습니다. –

+0

안드로이드 에뮬레이터를 사용하고 있습니까? 젠킨스 (Jenkins)로 전환하면 젠킨스 (Jenkins)는 계속 VM을 사용하여 에뮬레이터를 회전시키기가 어려워집니다. 임의의 VM은 문제가되지 않습니다. – TinyTheBrontosaurus

+0

제 경험상 에뮬레이터는 어디서나 회전하기가 어렵습니다 !! 그래서 나는 항상 테스트 장치를 연결하여 젠킨스가 밤중에 움직 이도록합니다. –

답변

0

Java를 사용하여 이미 테스트를 작성중인 경우 MonkeyRunner를 사용하여 스크린 샷을 찍을 이유가 없습니다. takeScreenshot()을 사용해야합니다.

final UiDevice device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()); 
final String filename = "/path/to/screenshot.png"; 
device.takeScreenshot(new File(filename)); 
+0

에스프레소 테스트가 장치 또는 호스트 컴퓨터에서 실행되고 있습니까? 그것이 전 (前者)이라면, 이것이 어떻게 작동 할 지 모르겠습니다. (지금 테스트 할 예정입니다.) – TinyTheBrontosaurus

+0

"Android 2.3.3 (API 레벨 10) 이상을 실행하는 기기에서 에스프레소 테스트를 실행할 수 있습니다 ..." –

+0

확인. 그래서 에스프레소 테스트가 목표에서 실행되고 있다면 어떻게 대답에서 코드를 호출 할 수 있습니까? 호스트에서 저장하기 위해 호스트에서 호출해야하는 것처럼 보입니다 (다시 테스트합니다) – TinyTheBrontosaurus