2016-04-03 8 views
6
Ben Xamarin UITest çerçevesi ile benim Xamarin uygulama için otomatik Android ve iOS UI-Testleri oluşturduk

için Xamarin UI Testleri çalıştırırken ClearAppData2 sonucunu bekleme süresi doldu. yerel testleri çalıştırırken, onlar iyi çalışır, ancak Bitrise CI onları çalıştırırken, iOS testler ince çalışır, ancak Android UI Testleri aşağıdaki istisna ile başarısız tutmak: Xamarin ile çalışanAndroid

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 testi En iyi sürüm 1.3.5. Bu önemli, bug until version 1.3.3 olduğu görülüyor. Ayrıca, başarısız olan testleri görmezden gelmeyi denedim, ancak test koşucusu diğer Android testleriyle başarısız oluyor. İlginçtir ki bazen bireysel testler geçer.

Herkes önce bu davranışı karşılaştı? Bunu nasıl düzeltebileceğiniz konusunda tavsiyeleriniz var mı?

(istisna atar) decompiling CommandAdbClearAppData, ben oluşturulan dosya on saniye içinde bulunamadı belirtir

// 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"); 

görünce. o emülatör sadece çok yavaş ve emülatör bu dosyaları oluşturmak için uzun on saniyeden daha alır, olabilir mi?

+0

Bu testleri yerel olarak çalıştırdığınızda, bunları bir taklitçide de mi çalıştırıyorsunuz? Emülatörler kesinlikle takılı bir cihazdan biraz daha yavaştır. WaitTimes'ın yapılandırmasını daha uzun bir bekleme süresine değiştirmeyi denemenizi öneririz: https://developer.xamarin.com/api/member/Xamarin.UITest.Configuration.AndroidAppConfigurator.WaitTimes/p/Xamarin.UITest.Utils.IWaitTimes/ –

+0

Testleri her zaman bir emülatör üzerinde çalıştırıyorum, ancak x86 görüntüleri ile çalışan emülatörlerle (yani gerçek cihazlardan neredeyse daha hızlıdır). Ve ben zaten WaitTimes altı dakika için yapılandırılmış var. –

cevap

0

ben uygulama bekleyin kez

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

2 Veya eğer için

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

Gerçekleştiren testi bekleyin kez uygulamak başlatmak için beklerken Değilse youe bazı Configuation bakmak gerektiğini düşünüyorum Sayfadaki bazı Elemanları beklersiniz, fakat hızlı testi sınayın, sadece öğeyi bekleyin ve ardından testi sınayın.

_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 için bu bağlantıyı bakın ve emülatör sadece çok yavaş olduğundan, işte bu olabilir you

+0

Altı dakikalığına beklemek ve bunları kullanmak üzere yapılandırmak için bekletme sürelerini zaten uyguladım. Sorun, CommandAdbClearAppData'daki zaman aşımı gibi görünüyor, değil mi? –

1

için helpfull olurdu waitelement ve emülatör on saniye oluşturmak için daha uzun sürer bu dosyalar?

Evet, bu sorun olabilir.

Bunu nasıl giderileceği ile ilgili herhangi bir tavsiye var mı?

Xamarin.UITest nuget paketinin en son sürümleri, zaman aşımı aralığını 10 saniyeden 60 saniyeye artırdı.

Xamarin.UITest 1.3.6.1476-dev veya daha yenisini deneyin.

+0

En yeni sürümüne (1.3.7-1478-dev) ve herşeyi inbetween'a güncelledik - şimdiye kadarki Android Testlerimle şanssızlık. Şu an 30 dakika sonra mola veriyorlar (CI bunu öldürüyor). Mac ve Windows üzerinde yerel olarak iyi çalışıyorlar. –

0

Bu sorunun, APK'nın imzasız bir sürümünü test cihazımın üzerine yükledim (Xamarin Android Player için aynı şey). Proje özelliklerinde Android Paket İmzalama seçeneğinden ".APK dosyasını imzala" kutusunun işaretini kaldırmak zorunda kaldım. WaitTimes yolu suçumu işe yaramadı.