step argument transformations specflow tables
Adım Bağımsız Değişken Dönüşümleri ve Specflow Tabloları Eğitimi:
Önceki Specflow öğreticimiz bize her şey hakkında bilgi verdi Paylaşılan ve Kapsamlı Bağlamalar, Kancalar ve Adım Yeniden Kullanım detayda. Bu eğiticide, Specflow'daki Adım Bağımsız Değişken Dönüşümleri hakkında daha fazla bilgi edineceğiz.
Bizim baştan sona okumaktan çekinmeyin Yeni Başlayanlar İçin Tam Specflow Eğitim Kılavuzu kavramın net bir şekilde anlaşılması için. Specflow'un Adım Argüman Dönüşümü özelliği, bir kullanıcının Adımlarda sağlanan parametreler için özel dönüşüm sağlamasına olanak tanır.
Girdi parametrelerini belirli bir parametreye dönüştürmek için özel mantığın eklenmesine izin verir. Örneğin, doğrudan parametrelerden bir sınıf nesnesi oluşturabilir ve inşa edilen nesneyi dönüştürme işlevinden döndürebilirsiniz.
Specflow'un bakacağımız bir diğer özelliği de, girdi verilerinin tek bir adımda tablo biçiminde aktarılmasına olanak tanıyan Specflow Tablolarıdır ve Tablo yardımcıları, istendiği şekilde doğrudan bir Object örneğine eşlenmesini sağlayabilir.
Videoyu izle:
Adım Bağımsız Değişken Dönüşümleri ve Specflow tablolarıyla ilgili bir eğitim videosu:
Ne öğreneceksin:
Adım Bağımsız Değişken Dönüşümleri
Argüman dönüşümlerini daha iyi anlamak için, önce Specflow'un parametrelerle tam olarak nasıl eşleştiğini anlamaya çalışalım. Önceki makalelerimizde gördüğümüz gibi, YouTube arama örneği için, arama terimini senaryonun yürütülmesi için bir parametre olarak geçiriyorduk.
Parametre eşleştirmesi genellikle normal bir ifade aracılığıyla gerçekleşir ve eşleşen normal ifade, yöntem parametresinin adımda sağlanan arama terimine ayarlanmasına neden olur.
Öncelikle Specflow'da varsayılan olarak desteklenen dönüşümlerin neler olduğunu ve bağımsız değişken dönüşümlerinin ne zaman yardımcı olabileceğini anlamaya çalışalım.
Desteklenen Dönüşümler
Specflow, normal ifade eşleşmesinden sonra veri türünün kendisine bakarak kutudan çıkar çıkmaz birçok dönüşümü destekler. Dize, tam sayı, GUID, Enums, vb. Gibi dönüşümleri otomatik olarak halledebilir.
Aşağıda bunlardan bazıları için bir Örnek görelim:
Scenario: Get Transactions in my account Given I have entered customer name as Test Customer And I have entered customer account id as 0f8fad5b-d9cb-469f-a165-70867728950e And I select sorting order as DESCENDING And I select number of transactions to be displayed as 25 Then I should see my account transactions
Yukarıdaki kod örneğinde, Adımlarda geçirdiğimiz farklı girdi türlerini vurguladık ve adım uygulamalarında bunlar ilgili veri türlerine dönüştürülüyor.
Aşağıdakiler için adım uygulamalarına bakalım (basit olması için, sağlanan bağımsız değişkenin otomatik olarak beklenen türe dönüştürüldüğünü göstermek için adımların her biri için bir konsol yaptık):
(Given(@'I have entered customer name as (.*)')) public void GivenIHaveEnteredCustomerNameAsTestCustomer(String customerName) { Console.Out.WriteLine(customerName); } (Given(@'I have entered customer account id as (.*)')) public void GivenIHaveEnteredCustomerAccountIdAs(Guid accountId) { Console.Out.WriteLine(accountId.ToString()); } (Given(@'I select sorting order as (.*)')) public void GivenISelectSortingOrderAsAscending(SortOrder sortOrder) { Console.Out.WriteLine(sortOrder.ToString()); } (Then(@'I should see my account transactions')) public void ThenIShouldSeeMyAccountTransactions() { Console.Out.WriteLine('success!'); } (Given(@'I select number of transactions to be displayed as (.*)')) public void GivenISelectNumberOfTransactionsToBeDisplayedAs(int p0) { Console.Out.WriteLine(p0.ToString());
Yukarıdaki senaryo yürütülürken çıktı, bağımsız değişkenlerin beklenen veri türlerine otomatik olarak dönüştürülmesinin başarılı olduğunu göstererek tüm değerleri başarıyla yazdırır.
Çıktı şu şekilde görünür:
Given I have entered customer name as Test Customer Test Customer -> done: SupportedSpecflowConversions.GivenIHaveEnteredCustomerNameAsTestCustomer('Test Customer') (0.0s) And I have entered customer account id as 0f8fad5b-d9cb-469f-a165-70867728950e 0f8fad5b-d9cb-469f-a165-70867728950e -> done: SupportedSpecflowConversions.GivenIHaveEnteredCustomerAccountIdAs(0f8fad5b-d9cb-469...) (0.0s) And I select sorting order as DESCENDING DESCENDING -> done: SupportedSpecflowConversions.GivenISelectSortingOrderAsAscending(DESCENDING) (0.0s) And I select number of transactions to be displayed as 25 25 -> done: SupportedSpecflowConversions.GivenISelectNumberOfTransactionsToBeDisplayedAs(25) (0.0s) Then I should see my account transactions success! -> done: SupportedSpecflowConversions.ThenIShouldSeeMyAccountTransactions() (0.0s)
Argüman Dönüşümleri
Bunu anlamak için uygulamalı bir örnek görelim. Destek, verilen zamanı dakikaya çeviren bir uygulamanız var. Misal: Kullanıcı girişi 1 gün ise - çıkış - 1440 ise, kullanıcı girişi 1 gün 2 saat 2 dakika ise, çıktı 1562 olmalıdır.
Şimdi, farklı türde girdileri desteklemek için, girdilerin türüne bağlı olarak farklı bağlama uygulamaları yazmanın gerekeceği görülebilir. Örneğin: Sadece gün bölümü olan girdiler için, gün, ay bölümü olan girdiler için ayrı bir adım uygulaması olacaktır - ayrı adım uygulaması vb. Olacaktır.
Bunun, Adım Bağımsız Değişken dönüşümü aracılığıyla tek adımlı bir uygulama yoluyla nasıl uygulanabileceğini ve sağlanan girdinin basitçe zaman damgası nesnesine dönüştürüldüğünü ve adım dönüşümü olarak adlandırılan orijinal adıma geri döndüğünü görelim.
Bunu, kısmen dönüştürülmüş değeri çağıran adıma döndüren girdinize birinci düzey bir normal ifade taraması olarak düşünün.
Tek bir dönüşümle 3 farklı giriş varyantına sahip özellik dosyasına, onu tam zaman aralığı nesnesine dönüştürüp geri dönerek bakın.
Scenario: Convert timestamp to minutes - variant 1 Given I have entered 50 days into the timestamp to minute converter When I press calculate Then the result should be 72000.00 on the screen Scenario: Convert timestamp to minutes - variant 2 Given I have entered 1 day, 2 hours, 3 minutes into the timestamp to minute converter When I press calculate Then the result should be 1563.00 on the screen Scenario: Convert timestamp to minutes - variant 3 Given I have entered 1 day, 1 hour, 1 minute, 30 seconds into the timestamp to minute converter When I press calculate Then the result should be 1501.50 on the screen
Yukarıdaki kod örneğinde vurgulanan değerlere bakın. Bunların hepsi aynı dönüşümle ilgilenilecek ve sonuç, çağıran Specflow Step'e geri gönderilen dönüştürülmüş bir TimeSpan girdi değeri olacaktır.
Aşağıdaki Dönüşüm uygulamasına bakalım:
(StepArgumentTransformation(@'(?:(d*) day(?:s)?(?:, )?)?(?:(d*) hour(?:s)?(?:, )?)?(?:(d*) minute(?:s)?(?:, )?)?(?:(d*) second(?:s)?(?:, )?)?')) public TimeSpan convertToTimeSpan(String days, String hours, String minutes, String seconds) { int daysValue; int hoursValue; int minutesValue; int secondsValue; int.TryParse(days, out daysValue); int.TryParse(hours, out hoursValue); int.TryParse(minutes, out minutesValue); int.TryParse(seconds, out secondsValue); return new TimeSpan(daysValue, hoursValue, minutesValue, secondsValue); }
Çerçevenin bir dönüşüm bağlama olduğunu bilmesi için Argument dönüşümünü uygulayan yönteme StepArgumentTransformation Attribute eklenmesi gerekir.
Argüman dönüştürmeleriyle ilgili dikkat edilmesi gereken diğer önemli noktalar şunlardır:
# 1) Adım Argüman dönüşümleri, her eşleşen adım için çalışır, yani adımın türüne bakılmaksızın, yani Verilmiş, Ne Zaman veya Sonra, Eşleşen her normal ifade için Dönüşüm gerçekleşir.
#iki) Dönüştürülen çıktının dönüş türüne bağlı olarak, gerçek çağırma adımı giriş parametresi için eşleşen dönüş türüne sahip değilse, dönüşüm gerçekleşmeyecektir.
Bunun anlamı, çağırma adımının dönüştürülmüş bir girdi gerektirdiğini, ancak dönüştürülen yöntemin dönüş türüyle eşleşmeyen bir şey olarak belirtilen giriş zaman damgasına sahip olduğunu varsayalım, bu durumda normal ifade eşleşmesi geçersiz kılınır ve dönüştürme gerçekleşmez.
'Verildi' adımını çağırmanın uygulamasına bakalım:
private TimeSpan ts; (Given(@'I have entered (.*) into the timestamp to minute converter')) public void GivenIHaveEnteredDaysIntoTheTimestampToMinuteConverter(TimeSpan tsTransformed) { ts = tsTransformed; }
Buradaki girdi parametresinin türüne bakın, yani başka bir türe değiştirilirse dönüştürme adımından döndürülen türle eşleşen TimeSpan. Örneğin String, bu durumda bağımsız değişken dönüşümü gerçekleşmeyecek ve normal ifade eşleşmesi orijinal Adım uygulaması tarafından geçersiz kılınacaktır.
Profesyonel İpucu: Burada dikkat edilmesi gereken önemli bir nokta, dönüştürülmesi gereken metnin tamamının adım argüman dönüşümüyle beslenmesi / eşleştirilmesi gerektiğidir. Bu nedenle, Verilen adım artık olası tüm girdi biçimlerini tek bir dizeye saracak ve dönüştürme normal ifadesi onu bir TimeSpan nesnesine dönüştürüp geri dönecektir.Specflow Tabloları
Specflow tabloları, değerlerin bir listesini adım uygulama işlevine iletmenin bir yoludur. Önceki makalelerimizde, Senaryo ana hatlarını ve Örnekleri kullanarak veriye dayalı testleri uygulama yoluna baktık. Ancak bu, senaryoyu öncelikle farklı girdilerle yürütmekti.
Burada, tablolarda, tüm verileri bir kerede tablo biçiminde veri sağlayan adım uygulamasına geçirmekle ilgilidir.
Örneğin, bir Öğrenci Yönetim Sistemini test ettiğiniz bir örneği düşünün ve yeni bir Öğrenci nesnesi oluşturmak için adınız, soyadınız, yaşınız, doğum yılı gibi birçok ayrıntı girmeniz istenir.
Bunun bir yolu, bu bilgilerin her birini ayrı bir Adım olarak geçirmektir; bu, esasen çok sayıda standart kod olacak ve her adımda, test edilmesi gereken aynı nesneyi güncelleyeceksiniz. Başka bir yol, karmaşık bir normal ifade oluşturmak ve tüm verileri aynı adımda iletmeye çalışmak olabilir, ancak bu oldukça hataya açık ve belirsizdir.
Burada masalar kurtarmaya geliyor. Specflow'un tablo özelliği sayesinde, öğrenci ile ilgili tüm girdi verileri aynı adım uygulamasına güzel bir tablo şeklinde gönderilebilir.
Özellik ve Adım uygulaması için aşağıda bir kod örneğini görelim:
Scenario: Pass data through Specflow tables for StudentInfo object Given I have entered following info for Student | FirstName | LastName | Age | YearOfBirth | | test | student | 20 | 1995 | When I press add Then i student should get added to database and entered info should be displayed on the screen
Tablo verileri yukarıdaki Senaryo Adımında vurgulanmıştır.
python ve c ++ sözdizimi
Specflow, her alanı kendi başınıza ayrıştırmak yerine, kullanıcı tarafından sağlanan giriş verilerinden bir nesne örneği oluşturmak gibi yararlı özelliklere doğrudan izin veren birçok TableHelpers sağlar.
Aşağıdaki adım uygulamasına bakalım:
private StudentInfo studInfo; (Given(@'I have entered following info for Student')) public void GivenIHaveEnteredFollowingInfoForStudent(Table table) { // converting supplied input data directly to instance of StudentInfo object studInfo = table.CreateInstance(); }
Yukarıda vurgulanan bölüme bakın. İşte sadece küçük bir kod satırı, tüm StudentInfo nesnesi (öğrenci veri alanlarını içeren bir POCO, yani ad, soyad, yaş, doğum yılı vb.)
Specflow tablolarıyla ilgili diğer bazı özellikler / kavramlar aşağıda gösterilmiştir:
# 1) Tablolar yatay veya dikey olabilir. Dikey tablolar daha çok anahtar-değer çiftlerine benzer ve yukarıdaki senaryoda daha çok ad-değer eşlemelerine benzer, yatay tablolar ise tek bir satırdaki bir nesneye ait tüm verileri içerir (tıpkı örneğimizde gördüğümüz gibi).
#iki) Dikey tablolar yalnızca tek bir .NET nesnesiyle eşlenebilirken, yatay tablolar da Nesne Kümesi veya Koleksiyonuna eşlenebilir.
# 3) Tablodaki her alan değeri, ayrıştırılan nesnede karşılık gelen tek bir alana eşleneceği için atomik olmalıdır.
Burada dikkat edilmesi gereken önemli bir nokta şudur: otomatik oluştur Tablo verileriyle adım bağlamalarında, Specflow bağlama oluşturucu bu tür giriş türlerini otomatik olarak hesaba katacak ve bunları geçerli bir tablo verileri olarak tanıyacaktır.
Sonuç
Bu yazıda Specflow'daki 2 önemli ve kullanışlı kavramı açıklamaya çalıştık.
İlk adım, Adım bağımsız değişken dönüşümleri Standart koddan kaçınmak için Specflow bağımsız değişkenleri için özel tür dönüşümlerine izin veren (ve test komut dosyasının daha modüler ve mantıklı görünmesini sağlar) ve baktığımız ikinci özellik şudur: Specflow Tabloları Bu, kullanıcı dostu bir tablo biçiminde tek bir adımda çok sayıda alanı / veriyi geçirmeniz gerektiğinde kullanışlıdır.
Yaklaşan eğitimimizde, projenin tüm paydaşları için kolay bir başvuru kaynağı olabilecek Pickles gibi açık kaynak araçları kullanarak Specflow'u farklı formatlarda kullanarak güzel belgeleri nasıl otomatik olarak oluşturabileceğiniz hakkında daha fazla bilgi edineceğiz.
PREV Eğitimi | SONRAKİ Eğitici
Önerilen Kaynaklar
- MongoDB'de Dağıtım: Adım Adım Eğitim
- Appium Studio'nun Adım Adım Kurulumu ve Kurulumu
- Specflow ve Selenium Webdriver Uçtan Uca Örneği
- QTP'yi ALM / QC ile Entegre Etmek İçin Adım Adım Kılavuz
- En Popüler 15 Specflow Mülakat Sorusu
- Gelişmiş Specflow Paylaşılan ve Kapsamlı Bağlamalar, Kancalar ve Adım Yeniden Kullanım
- MongoDB'yi Windows'a Kurun: Adım Adım Kılavuz
- JIRA'yı qTest ile Entegre Etme: Adım Adım Kılavuz