Salatalık Özellikleri: genel bakış
Yayınlanan: 2022-04-20giriş
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 |
Ö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.