data driven parameterized testing with spock framework
Spock Framework ile Veriye Dayalı veya Parametreli Testler Yazmanın Yollarını Keşfedin:
Bunda Ücretsiz Spock Eğitimi Eğitim Serisi , hakkında her şeyi keşfettik Spock'ta Birim Testi ve Test fikstürleri, Onaylar ve Raporlama önceki eğitimimizde.
Bu eğiticide, parametreleştirilmiş testlerin ne olduğunu ve veriye dayalı testlere ulaşmak için Spock'un yerleşik özelliklerinden nasıl yararlanabileceğinizi anlamaya çalışacağız.
Hadi başlayalım!!
Video Eğitimini İzleyin
Ne öğreneceksin:
- Parametreli Testler nelerdir?
- Spock ile Parametreli Testler Yazma
- 'Nerede' Bloğunun Yaşam Döngüsü
- İpuçları & Hileler
- Sonuç
- Önerilen Kaynaklar
Parametreli Testler nelerdir?
Otomasyon / birim testleri ile çalışan herkes için veri odaklı test yeni bir terim değildir.
Parametreli testler hiçbir şey değildir, ancak aynı yürütme mantığını paylaşan ve yalnızca bazı durumlarda giriş verilerinde ve sonuçta farklılık gösteren herhangi bir tür testtir.
Misal: Bir Hesap Makinesi uygulamanız olduğunu varsayalım, işlevselliği tamamen test etmek için testlerinizi farklı giriş kümelerine göre çalıştırmak isteyebilirsiniz.
Misal: Negatif değerler, kesirli sayılar, normal tam sayılar, izin verilen maksimum aralığa yaklaşan tam sayılar vb. Hangi giriş değerlerine sahip olursanız olun, aynı yürütme mantığını çalıştırmak istersiniz.
Parametreli testler yazmanın bir başka iyi nedeni de, sadece mutlu bir yolu değil, aynı zamanda hata yolunu veya olumsuz senaryoları da test etmesidir.
Misal: Belirli bir dosya uzantısının geçerli olup olmadığını döndüren bir uygulama olduğunu varsayalım. Veriye dayalı testler, geliştiricinin desteklenen dosya uzantıları ve herhangi bir hata senaryosu veya negatif girdi testleri için testleri hızlı bir şekilde yürütmesini sağlayabilir.
Şimdi geleneksel olarak, birden çok girdi değeri için testler üzerine yazmayı veya kopyalamayı düşünebilirsiniz, ancak bu, bu tür bir test yürütmeyi başarmanın doğru veya akıllıca yolu değildir. Dahası, uygulamanızda testlerin sayısı artmaya başladıkça, bu testlerin bakımı zorlaşacaktır.
Spock ile Parametreli Testler Yazma
Nerede: blok
Bir Spock testindeki where bloğu, parametreli test için verileri tutan bloktur. İsteğe bağlı olarak hem girdi hem de beklenen çıktı değerlerini içerebilir. Bu blok hakkında dikkat edilmesi gereken önemli bir nokta, bunun bir Spock testindeki son blok olması gerektiğidir.
Bunu söyledikten sonra, verilen gibi diğer tüm bloklarla birleştirilebilir, ne zaman & sonra ancak son blok olmalıdır.
Daha iyi anlamak için bir Örneğe bakalım
2 girdi parametresi alan ve sağlanan girdilerin toplamını döndüren bir hesap makinesi uygulaması kullanacağız. Birden çok girdi ve beklenen çıktı değeri sağlayan parametreli bir test yazacağız.
def 'sample parameterized test'() input2 Yukarıdaki kod örneğinde aşağıdakileri görebilirsiniz:
- Testin çalıştırılması için verileri içeren 'nerede' bloğu.
- 'Nerede' bloğu testin son bloğudur.
- 'Nerede', diğer bloklarla birleştirilir, yani, ne zaman ve sonra verilir.
- Veri gösterimi, bu eğitimin ilerleyen bölümlerinde ayrıntılı olarak inceleyeceğimiz, veri tabloları adı verilen özel bir biçimdir.
- Başlık veri satırı, esasen testte doğrudan kullanılabilen özellikler / girdi değişkenleridir. Örneğin. Doğrudan kullandığımız 'ne zaman' bloğundaki ifadeye bakın giriş1 ve giriş2 açıkça tanımlamadan girdi parametreleri olarak.
Veri Tablolarını Kullanma
Şimdi veri tablolarını ayrıntılı olarak anlamaya çalışalım. Veri tablosunun her satırı, ayrı bir senaryo için verileri temsil eder (test yürütme).
Kural olarak, yani giriş değerlerinden önce tek bir boru ('|'), çıkış değerlerinden önce ise çift boru ('||') gelir. Bunun mantıksal bir önemi yoktur, ancak bu bir konvansiyondur ve okunabilirliği artırır. Bu nedenle, aşağıdaki her iki örnek de doğrudur.
input1 |input2 |expectedResult 10 |15 |25 -4 |6 |2 input1 |input2 || expectedResult 10 |15 || 25 -4 |6 || 2 Yukarıda gösterildiği gibi başlık satırı, test edilecek veri olarak sağlanan parametrelerin her biri için bir ada sahiptir. Burada, bu parametre adlarının testteki mevcut yerel / global değişkenlerle çakışmaması gerektiğine dikkat etmek önemlidir, aksi takdirde derleme zamanı hataları değişken isimlerini çözmek için.
Veri tablolarını kullanırken dikkat edilmesi gereken önemli bir nokta en az 2 sütun gerektiğidir. Yalnızca bir sütuna ihtiyacınız varsa, alt çizgi karakteri olarak değerlere sahip boş bir sütun aşağıdaki gibi geçici bir çözümdür.
input1 ||_ 10 ||_ -4 ||_ Bu formatın avantajı basitlik, okunabilirlik ve genişletilebilirliktir. Yeni bir veri girişi eklemek, veri değerleri olan yeni bir satır eklemek kadar basittir.
Burada dikkat edilmesi gereken bir diğer nokta da, veri tablolarının her tür değişkeni, sınıfı, nesneyi, numaralandırmayı vb. Tutmak için kullanılabileceğidir ve bu da onu daha da güçlü kılar. Groovy isteğe bağlı olarak yazılmış bir dil olduğundan, açık bir tür belirtilmezse, veri tablosundaki değişkenler, sağlanan verilerin türüne bağlı olarak ima eder.
Başka bir görelim Misal dize içindeki öğe sayısı olarak girdi ve çıktı olarak dize listesiyle veri tablolarını kullanma.
def 'sample parameterized test with list data type'() when: def actualCount = input1.size() then: actualCount == expectedCount where: input1 Yukarıdaki örnekte, Dize dizisi listesi olarak girdi sağladığımızı ve çıktının bu dizi listesinin boyutu olduğunu fark edebilirsiniz. Bu nedenle, farklı türlerde girdi verilerine sahip olmak çok fazla esneklik sağlar.
Ayrıca, ilgili girdi türünün verilerini döndüren ve doğrudan veri tablolarında kullanılan ifadelerden de söz edebilirsiniz.
'Nerede' Bloğunun Yaşam Döngüsü
Veri tabloları biçiminde blok ve veri örneklerinin bulunduğu testler için, her veri satırı, test yönteminin bir yürütmesini temsil eder.
Örneğin, 5 veri satırı varsa ve test 'verilen' ve 'ne zaman' bloklarını içeriyorsa, bu tür veri satırı için test blokları bir kez çalıştırılacaktır. Yani, genel olarak, test yönteminin toplam 5 yürütmesi olacaktır.
İpuçları & Hileler
Bu veri tablolarıyla çalışırken parametreleştirilmiş testler için bazı ipuçları ve püf noktaları görelim.
# 1) Ayrı satır yürütme sonuçlarının ayrı ayrı görüntülenmesi. Yaşam döngüsü bölümünde gördüğümüz gibi, her veri satırı için test kodunun bir yürütülmesi vardır. Bu satırların veya sonuçların bu tür her satır için ayrı ayrı görüntülenmesi amacıyla, bu tür testler için “@Unroll” ek açıklaması kullanılabilir.
Bunu bir örnekle anlamaya çalışalım:
Test edilen yönteme sağlanan 3 set giriş verisiyle aynı hesap makinesi uygulamasını kullanacağız.
Java'da bağlantılı bir liste nasıl başlatılır
def 'sample parameterized test'() -20 '@Unroll' ek açıklaması olmadan, sonucun terminalde nasıl göründüğünü görelim (html tabanlı raporların yanı sıra). Bu tür bir çıktıyla, testin başarısız olmasına hangi girdi kümesinin neden olduğunu bulmak zorlaşır.


