0

Я запускаю тест на нескольких устройствах одновременно с помощью команды adb test. Мой сценарий псевдо оболочка выглядит следующим образом:Журнал консоли espresso 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, но он требует поиска логарифма для каждого устройства. А также 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())); 
    } 
} 

Чтобы запустить его на несколько устройств я использую Gradle «s connectedAndroidTest который распространяется на connectedCheck, поэтому он:

будет запускается на всех подключенных устройствах параллельно.

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

Просто зайдите использовать терминал или консоль, чтобы перейти в каталог вашего проекта, а затем использовать:

./gradlew connectedAndroidTest.

Этот метод очень полезен, так как он будет генерировать вывод HTML-теста, который позволяет вам проверить, какой метод отказал.

Это будет выглядеть следующим образом:

*emphasized text*

Надеется, что это поможет

+0

Спасибо за ответ. Я забыл упомянуть, что я знаю, что нужно запускать тесты таким образом, используя задачу градации. Единственная проблема заключается в том, что тесты не запускаются сразу, то есть, строятся градиенты, устанавливают apks, запускают тесты и удаляют apk. Мне нравится команда adb, так как она будет запускать тесты мгновенно. Вы знаете способ пропустить часть сборки и просто запустить тесты с помощью команды gradle connectedCheck? –

+0

Я не знаю, как много Gradle, но попытайтесь найти, какие команды используются 'connectedAndroidTest' или' connectedCheck'. Может быть, './gradlew test' пропустит строительство – piotrek1543

 Смежные вопросы

  • Нет связанных вопросов^_^