Perde Arkası: Makbuz Testini Nasıl Otomatikleştiriyoruz

Kabul testini yapmaktan hiç mutlu oldunuz mu? Delicious Brains’teki ekibimiz için, geçmişte sürümümüzü test etmek, görevler listesindeki en korkulan görevlerden biri haline geldi. Eklentimizi yüksek kalite standartlarına sahip tutuyoruz, böylece bir zorunluluktur, ancak manuel test çok sıkıcıdır ve pahalı geliştiricilerden saatler alabilir. Son zamanlarda, düzeltmenin zamanının geldiğine karar verdik. Ekle, i + Kabul test sürecini otomatikleştirmek için başlangıcım. Bu işe yarayacak mı? Beyni öldüren saat manuel testlerinden bizi kurtaracak mı? Daha iyi olacak mıyız? Bütün bunlar nafile bir çaba olacak mı?
Geçmişte manuel olarak nasıl test ettiğimiz ve uyguladığımız bazı otomatik gelir testlerini görmek de dahil olmak üzere, sürümden önce eklenti testi otomasyonumuz hakkında daha fazla bilgi edinmek için okumaya devam edin. Dikkatli olun, bu bir öğretici değil! Resepsiyon testi oldukça karmaşık olabilir, bu yüzden size bazı kodlar gösterecek olsa da, hala her şeyi nasıl düzenlediğimize dair bir resim vermek için tam ve özellikle burada. Gelir testi nedir? Peki, kabul testi tam olarak nedir ve neden yapıyoruz?
Lezzetli beyinler için, resepsiyon testi, müşterilerimize hazır olduğundan emin olmak için yaklaşan eklenti sürümünün test sürecinin son sürümüdür. Diğer şirketlerde (daha büyük) “müşteriler” veya temsilcileri serbest bırakma adayı test ettiklerinde ve umarım “kabul ederek” bültenleri imzaladığında. Alındıktan sonra üretime serbest bırakıldı (veya bizim durumumuzda sunucumuza yüklendik ve müşterilerimize piyasaya sürüldük). Gelir testi test birimlerinden çok farklıdır, çünkü yazılımı müşterinin bakış açısından test edersiniz, müşteri tarafından çözülemesi ve çözülemeyen tüm eylemleri ve senaryoları deneyin. Üniteyi test ederken, yazılım için yangın oluşturan sınıfı ve bireysel işlevleri test edersiniz. Makbuzu test ederken, düğmeyi tıklatırsınız, bağlantıya, metni girin, talimatları okuyun ve genellikle kullanıcının yaptığı gibi yazılımla etkileşime girersiniz. Makbuz testi yapmadan, yazılımın son kullanıcı tarafından kullanıldığında beklendiği gibi çalışacağından emin olamazsınız. Bu, müşterileriniz için uygun kaliteli ürünlere sahip olmanızı sağlamanın en iyi yoludur. Manuel yöntem Son 3 yılda, birçok WP Migrate DB Pro ve WP boşaltma S3 sürümlerinde yer aldım. Her biri ve herkes haksız bir serbest bırakma dönemi içerir. Takımdaki hiç kimse sürümü test etmeyi sevmiyor çünkü bu çok yavaş bir kılavuz, her test adımını ayrıntılı olarak geliştirmeye devam eden bir grup senaryoda yürüyor.
Yukarıdaki ekran görüntüsü, genellikle WP boşaltma S3 için kullandığımız serbest bırakma test komut dosyasının küçük bir kısmını gösterir.Komut dosyası, S3’teki veritabanı verilerinin veya nesnelerin daha fazla manuel olarak incelenmesini gerektiren 116 manuel adıma sahiptir.Test başarısız olursa, “X” i hücreyi kırmızıya değiştiren “sonuçlar” sütununa veya hücreyi yeşile dönecek şekilde geçerseniz “P” koyarsınız.Ekran görüntülerindeki “PPP” hücrelerini görüyor musunuz?Ayrıca, komut dosyası aşağıda, alan ve alt dizine dayalı multisite kurulum için tüm adımları geri döndürmenizi ve tekrar yapmanızı söyleyen iki satır vardır!Soul Destroyer.