Şimdi, test yöntemine (veri girişi olarak veri tabloları olan) '@Unroll' ek açıklamasını ekledikten sonra test çıktısının her satır için ayrı ayrı nasıl raporlandığını görelim.


#iki) Şimdi, bu veriye dayalı testlere anlamlı bilgilerin nasıl ekleneceğini anlayalım (yukarıdaki ekran görüntüsünde olduğu gibi bazı otomatik eklenen dizinler yerine).
Giriş ve çıkış özellikleri için yer tutucular kullanabiliriz (veri tablosuna göre) ve daha sonra test adlarında veri tablolarından alınan verilerle doldurulmuş değerleri görebiliriz.
Veri tablolarında belirtildiği gibi girdi ve beklenen çıktıdan veri almak için aynı örneği kullanalım ve test adını güncelleyelim:
@Unroll def 'result of adding #input1 & #input2 should be #expectedResult'() given: def app = new CalculatorApp() when: def resultSum = app.add(input1, input1) then: resultSum == 2 * input1 where: input1 Şimdi çıktının terminalde ve HTML tabanlı raporlarda nasıl göründüğünü görelim:


Dolayısıyla, burada görebileceğiniz gibi, giriş ve çıkıştan gelen veriler, çalıştırılırken test isimleriyle birlikte gösteriliyor. Bu şekilde, hangi girdinin testin başarısız olmasına veya yanlış davranmasına neden olduğunu açıkça gösterdiği için sorun giderme ve hata ayıklamayı çok daha kolay hale getirir.
Sonuç
Bu öğreticide, Spock çerçevesiyle parametreli testler yazmayı öğrendik. Veri tablolarının çeşitli özelliklerini ve nasıl kullanılabileceklerini de tartıştık.
Mocks ve Stubs'ı Spock ile nasıl kullanacağınızı öğrenmek için yaklaşan eğitimimize göz atın !!
PREV Eğitimi | SONRAKİ Eğitici
Önerilen Kaynaklar
- Spock Framework ile Birim Testleri Yazma
- Spock Mülakat Soruları ve Cevapları (En Popüler)
- Selenyum ile Entegrasyon ve Fonksiyonel Test İçin Spock
- Spock Alay ve Stubbing (Video Eğitimleri ile Örnekler)
- Spock Eğitimi: Spock ve Groovy ile Test Etme
- Apache POI Kullanan Selenium WebDriver'da Veriye Dayalı Çerçeve
- TestComplete Aracı Kullanılarak Veriye Dayalı Test Nasıl Gerçekleştirilir
- Veriye Dayalı Test Nasıl Çalışır (QTP ve Selenyum Örnekleri)