Salatalık Özellikleri: genel bakış

Yayınlanan: 2022-04-20

giriş

Gherkin, birçok test otomasyonu çerçevesinde hala kullanılan bir dildir. Bazen müşterinin onu kullanmamızı gerektirmesi, bazen de ekibin bunu yapmaya karar vermesidir.

Açıkçası benim için ilk görüşte aşk değildi. Şahsen, Gherkin ile oldukça uzun bir yolculuğum var - ilk başta beğenmekten, bir süre dilden nefret etmeye ve sonra tekrar sevmeye kadar. Bu yazıda en önemli Salatalık özelliklerini Java uygulaması ile birlikte sunacağım.

İşte bu makalede ele alınan tüm Salatalık özellikleri:

Özellik Tanım
Senaryo Basit senaryo
Senaryo Anahattı Kullanıcının "Örnekler" bölümünde test verilerini sağlamasını gerektirir
Veri Tabloları Kullanıcının test adımı için test verilerini sağlamasını gerektirir
Senaryo Bağlamı Test adımları arasında değerlerin paylaşımı
Salatalık Veri Türleri Salatalık tarafından işlenen veri türleri
Salatalık Normal İfadesi Salatalık senaryolarında düzenli ifade kullanımı
salatalık kancaları Test senaryolarında ek kod yürütür
Tablo 1. Bu makalede ele alınan salatalık ve java özellikleri

Özellik dosyası

Her şeyden önce, bir özellik dosyası nedir? Teknik dünyada, bir uygulamanın geliştirilmesi sırasında teknik bilgisi olmayan kişilerin ekiple işbirliği yapmasına izin vermek için teknik olmayan bir yaklaşım oluşturuldu. Gherkin dili, BDD yaklaşımında ek bir katman olarak oluşturulmuştur. Gherkin testleri, kodla (Java, Kotlin, C# vb.) yapıştırılmış özellik dosyalarında bulunur. Genellikle Gherkin'in kullanımı çok kolaydır ve minimum programlama bilgisi gerektirir, ancak bazı kodlama gerektiren özellikler vardır.

Kolay bir şeyle başlayalım.

Senaryo

İşte Salatalık testinin en temel ve kullanımı en kolay örneği:

 Özellik: Senaryo

 Arka Plan: Test Senaryolarından Önce
   Adımdan önce yürüttüğüm için

 @Ölçek
 Senaryo: Senaryo 
   Verilen "Senaryo 1" in parametreli adımını kullanıyorum

Kod Bloğu 1. Senaryo

Kod Bloğu 1. açıklanması gereken birkaç şey içerir:

  • Özellik : özellik dosyasının başlığı
  • Arkaplan : kullanıcının özellik dosyasında tanımlanan her bir test senaryosundan önce test adımlarını yürütmesine izin veren anahtar kelime
  • @Test : Test çerçevesine hangi test senaryosunun yürütülmesi gerektiğini söyleyen etiket. “Test” kullanıcı tarafından tanımlanır. Örneğin “@SmokeTest” kullanabiliriz
  • Senaryo : Test senaryosu adı

Kornişon testleri, her test adımından önce [Given, When, Then, But] anahtar kelimelerini kullanır. Arka Plan adımı dışındaki tek test adımımızda “Senaryo 1” değerini geçtiğimiz bir parametre kullanıyoruz.

Şimdi yapıştırılmış Java kodunun nasıl göründüğüne bakalım:

 @Given("Adımdan önce çalıştırırım")
genel geçersiz iExecuteBeforeStep() {
   //bazı uygulama
}

@Given("{string}'in parametreli adımını kullanıyorum")
public void iUseParametrizedStepOf(String p) {
   //bazı uygulama
}

Kod Bloğu 2. Senaryonun Java kodu uygulaması

Senaryo Anahattı

Daha karmaşık bir şey yapalım:

 Özellik: Senaryo Anahattı

 @Ölçek
 Senaryo Anahattı: Senaryo Anahattı
   Adımı "<parameter1>" ve "<parameter2>" ile çalıştırdığım için
 Örnekler:
     | parametre1 | parametre2 |
     | parametre1a | parametre2a |
     | parametre1b | parametre2b |

Kod Bloğu 3. Senaryo Anahattı

Bu sefer farklı test verisi konfigürasyonları ile test senaryolarını tekrarlamamıza izin veren Senaryo Anahatlarını kullanacağız. Kod Bloğu 3. açıklanması gereken birkaç şey içerir:

  • Örnekler : test senaryoları tarafından kullanılacak test verilerinin matrisi. İlk satır, parametre adlarına sahip bir başlıktır.

Ve java uygulaması:

 @Given("Adımı {string} ve {string} ile çalıştırıyorum")
public void iRunStepWithAnd(Dize p1, Dize p2) {
   //bazı uygulama
}

Kod Bloğu 4. Senaryo Anahattı'nın Java uygulaması

Veri tablosu

Senaryo Anahattı çok kullanışlıdır, ancak ya tüm test senaryosunu tekrarlamak istemiyorsak, sadece bir test adımını tekrarlamak istiyorsak? Gherkin'in bunu yapmanın bir yolu var ve buna “Veri Tablosu” deniyor.

 Özellik: Veri Tablosu

@Ölçek
Senaryo: Veri Tablosu Senaryosu
 Verilen sütunun beklenen değeri içerdiğini doğrularım
 | sütunAdı | beklenenDeğer |
 | SomeColumnName | bazıExpectedValue |

Kod Bloğu 5. Veri Tablosu

Veri Tablolu Senaryo, Senaryo Anahatlarından çok farklı değildir. Tek şey, “Örnekler” anahtar kelimesini tablonun önüne koymamamızdır.

Java uygulaması, önceki durumlardan biraz daha karmaşık görünüyor:

 @Given("Sütunun beklenen değeri içerdiğini doğruladım")
public void iVerifyColumnValuesInTableUsingQueryFromFileOnSchema(DataTable dataTable) {
   List<Map<String, String>> data = dataTable.asMaps();
   for (Map<String, String> form : data) {
       String columnName = form.get("columnName");
       String beklenenSonuç = form.get("expectedValue");
       //bazı uygulama
       }
   }
}

