Bir web form sitesini nasıl test ederim?


26

Bir web form sitesini nasıl test ederim? Bana öyle geliyor ki, bunun çoğu devlete ve kullanıcı girdisine bağlı olarak mümkün olmayacak.

Mümkün değilse, geçerli bir otomatik alternatif var mı?


2
Otomatik kullanıcı arayüzü testi istiyorsanız, Selenyum gibi bir şeye ihtiyacınız olacak. Ancak, otomatik ünite testi istiyorsanız , Selenyum'a ihtiyacınız yoktur. Sadece doğru desenlere ihtiyacınız var. Cevabımı gör.
Matthew Rodatus

Yanıtlar:


22

Evet yapabilirsin. Sadece endişelerinizi iyi bir şekilde ayırmak için dikkatli olmalısınız. Kısacası, tüm mantığınızı kodların arkasından kaldırmanız ve diğer sınıflara koymanız gerekir.

Bunu yapmanın iki yaygın yolu vardır.

Basit bir yöntem, tüm etkinlik işleyicilerinizi "Sistem bana hangi bilgileri veriyor? Sayfada hangi bilgileri doldurmam gerekiyor?" Şeklinde yeniden düşünmektir. ve sonra bu dönüşümü yapan bir servis sınıfı sağlayın.

Bu durumda, servis katmanı sunum katmanınızın doğası hakkında çok az şey bilmelidir. Yine de hizmetten döndürülen verileri almanız ve WebForm'un doğru bileşenlerini kodunuzun arkasına yerleştirmeniz gerekir ve bu durum test edilmeden kalır (en azından birim sınamalarında hala tümleştirme sınamalarını kullanabilirsiniz). Fakat bu nadiren kodun yanlış gittiği yerlerde, mantıkta başarısızlığın olasılığı daha yüksektir.

Model View Presenter desenini kullanmak için daha karmaşık, ancak daha etkili bir yoldur . Bunu denediğimizde, Sunucular'ın hızla çerçeveye çok bağlı olduklarını ve MVP'yi ne kadar fazla geliştirirsek, MVP'nin MVC'nin gerçekten MVC olmak istediği ancak olamayacağının ne kadar net olduğunu gördük.

Bununla birlikte, diğerleri bunu çok başarılı bir şekilde yaptı - ağır yükü kaldırmak için bir webformsmvp çerçevesi bile var - bu nedenle kilometreniz değişebilir.


1
@jmoreno: Güzel yakalayış! WebForms'u unuttum ve MVP bile son 5 yılda var.
pdr

16

Açıkçası, tüm web formları sayfası bir birim değildir ve bu nedenle birim test edilemez. Ancak, otomatikleştirilmiş testler için yapabileceğiniz bazı şeyler var:

  • Birim, sayfanın tek tek bileşenlerini test eder (gerçek mantığı gerçekleştiren herhangi bir yöntem)
  • Sayfa tarafından kullanılan birim test bileşenleri (özel kontroller, temel işletme mantığı, vb.)
  • otomatik işlevsellik testi (bir tarayıcıyı uzaktan kontrol ederek veya cURL gibi bir şey aracılığıyla HTTP istekleri göndererek)
  • otomatik penetrasyon testi (olası enjeksiyon noktalarını bulmaya çalışacak ve sayfanızda zararsız ancak tespit edilebilir enjeksiyon saldırılarını otomatik olarak gerçekleştirecek araçlar vardır)
  • yük testi
  • yerleşimi kullanılabilirlik ve ev tarzı kurşun noktalarının bir listesine göre kontrol etmek (bu otomatikleşmesi çok zor olsa da, genellikle sadece şu anda manuel olarak yapmak daha uygundur)

-1 Maalesef, Yük testi, penetrasyon testi ve düzen kontrolü ünite testi ile ilgisi yok
Tom Squires

2
@TomSquires: elbette değiller ve cevabımı dikkatlice okursanız, asla söylemediğimi fark edeceksiniz. Ancak soru, genel olarak birim testleri ve otomatik test kavramlarını karıştırıyor gibi gözüküyor, bu yüzden bir web formuna atabileceğiniz çeşitli anlamlı otomatik testler listeledik.
tdammers

Kabul et, bir web sayfasını test etmenin bir tür entegrasyon testi olması ve daha sonra kesin tanımlarla bir birim testi olması daha muhtemeldir, ancak yine de yapabileceklerinizi otomatikleştirmek iyi olur
jk.

6
@TomSquires: tamamen haksız yere oy kullanma. Kendi sorunuz, birim sınamasıyla ilgisi olmayan tüm siteyi test etmekle başlar. Tdammers, bütünü ve parçaları test etmenin çeşitli yollarını belirledi ve birim testinin nerede uygun olduğunu belirledi. +1
azheglov

3
Yeterince adil. Geri alıyorum
Tom Squires

9

Sorunun "ünite" kısmını kaçırdığım için özür dilerim ...

SeleniumHQ , ön uçtaki testler için arkadaşınızdır. Kara kutu testi gibi bir birim testi değildir. Hala geçerli test durumlarını düşünmelisin ...


1
+1 Ben de aynısını söylemek için "cevabını gönder" e bastığımda cevabın geldi.
yannis