Ayrıca Amazon Web Services eklentisi, WP boşaltma S3 Lite ve WP, S3 varlıklarımızı ve kolay dijital indirmeler, WooCommerce, Media değiştir, meta kaydırıcı, gelişmiş özel formlar ve WPML entegrasyonu için bir komut dosyası var. Ve bu sadece WP boşaltma S3 ile ilgili bir komut dosyasıdır. WP Migrate DB Pro, WP Migrate DB, WP Migrate DB Pro ve Eklenti Medya Dosyaları, CLI ve Multisite Araçlarını test etmek için bir dizi komut dosyasına sahiptir. Sürümü test ederken, 2-3 geliştiricisi, tüm ürün bileşenleri için tüm testleri çalıştıran yaklaşık bir haftaya bağlıdır. Genellikle bir geliştiricinin test etmeye başladığı “kovalamaca” biçimini kullanırız, genellikle “lite” sürümünden başlar. Lite eklentisi için herhangi bir sorun çözüldükten sonra, “Lite” testini başlatan ikinci geliştirici ile “Pro” sürümüne geçtiler. 3. geliştiriciye ihtiyaç duyulursa, diğer eklenti ekiplerinden birinden bir gönüllü çağrılır, böylece özelliklerin yayınlanmasına aşina olmayan biri “lastikleri tekmeleyebilir” ve 2. geliştirici profesyonel olarak hareket ettikten sonra Lite sürümünü test etmeye başlayabilir. Bazen daha küçük bir hata onarımının piyasaya sürülmesi, ilk geliştirici komut dosyasının bir ucundan başlayıp ikincisi diğer uçtan başlayarak, zaman kazanmak için ortadan geçerek “çaprazlama” formatını yapacağız.

