2016-04-03 4 views
6

Я создал автоматические UI-тесты для Android и iOS для своего приложения Xamarin с рамочной платформой Xamarin UITest. При выполнении тестов на местном уровне, они прекрасно работают, но при работе их на Bitrise CI, тесты IOS работать нормально, но Android тесты UI держать неудачу за исключением следующего:Сроки ожидания результата ClearAppData2 при запуске тестов Xamarin UI для Android

StartFirstActivity_WaitForActivity_ExpectButtonToHaveText 
SetUp : System.Exception : Timed out waiting for result of ClearAppData2 
Stack trace: 
    at Xamarin.UITest.Shared.Android.Commands.CommandAdbClearAppData.Execute (IProcessRunner processRunner, IAndroidSdkTools androidSdkTools) <0x38b3e90 + 0x0064b> in <filename unknown>:0 
    at Xamarin.UITest.Shared.Execution.Executor.Execute[TDep1,TDep2] (ICommand2 command) <0x32b6478 + 0x00092> in <filename unknown>:0 
    at Xamarin.UITest.Shared.Android.LocalAndroidAppLifeCycle.EnsureInstalled (Xamarin.UITest.Shared.Android.ApkFile appApkFile, Xamarin.UITest.Shared.Android.ApkFile testServerApkFile) <0x37418c8 + 0x0017a> in <filename unknown>:0 
    at Xamarin.UITest.Android.AndroidApp..ctor (IAndroidAppConfiguration appConfiguration) <0x31a15e8 + 0x0047a> in <filename unknown>:0 
    at Xamarin.UITest.Configuration.AndroidAppConfigurator.StartApp (AppDataMode appDataMode) <0x30b4298 + 0x00063> in <filename unknown>:0 
    at SightPlayer.Core.Test.AppInitializer.StartApp (Platform platform) <0x30b2448 + 0x000ef> in <filename unknown>:0 
    at SightPlayer.Core.Test.Tests.BeforeEachTest() <0x30b23f8 + 0x00013> in <filename unknown>:0 
    at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 
    at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x30b2208 + 0x00093> in <filename unknown>:0 

тест Android работают с Xamarin .UITest версия 1.3.5. Это важно, поскольку, как представляется, существует bug until version 1.3.3. Я также попытался проигнорировать неудачные тесты, но затем тест-бегун терпит неудачу с другими тестами Android. Интересно, что иногда проходят отдельные тесты.

Неужели кто-нибудь сталкивался с этим поведением раньше? У вас есть какие-либо советы относительно того, как это исправить?

Когда декомпилирование CommandAdbClearAppData (который выбрасывает исключение), я вижу

// ISSUE: reference to a compiler-generated field 
string str1 = string.Format("/data/data/{0}/files/calabash_failure.out", (object)executeCAnonStorey0.svr); 
// ISSUE: reference to a compiler-generated field 
string str2 = string.Format("/data/data/{0}/files/calabash_finished.out", (object)executeCAnonStorey0.svr); 
while (DateTime.UtcNow < utcNow + TimeSpan.FromSeconds(10.0)) 
{ 
    if (func(string.Format("ls {0}", (object)str1)).Output.Trim().Equals(str1)) 
     throw new Exception("Clear app data failed with " + func(string.Format("cat {0}", (object)str1)).Output); 
    if (func(string.Format("ls {0}", (object)str2)).Output.Trim().Equals(str2) && func(string.Format("cat {0}", (object)str2)).Output.Trim().Equals("SUCCESSFUL")) 
     return; 
} 
throw new Exception("Timed out waiting for result of ClearAppData2"); 

, который указывает, что сгенерированный файл не может быть найден в течение десяти секунд. Может быть, эмулятор просто слишком медленный, и для создания этих файлов эмулятор занимает больше 10 секунд?

+0

Когда вы запускаете эти тесты локально, вы также запускаете их на эмуляторе? Эмуляторы, безусловно, немного медленнее, чем подключенное устройство. Я бы рекомендовал попробовать изменить конфигурацию 'WaitTimes' на более длительное время ожидания: https://developer.xamarin.com/api/member/Xamarin.UITest.Configuration.AndroidAppConfigurator.WaitTimes/p/Xamarin.UITest.Utils.IWaitTimes/ –

+0

Я всегда запускаю тесты на эмуляторе, но с эмуляторами, которые работают с изображениями x86 (так что они на самом деле почти быстрее, чем реальные устройства). И у меня уже есть WaitTimes, настроенный на шесть минут. –

ответ

0

Я думаю, youe нужно посмотреть на какой-то в Кoнфигурировании Если ваше приложение не ждет, чтобы запустить тест Реализовать время ожидания

_app = ConfigureApp.Android.EnableLocalScreenshots().ApkFile(apkFile).DeviceSerial("###").ApiKey("###").Debug().WaitTimes(new WaitTimes()); 
          .StartApp(); 

РЕАЛИЗАЦИЯ для времени ожидания

public class WaitTimes : IWaitTimes 
{ 
    public TimeSpan GestureWaitTimeout 
    { 
     get { return TimeSpan.FromMinutes(1); } 
    } 
    public TimeSpan WaitForTimeout 
    { 
     get { return TimeSpan.FromMinutes(1); } 
    } 
} 

2 Или, если вы ждете некоторый элемент на странице, но быстро проверяйте эксцесс, просто ждите элемент, а затем проведите тест.

_app.WaitForElement(c => c.Marked("Login"), "Time out completed", TimeSpan.FromSeconds(15)); 
    var result = _app.Query(c => c.Marked("Login")); 
Assert.AreEqual(1,result.Length); 
_app.Screenshot("Test passed with sucess"); 

См эту ссылку waitimes и waitelement это было бы полезно, чтобы you

+0

У меня уже было время ожидания, чтобы ждать шесть минут и настроить их использовать. Кажется, проблема заключается в тайм-ауте в CommandAbClearAppData, не так ли? –

1

Может быть, что эмулятор просто слишком медленно и эмулятор занимает больше времени, чем за десять секунд, чтобы создать эти файлы?

Да, это может быть проблемой.

У вас есть какие-либо советы относительно того, как исправить это?

Последние разработки разработчика пакета Xamarin.UITest nuget увеличили интервал времени ожидания от 10 секунд до 60 секунд.

Попробуйте Xamarin.UITest 1.3.6.1476-dev или новее.

+0

Обновлен до новейшей версии (1.3.7-1478-dev) и все, что между ними - пока нет моих тестов на Android. Прямо сейчас они тайм-аут через 30 минут (CI убивает его). Локально на Mac и Windows они работают нормально. –

0

Я решил эту проблему загрузить неподписанную версию APK на свое тестовое устройство (то же самое для Xamarin Android Player). Мне нужно было снять флажок «Подписать файл .APK» из параметра «Подгрузка пакета Android» в свойствах проекта. WaitTimes способ не работает для меня.