Kod Bloğu 6. Veri Tablosunun Java uygulaması

Bir veri tablosundan verilere erişmek için “DataTable” türünde özel bir dataTable değişkeni oluşturuyoruz. Tüm veriler Liste değişkeninde saklanacaktır.

Senaryo Bağlamı

Senaryo Bağlamını kullanarak adımlar arasında veri paylaşabiliriz. "veri" değerini adım 1'den adım 2'ye (Kod Bloğu 7) geçirmek istediğimiz iki adımlı bir senaryomuz olduğunu varsayalım.

 @Ölçek
Senaryo: Senaryo Bağlamı
 Verilen senaryo bağlam değerini "veri" olarak ayarladım
 Verilen senaryo bağlam değerini kullanıyorum

Kod Bloğu 7. Senaryo Bağlamı

İlk olarak, senaryo bağlamı özelliklerini ayarlama ve veri alma (Kod Bloğu 8) ile ScenarioContext adlı özel bir sınıf oluşturmamız gerekiyor. Senaryo bağlamımız, anahtar/değer çiftine sahip bir HashMap'tir. Değerleri anahtarına göre tanımlayacağız.

  • senaryoContext() : Anahtar/değer çiftinin HashMap'i
  • setContext() : senaryo bağlam verilerini depolamak için anahtar-değer yöntemi
  • getContext() : anahtarı sağlayan verileri alma yöntemi
 genel sınıf ScenarioContext {

   private Map<String, Object> senaryoContext;

   genel senaryoContext(){
       senaryoContext = new HashMap<>();
   }

   public void setContext(Bağlam anahtarı, Nesne değeri) {
       senaryoContext.put(key.toString(), değer);
   }

   public Object getContext(Bağlam anahtarı){
       return senaryoContext.get(key.toString());
   }

}