Bildiğiniz gibi, bu eklentimiz için yayın döngüsünün popüler bir parçası değildir. Geliştirme süresi olması gerektiğinden biraz daha uzun sürebilir çünkü biraz endişeli hissediyoruz, çünkü bir serbest bırakma testi yapmamız ve bunun yerine serbest bırakma testi başlamadan önce yapılması gereken çok önemli şeyler (öksürük için öksürük nedenleri) bulmamız gerekiyor. Bu çok sayıda pahalı geliştirici harcayabilir, ancak kalite bizim için bir şirket olarak çok önemlidir, böylece test seviyesine ihtiyaç vardır. Geçmişte, çok teknik olan ürünlerimizi idare edebilecek profesyonel sınavları kullanmakta zorluk çektik. Eğer kendiniz başarılı olsaydınız, yorumlarda duymaktan mutluluk duyarız! Geçen yıl Viyana’daki şirketimizin geri çekilmesinde Brad, izlediği son test hakkında bir sunum getirdi ve bu da sorun hakkında büyük bir tartışmaya yol açtı. Bazı yükleri kolaylaştırmak için otomatik resepsiyon testini denemeye karar verdik. WP boşaltma S3 için bir şeyler başlatmak için gönüllü oldum, çok mutlu! Kabul testimizi teşvik etmek için kodlama kullanarak teknoloji seçimimizi nasıl otomatikleştiririz. Bazı ekiplerimiz zaten kodlama konusunda deneyime sahiptir ve dürüst olmak gerekirse, testinizi PHP’de yazmak istiyorsanız başka bir seçenek yoktur, bu yüzden bu tek olmasa da net bir seçimdir.
Geçmişte kodlama ile şimdiye kadar yaşadığımız en büyük sorun, testi çalıştırmak için gereken Selenium veya Phantomjs sunucusunun hazırlanmasıdır. Selenium ve Phantomjs, test web sitenize bağlanmak ve bağlantılar ve düğmelerle etkileşim kurmak, metin veya rapor saha içeriği girin veya DOM veya DOM’u rapor etmek, JavaScript’i çalıştırmak için “tıklayın” gibi komutlara yanıt vermek için API üzerinden taşınabilen başsız web tarayıcılar sağlar. Bu sunucunun ayarlanması biraz karmaşık olabilir. Ayrıca, yüklemek istemeyebileceğiniz Java veya diğer bağımlılıklara ihtiyaç duyabilirler ve ideal olarak testleri çalıştırabileceğiniz her zaman arka planda çalıştırmalıdır. Kabul testini çalıştırarak bir başka sorun, bir veya iki test web sitesine sahip olduğunuzdan emin olmaktır. Temiz bir durumda temiz olduğu bilinmektedir. Değilse, testinizle ilgili sorunun akıllı bir test web sitesinden kaynaklanmadığından emin olamazsınız. Yukarıdaki potansiyel sorunların üstesinden gelmek için, her işlemin saniyeler içinde otomatik olarak döndürülebilecek tutarlı bir ortama sahip olması için tüm test işlemini Docker konteynerinde çalıştırmayı seçtim. Her şeyi nispeten esnek tutmak için bir docker yazın, aynı anda çalışan birkaç kap çalıştırırız, çünkü her şeyi düz tutmak için docker kullanırız.
Yukarıdaki öz, S3 boşaltma WP alım testi için geçerli Docker-Compose.yml dosyasını içerir. Burada ayrıntılı olarak tartışmayacağım, ancak gördüğünüz gibi, diğer web sunucuları, veritabanı sunucuları, selenyum/phantomjs sunucuları, test koşucuları ve eklenti yapma hizmetleri için tutarlı kurulum noktaları sağlayan veri kapsayıcılarının bir kombinasyonu var. Bazı hizmetler, diğerlerine işlev görmeye bağlıdır, bu nedenle örneğin, Web-Server ve Selenium-Server-Chrom hizmetine kodekleme testi bağlantısını çalıştıran varsayılan kabul testleri hizmeti, çalıştırmadan ve çalıştırmadan hiçbir şey yapamaz. Yukarıda görebilirsiniz. WP boşaltma S3 deposundaki klasör yapısı Docker. Veri, PHP-CLI ve PHP-Server ile ilgili hizmetler için oluşturduğumuz özel bir Docker görüntüsümüz var, bu da WordPress veya Codecheption’ı çalıştırmak veya eklentimizi oluşturmak için gereksinimleri karşılamak için gerekli. Kabul testimiz, iki nedenden dolayı mevcut eklenti için ZIP dosyasına bağlıdır: böylece eklentilerin kurulumunu test edebiliriz ve müşterilerimizin alacağı ürünleri gerçekten test ederiz. Küçük bir bonus olarak, eklentimizi bir kaptan oluşturan bir Docker/Build-Plugins.sh komut dosyası yaptım, bu da geliştiricinin motorlarına homurdanma, iplik veya pusula gibi şeyleri yüklemesi gerekmediği anlamına geliyor. Bu, bizi özel bir yapı sunucusunda veya belki de birim testimizi yaptığımız gibi Travis CI aracılığıyla çalıştırmamızı düzenler. Docker klasöründe birkaç konfor komut dosyası var, ancak en önemli komut dosyası çalışma testleri.
Docker/Run-Tests.sh komut satırında çalıştırmak tüm makbuz test serilerini çalıştırmak için gereken her şeydir.Ancak selenyum/krom varsayılandan Selenium/Firefox veya Phantomjs gibi bir şeye geçmek için bir argüman verebilirsiniz.Örneğin, Firefox ile testler yapmak için: Docker/run -tests.sh -e Firefox Bir sonraki bölümde, kabul testini çalıştırırken çok sık kullandığımız en önemli argümanları öğreneceksiniz.KODEPTİST KABUL EDİNİZİ KABUL TESTİNİZİ KULLANMAK İÇİN KULLANIM TESTİĞİNİ KULLANMAK İÇİN KULLANIM TESİSİNİZİ İYİ BİR Klasör Hiyerarşisi’ne ayarlayabilirsiniz ve “-cept.php” ile biten herhangi bir şey bulmak için alfabetik sırayla geçecektir.
Kabul testimizi özel bir eklenti klasörüne ayırdık ve klasörü istediğimiz siparişi almak için 2 numaralı basamağla başlattık. Bu, klasörde benzer: her testin istediğimiz sırayla çalıştıklarından emin olmak için 3 haneli bir önek vardır. 3 haneli önek, test komut dosyalarını kurulum/ayarlar, düzenlemeler, medya yükleme, düzenleme vb. Gibi konu alanına gevşek bir şekilde gruplandırma. Kendi eklentimizin tüm testlerini çalıştırabiliriz: Docker/Run-Test -Cloudfront/01-002-DeactivateParent-Conce Çoğu komut dosyası temel hazırlık önkoşulları için diğer komut dosyalarına bağlıdır. Örneğin, kabulü/01-Amazon-s3-and-cloudfront/01-002-DeactivateParent-ccect.php şöyle görünüyor: <? PHP '01 -001-ACTIVATEPlugin-sept.php '; common_tests_dir ekleyin. 'DeactivaParentStd.php'; Daha önce temel ayarlar için 01-001-ACTIVATEPlugin-ccept.php kullanır ve çeşitli eklentilerde yeniden kullanılmak için ortak klasörde bir deacivateParentStd.php komut dosyası bulunur. 01-001-ACTIVATEPLUGIN-ECT.PHP de çok basit: <? PHP '_bootstrap.php' dahil; common_tests_dir ekleyin. 'ActivatePlugin.php'; Bu, fark yaratan her bir eklenti klasörünün sahip olduğu _bootstrap.php dosyasıdır, test sırasında kullanılan birçok değişkeni hazırlar. Aşağıdakiler kabul/01-Amazon-s3 ve cloudfront/_bootstrap.php: slug = ‘Amazon-Web-Services’; $ ebeveyn-> baseame = ‘Amazon-Web-Services’; $ ebeveyn-> name = ‘Amazon Web Services’; $ option_name = ‘tantan_wordpress_s3’; $ option_version = ‘5’; $ option_version_name = ‘post_meta_version’; $ default_bucket = ‘wpos3.Acception.testing’; $ default_region = ”; $ default_cloudfront = ‘xxxxxxxxxxc.croudfront.net’; $ İ = yeni kabul ($ senaryo); En önemli değişken sonunda bir $ i’dir, burada kodlama tüm sihrini yapar. Kabul/Common/DeActivateParentStd.php’de $ i’nin kodlama işlevini çağırmak için yaygın bir şekilde kullanıldığını görebilirsiniz: assertNotEmpty ($ slug, ‘Slug Boş Değil’); $ İ-> assertNotEmpty ($ plugin_slug, ‘plugin_slug boş değil’); $ İ-> assertNotEmpty ($ name, ‘ad boş değil’); $ İ-> assertNotEmpty ($ ebeveyn, ‘ebeveyn boş değil’); $ İ-> loginasadmin (); $ İ-> amonPluginsPage (); // Ana eklentiler için mutlu yol … $ i-> seepluginAvigation ($ parent-> slug); // … ve hedef eklenti. if (! $ i-> can (‘seepluginActive’, $ slug) &&! $ i-> Can (‘SeeplugInactive’, $ plugin_slug)) {$ i-> başarısız (‘etkinleştirilemedi’. $ slug); } // Üst eklenti bildirim yüklemez. Global $ wp_plugin_dir; RENAME ($ wp_plugin_dir. ‘/Wp-concent/eklentileri/’. $ Parent-> baseame, $ wp_plugin_dir. ‘/Wp-concent/eklentileri/’.