2
Ayrıca, op birim sınaması hakkında soru sorduğundan, kullanıcı sorusunun aslında ne olduğunu, kullanıcı girdi öğelerini sınarken daha uygun (mantıklı, uygulanabilir) bir test (pratik) olduğunu ekleyelim .
yannis

+1 çünkü onu kullanmaya devam ettim ama buna asla yaklaşamadım. Kullanan var mı, iyi ve uygulamaya değer mi?
NimChimpsky

6
Selenyum fantastik bir araçtır, ancak birim testi ile hiçbir ilgisi yoktur.
pdr

Doğru, sanırım sorudaki bu bilgiyi
atladım

6

Tecrübeden konuşma: Sadece doğru yapıldıysa. "Doğru" derken, en az kod gerisi ve Web Formunu "aptal" yapmak için yukarıda belirtilen Model-View-Presenter gibi bir şey demek istiyorum. Bu, genellikle kahverengi alan uygulamalarında çok zor olduğunu kanıtlar çünkü akılda tutularak tasarlanmadılar ve sayfaları kullanmak için yeniden yazma / yeniden yazma çabası Herkül'e yakın bir çaba.


1

watin

Birim web testlerinin, genel olarak bir regresyon hatası veya yeni projeler hakkında bir fikir vermek olsa bile, oldukça faydalı olduğunu düşünüyorum.

Durum söz konusu olduğunda, birim testlerinizi UI dışı testlerle yaptığınız gibi oluşturursunuz - testin başında veritabanını temizlerler ve başlangıç ​​durumu dışında hiçbir şey içermek için veritabanını yeniden oluştururlar. Her birim testi daha sonra tek bir sayfayı veya genellikle bir sayfada farklı bir görevi içerir.

http://watin.org/ başka bir web test aracıdır ancak C # /. NET'tir. Testleri birim testleri olarak yazıyorsunuz:

[Test] 
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}

Şu anda IE tabanlı ancak Firefox ve Chrome için bazı deneysel destekleri var. Javascript etkileşimi dahil olmak üzere manuel testlerde yapabileceğiniz her şeyi hemen hemen otomatikleştirebilirsiniz.


Ack 2016 olduğunu. Bugünün WatiN sitesini ziyaret etmesi bana WatiN'in öldüğünü gösteriyor. Dokümanlar güncel değil, seyrek ve videolar oynatılmıyor. Ben am değil şikayet - Ben açık kaynak gönüllü araçlar için büyük minnettarlığımı - Bu yorumu benim gibi diğer gel-son zamanlarda kişileri yardımcı olmaktır. Cevap gayet iyi, sadece başlamanın kendine güdümlü uygulamalı öğrenme gerektirebileceğini belirtmek yeterli.
qxotk

1
WatiN yolunu düşünen herkes için daha fazla yardım, onayın durgun olduğunu + bugünün
neresinde bakılacağını onaylayın

0

Bir web sitesini gerçekten test edemezsiniz, çünkü web istekleri bir tel üzerinden (veya bir TCP yığını üzerinden) gerçekleşir. Bu nedenle, testler "birim testi" tanımına uymaz, muhtemelen uçtan uca testler olurlar.

Bu tür testler için, sahnelerin arkasında bir web tarayıcısı çalıştıran Selenyum gibi bir paketi kullanabilirsiniz. Yine de bir uyarı kelimesi: genellikle bu tür bir test çok zor ve tahmin edilemez, çünkü birçok hareketli parça var!

Daha da ilginç olanı, neden web formlarını test etmeniz gerektiğine dair biraz endişelendim . Sen arkasındaki koda çok fazla mantık koymuyorsun ve herhangi bir şansın olduğu anemik bir iş mantığın yok mu?


-1

Yasemin

Geçtiğimiz 5 yılda, Jasmine ön uç ünite testleri için önemli bir araç olarak ortaya çıkmıştır. Genellikle, Düğüm ve npm ile otomatik yapı testine dahil edilir

Başına ) https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework :

Jasmine, JavaScript için açık kaynaklı bir test çerçevesidir. [2] Herhangi bir JavaScript etkin platformda çalışmayı, uygulamayı veya IDE'yi etkilememeyi ve okunması kolay bir sözdizimine sahip olmayı hedeflemektedir. ScrewUnit, JSSpec, JSpec ve RSpec gibi diğer birim test çerçevelerinden büyük ölçüde etkilenir. [3]

Javascript'in tüm sözlerine rağmen, düz bir web formunun birim testi için de kullanılabilir.


Javascript web formlarında kullanılırken, kullanıcı arayüzünü güncellemenin birincil yöntemi değil
Tom Squires 9

Doğru. Ancak alternatif ...? Bu yüzden, amaç olmasa da, Jasmine çok iyi çalışıyor. Ayrıca, sözdizimi Ruby programcılarının sevdiği RSpec ile neredeyse aynı.
Michael Durrant,

-2

ASP.NET

Bir ASP.NET sitesi geliştirirken, birim sınamalarını çalıştırabildik:

  • Alan adı
  • BL denetleyicileri / sunum
  • Web Formları sayfalarının kod ekleme

Mimarinize bağlı olarak bunların hepsini TDD yapmak mümkündür. Test edemediğiniz tek şey işaretleme dosyasının düzenidir.


3
Bu cevap, "nasıl" sorusuna "evet mümkün" diyor. Tam olarak yardımcı değil.
RubberDuck
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.