0

我正在使用adb測試命令一次在多個設備上運行測試。我的僞外殼腳本如下所示:Android咖啡控制檯日誌Build.Serial onFail

for each device 
    adb -s ${device} shell am instrument -w -e ${classOrPkg} ${androidTestPackage}${test_name} ${main_package}.${flavor}.test/android.support.test.runner.AndroidJUnitRunner & 

問題是當測試失敗時,我沒有關於發生故障的設備的信息。我可以使用LogCat,但它需要爲每個設備查找logcat。而且,System.out.println()不起作用。

我想,現在一個可能的解決方案是通過擴展TestWatcher類並覆蓋這樣的失敗()方法,

public class TestWatcherRule extends TestWatcher { 
    @Override 
    protected void failed(Throwable e, Description description) { 
     Description d = Description.createTestDescription(e.getClass(), "<<<< Failed on Device: " + Build.SERIAL); 
     super.failed(e, d); 
    } 
} 

實現:

@Rule 
public TestWatcher testWatcher = new TestWatcherRule(); 
assertThat("My message", true, is(false)); 

我不能讓設備序列尚未在終端上。

我的預期產出將是這樣的:

com.myapp.mobile.tests.BenefitCardDBTest: 
Error in addDeleteCard(com.myapp.mobile.tests.BenefitCardDBTest): 
**<<<< Failed on Device: HTC10xwrtxe** 
android.support.test.espresso.NoMatchingViewException: No views in hierarchy found matching: with id: com.myapp.mobile.qa:id/drawer_layout 

回答

1

比方說,這是我的樣品Espresso測試:

@RunWith(AndroidJUnit4.class) 
@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class SettingsActivityTest { 

    @Rule 
    public ActivityTestRule<SettingsActivity> mRule = new ActivityTestRule<>(SettingsActivity.class); 

    @Test 
    public void checkIfToolbarIsProperlyDisplayed() throws InterruptedException { 
     onView(withText(R.string.action_settings)).check(matches(withParent(withId(R.id.toolbar)))); 
     onView(withId(R.id.toolbar)).check(matches(isDisplayed())); 
    } 
} 

在多個設備上運行它,我使用的是GradleconnectedAndroidTest其延伸connectedCheck,所以它:

將並行運行在所有連接的設備上。

來源: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Android-tasks

只要去使用終端或控制檯去你的項目的目錄,然後使用:

./gradlew connectedAndroidTest

這是非常有用的,因爲它會生成HTML測試輸出,它允許您檢查哪個設備失敗的方法。

它應該是這樣的:

*emphasized text*

希望這將有助於

+0

謝謝你的答覆。我忘記提及,我知道通過使用gradle任務以這種方式運行測試。唯一的問題是測試不能立即運行,即gradle builds,安裝apks,運行測試並卸載apk。我喜歡adb命令,因爲它會立即運行測試。你知道一種跳過構建部分的方法,只需使用gradle connectedCheck命令運行測試? –

+0

我不太瞭解Gradle,但是嘗試使用找到哪些命令是「connectedAndroidTest」或「connectedCheck」。也許'./gradlew test'會跳過建設 – piotrek1543