AppCenter ile Xamarin UITest

Merhabalar,

Mobil uygulamalarımızı geliştirirken gerçek cihaz testleri çok önemli bir faktör ve kesinlikle uygulamalarımızı mağazalara göndermeden önce bu testleri yapmamız gerekiyor. iOS işletim sistemleri için bu testler daha erişilebilir ve mümkün fakat Android dünyasındaki cihaz ve işletim sistemi versiyon çokluğu bizi zorlayabiliyor. “Kaç para ulan 2200+ cihaz! alırız ne var?” diyenleri duyar gibiyim.. O olaylar hiç öyle değil 🙂 arkasında bir dünya başka maliyetler ve kontrol edilmesi gereken durumları getiriyor. Faka güzel podcast konusu olurmuş 🙂

Peki elimizde bir Test Cloud olsa ve bize tüm bu cihazları işletim sistemi, API level gibi seçeneklerle kullanma imkanı verse nasıl olur? Bence süper 🙂

Gitmemiz, odaklanmamız gereken konu da bu olmalı. Geliştirdiğimiz projelerde her ihtiyacımızı kendimiz karşılamamız gerekiyormuş gibi bir yaklaşımın çok doğru olduğunu düşünmüyorum. Zaten SaaS dediğimiz kavram bu tarz ihtiyaçlardan doğmadı mı?

Hızlıca konumuza dönecek olursak, yeni bir Xamarin.Forms uygulaması açıyoruz ve hız kesmeden Xamarin.UITest projesi ekliyoruz.

Son halimiz

Önceki örnekğimizdeki proje üzerinden devam edeceğim.
-Evet üşendim.

Test Cloud hakkında dikkat etmemiz gereken ufak süreçler mevcut. Bunlar;

  • Gerçek cihazlar üzerinde test yapılır!
  • Test senaryoları çalışırken istediğiniz bir anda screenshot alabilirsiniz
  • Test senaryoları bittikten sonra tüm işlemler bir log dosyasına yazılır ve tüm süreci analiz edebilirsiniz
  • Test senaryolarını birden fazla cihazda aynı anda çalıştırabilirsiniz
  • Appium, Calabash, Espresso gibi frameworkleri kullanabilirsiniz
  • Load test yapamazsınız!
  • VPN test yapamazsınız!
  • Hücresel veri üzerinden test yapamazsınız!

Test işlemlerini AppCenter cli üzerinden gerçekleştireceğiz. Bu yüzden seri hareketlerle linkteki dökümanı okuyalım, komutları ise bu linkten inceleyelim.

AppCenter portalden Test sekmesine gidelim ve “Device Sets” kısmından yeni bir cihaz listesi oluşturalım.

Değişik versiyonlarda 3 cihaz ekledim.

Test run kısmına gelip yeni bir test oluşturuyorum ve oluşturduğum cihaz listesini seçtikten sonra test framework olarak Xamarin.UITest seçip ilerliyorum.

Bak yine karşımıza çıktı! Gerekli AppCenter cli kurulumunu vs yaptık di mi?

“Running Tests” başlığı altında zaten bize komutu veriyor. Bu komut sayesinde testlerimizi cloud ortamda, seçtiğimiz cihazlar ve test projesinde yazdığımız senaryo ile yapacağız.

appcenter test run uitest --app "yigit-ozaksut/XamDevOps" --devices "yigit-ozaksut/mydevicelist" --app-path pathToFile.apk --test-series "launch-tests" --locale "en_US" --build-dir pathToUITestBuildDir

Yukaridaki kod üzerinde biraz değişiklik yapacağız.

Tekrar test projesine odaklanalım.. WelcomeTextIsDisplayed methodu zaten projedeki tek test methodu. Bu methodu biraz değiştirip, farklı bir test methodu daha yazalım.

        [Test]
        public void WelcomeTextIsDisplayed()
        {
            AppResult[] results = app.WaitForElement(c => c.Marked("Xamarin UITest bir harika dostum!"));
            app.Screenshot("Welcome screen.");

            Assert.IsTrue(results.Any());
        }

static readonly Func<AppQuery, AppQuery> Button = c => c.Marked("ClickButton");

        [Test]
        public void DialogIsDisplayed()
        {
            AppResult[] results = app.Query(Button);
            app.Tap(Button);
            app.Screenshot("Tapped on ClickButton!");
            Assert.IsTrue(results.Any());
        }

Ek olarak DialogIsDisplayed methodunu ekledim. Forms projemizdeki bir kontrole birçok şekilde ulaşabiliriz. Bunun en kolay yolu AutomationId özelliği.

    <ContentPage.Content>
        <StackLayout>
            <Label Text="Welcome to Xamarin.Forms!"
                VerticalOptions="CenterAndExpand" 
                HorizontalOptions="CenterAndExpand" />
            <Button Text="Click Me!"
                    AutomationId="ClickButton"
                    Clicked="Button_Clicked"/>
        </StackLayout>
    </ContentPage.Content>

    public partial class WelcomePage : ContentPage
    {
        public WelcomePage()
        {
            InitializeComponent();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            DisplayAlert("Test", "Click Me!", "Ok");
        }
    }

Test çalıştığında ekranda “Welcome to Xamarin.Forms!” yazısı çıkıyorsa testim başarılı olacaktır.

Sizlerin de tahmin ettiği üzere IApp interface üzerinde ihtiyacımız olan tüm methodlar mevcut. EnterText, DragAndDrop, Tag vs.

Projemizin testlerini yazdıktan sonra .APK çıktısını alıp appcenter cli üzerindeki kodlarımızı yazalım.

appcenter test run uitest --app "yigit-ozaksut/XamDevOps" --devices "yigit-ozaksut/mydevicelist" --app-path "C:\Users\Yigit\Downloads\com.companyname.xamdevops.apk" --test-series "launch-tests" --locale "en_US" --build-dir "C:\Users\Yigit\source\repos\XamDevOps\XamDevOps.Test\bin\Debug" --uitest-tools-dir "C:\Users\Yigit\Downloads\tools"
  • –app “yigit-ozaksut/XamDevOps” : Hangi proje
  • –devices “yigit-ozaksut/mydevicelist” : Oluşturduğumuz cihaz listesi adı
  • –app-path “C:\Users\Yigit\Downloads\com.companyname.xamdevops.apk” : Test edilecek çıktı
  • –test-series “launch-tests” : Oluşturduğumuz test series
  • –locale “en_US” : Sistem dili
  • –build-dir “C:\Users\Yigit\source\repos\XamDevOps\XamDevOps.Test\bin\Debug” : NUnit.Framework.dll bulunduğu path
  • –uitest-tools-dir : Eğer test-cloud.exe hatası alıyorsanız linkteki Xamarin.UITest paketini indirip formatını .rar yapıp dışarı çıkartın. Daha sonra tools klasörünün path’ini verin. Linkteki yazıyı da okumanızda fayda var.
.APK dosyası yükleniyor..
Testler başladı..

AppCenter portale baktığımızda ise..

2 test senaryosu / 3 cihaz

AppCenter test aracı 30 gün ücretsiz kullanıp, deneyimleyebilirsiniz.

Kaynaklar;

Yiğit

Xamarin Developer, Consultant & Architect. Community Leader and Director of Xamarin Türkiye

Post A Reply