genel numaralandırma Bağlam {
   İD;
}

Kod Bloğu 8. Senaryo Bağlam sınıfının Java uygulaması

Buna sahip olarak, uygulanan yöntemlerden yararlanabiliriz. 1. adımda senaryo bağlamında değeri ayarlıyoruz ve 2. adımda değeri alıyoruz (Kod Bloğu 9).

 ScenarioContext senaryoContext = new ScenarioContext();

@Given("Senaryo bağlam değerini {dize} ayarladım")
public void iSetScenarioContextValue(Dize değeri) {
   senaryoContext.setContext(Context.ID, değer);
}

@Given("Senaryo bağlam değerini kullanıyorum")
genel geçersiz iUseScenarioContextValue() {
   String sharedValue = senaryoContext.getContext(Context.ID).toString();
}

Kod Bloğu 9. Senaryo Bağlam adımları

Salatalık Veri Türleri

Salatalık sınırlı sayıda veri türünü işler. Dizeleri, tam sayıları ve kayan değerleri tanımlayabiliriz, ancak boole değerleri olması durumunda bazı geçici çözümleri kodlamamız gerekir.

 @Ölçek
Senaryo: Değişkenli Senaryo
 "string", int 1, float 1.1 ve boolean "false" kullandığım göz önüne alındığında

Kod Bloğu 10. Salatalık Veri Tipleri

Java kodu şuna benzer:

 @Given("String {string}, int {int}, float {float} ve boolean {string} kullanıyorum")
public void iUseStringIntFloatAndBoolean(String var1, int var2, double var3, String var4) {
   boolean f = Boolean.valueOf(var4);
   //bir kod
}

Kod Bloğu 11. Salatalık Veri Türlerinin Java uygulaması

Salatalık Normal İfadesi

Bu da sık kullanılan bir diğer özelliktir. Kod Bloğu 12, yalnızca farklı değişken değerleri (var1 ve var2) kullanılarak farklılık gösteren iki adımlı bir senaryo gösterir. Bu aslında yalnızca bir adımdır ve Java kodunda (Kod Bloğu 13) yalnızca bir yöntem tanımlarız, ancak regex ve bir parametre var.

 @Ölçek
Senaryo: Normal İfade senaryosu
 Var1 değişkenini kullandığım göz önüne alındığında
 Var2 değişkenini kullandığım göz önüne alındığında

Kod Bloğu 12. Salatalıkta Normal İfade

 @Given("^(.*) değişkenini kullanıyorum")
genel geçersiz sınavTimeTableInSummerSeason(String var) {
   if (var.equals("var1")){
       //bir kod
   }
   else if(var.equals("var2")){
       //bir kod
   }
}

Kod Bloğu 13. Salatalık düzenli ifadesinin Java uygulaması

salatalık kancaları

Son fakat en az değil: Salatalık kancaları.

Kod bloğu 14, en önemli 4 kancayı sunar:

  • @Before : Her test senaryosundan önce kodu çalıştırır
  • @After : Her test senaryosundan sonra kodu çalıştırır
  • @BeforeStep : Her test adımından önce kodu çalıştırır
  • @AfterStep : Her test adımından sonra kodu çalıştırır
 @Önceki
public void BeforeScenario() {
   //bir kod
}

@Sonrasında
public void afterScenario() {
   //bir kod
}

@BeforeAdım
public void BeforeStep() {
   //bir kod
}

@Adımdan Sonra
public void afterStep() {
   //bir kod
}

Kod Bloğu 14. Salatalık Kancaları

Özet

Umarım sizi testlerinizde Gherkin kullanmaya ikna edebilmişimdir. Bu birkaç özellik, testlerinizi teknik olmayan kişiler tarafından daha okunabilir ve daha kolay anlaşılır hale getirecektir. Ayrıca yeni katılanlar için iş mantığını anlamak daha kolay olacak ve işe giriş zamanlarını azaltacaktır.