.Bak ‘); $ İ-> amonPluginsPage (); $ İ-> SeeplugIndeActivated ($ ebeveyn-> slug); $ İ-> bkz (“{$ name}, {$ parent-> name} eklentisini gerektirdiği için devre dışı bırakıldı. Kurulun ve etkinleştirin.”); RENAME ($ wp_plugin_dir. “/wp-content/eklentileri/{$ parent-> baseamame} .bak”, $ wp_plugin_dir. // Ana eklentisini bildirim yoluyla etkinleştirin. $ İ-> amonPluginsPage (); $ İ-> SeeplugIndeActivated ($ ebeveyn-> slug); $ İ-> bkz (“{$ name} {$ parent-> name} eklentisini gerektirdiği için devre dışı bırakıldı. Zaten yüklü görünüyor.”); $ İ-> Click (‘#’. $ Plugin_slug. ‘-Activate-pant’); $ İ-> SeepluginAktiveTive ($ ebeveyn-> slug); Kodekti, işlevinin adını sever, böylece yaptığınız bir eylem olarak okunabilir ve belirtildiği gibi gerçekleşmeyi umabilir. Yani, yukarıdaki kodda “Yönetici olarak girdim”, “Eklenti sayfasındayım” veya “Eklentinin etkinleştirildiğini görüyorum” gibi şeyleri görebilirsiniz. Kodlama diyorum, ancak kodlama için en iyi WP tarayıcısı WordPress uzantısının birçok kullanımı var. $ İ-> amonPluginsPage (); URL’yi bilmek zorunda kalmadan WordPress Gösterge Tablosuna yüklenen eklentiler listesine gitmek veya SeepluginActive ($ parent-> slug);
Bir eklentinin etkin olup olmadığını test etmek için.WP tarayıcısı, birçok kod tasarrufu sağlayan diğer birçok konfor işlevini içerir, Teşekkürler Luca!Yukarıdaki kod en basit testlerimizden bazılarından geliyor.Ayrıca, farklı senaryolar için farklı parametrelerle yaptığımız sınıftan gerçekleştirilen tüm işlevsellik yollarını, farklı çevresel değişkenlere sahip farklı eklentiler tarafından kullanılabilir.Gerçekten biraz karmaşık ve şimdi eklenti alanlarımızın bazılarını manuel olarak ve çok daha kısa sürede yaptığımızdan daha kapsamlı bir şekilde test ediyor.Bu, WP Boşaltma S3 varlıkları için kabul testini oluşturan 11 komut dosyasından 25 -mo -Minute’dur.

Başarısızlık biraz renk vermek için gerçekten kasıtlıydı ve hatanın nasıl olduğunu hissettiniz ve belge URL’sinin test edildiği sırada çalıştırılan sitemize versiyondaki artıştan dolayı açıktı.😉.Tam test devresinin 50 komut dosyası vardır ve çalıştırılması yaklaşık 5 saat sürer!Düzgün mü diyorsun ha?Engel olmadan otomatik alım testleri hazırlayın.WP boşaltma S3 için bu kabul testini geliştirirken benim için en büyük sorun – ve şimdi WP Migrate DB Pro için bir test yazan Jeff kanıtlayacak – çok yavaş bir geri bildirim döngüsü.En kısa komut dosyamızın çalıştırılması birkaç dakika sürer, ancak Amazon S3 ile kapsamlı etkileşimi olan bazı daha uzun komut dosyalarının tüm senaryoları tamamlaması 30 dakika sürebilir.Gelecekte daha fazla test yaparak bunu geliştirebiliriz;
Ancak bir test yazmanın bir nedeni, serbest bırakma döngüsünün sonunda ve bazen döngü boyunca arka planda çalışan bir şeye sahip olmak olduğunda, çok fazla komut dosyasını kırmak için büyük bir destek yoktur. Buna ek olarak, test geliştirirken, destek için çeşitli destek taleplerine yanıt vermek, diğer ekip üyeleri tarafından para çekme taleplerini veya genel olarak GitHub veya Slack sorununda sorunlara neden olmak için çok zamanım var. Diğer iki WP boşaltma ekibi üyesi yeni bir sürümle çatlak yaparken temel bir test yazmaya atandığım için, eklenti değiştiği için geliştirmenin yasal olarak kabul testini bozacağı zamanlar var. Bu benim için oldukça acı verici, ama şimdi tüm ekibin kabul testini mutlu etmekten sorumluyuz, her geliştiricinin hasar verebilecek değişiklikler yaptıklarında testi güncellemesi gerekiyor. Her geliştirici şimdi yeni işlevselliğe de bir test komut dosyası eklemelidir. Mevcut Docker ayarı ile yakın zamanda bulduğum bir sorun, MacOS’un (ve pencereden şüpheleniyorum) konteynerden sahipliğe ve iznine sesle monte etme yeteneği için çok güvenli hale getirmem ve Docker’a güvenmemdir. kullanıcının dosyasının. Linux üzerindeki testlerimizi gerçekleştirmeye çalıştığımda, bir web sitesi düzenleyemedim veya NPM veya besteci gereksinimlerini yükleyemedim, çünkü “www-data” kullanıcısı olarak monte edilemediği noktaya yazamıyor
. Umarım bunun üstesinden gelmek ve UID ve kullanıcı GID teknik özelliklerini etkinleştirmek için .env dosyalarını kullanmak için Docker tabanlı bir şeytanBox ile aynı yöntemi kullanacağım. Aslında, bir noktada, her bir geliştiricinin, web sunucusunun farklı bir kombinasyonu ve .env dosyasında belirtilen PHP sürümüyle kabul testini kolayca çalıştırabilmesi için şeytanbox’ı kaplamak ve genişletmek iyi olabilir, Çok zaman ayırın. çaba göstermek. Bu yardımcı olur mu? Oh evet, kabul testinin otomatikleştirilmesi, salınımı test ederken ağrıyı azaltmaya yardımcı olmalıdır. Şu anda testlerin% 75’i Amazon Web Hizmetleri ve WP boşaltma S3 Lite için genellikle manuel olarak çalıştırıyoruz. 🎉. Bu bizim için büyük bir zafer. Tüm bu testler yoluyla manuel olarak olma ihtiyacını ortadan kaldırmak sadece WP boşaltma S3 Lite’ı test ederken zamandan tasarruf etmekle kalmaz, aynı zamanda çoğu test WP boşaltma varlıkları S3 ve WP boşaltma S3 için tekrar yapılması gerektiğinden, test için de zaman kazanırız. Sürüm başına geliştirici başına en az birkaç günlük test tasarrufu sağlıyoruz (belki daha fazla olsa da). Her sürümde depolanan beyni öldürmek için dört ila altı gün!

admin

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir