Test nedir?

Yazılım yazarken düzgün çalıştığını test ederek doğrulayabilirsiniz. Test, genel anlamda bir yazılımı belirli bir alanda çalıştırma süreci olarak tanımlanabilir amaçlandığı gibi çalışmasını sağlamak için kullanır.

Başarılı testler, sitenize yeni kod, özellik veya özellik ekledikçe bağımlılıklarınızı yükseltebilirseniz, önceden yazmış olduğunuz yazılım şekilde çalışmaya devam etmesini sağlayabilirsiniz. Testler, beklenmedik girişlere karşı yazılım oluşturmak anlamına gelir.

Web'de test etmek isteyebileceğiniz bazı davranış örnekleri:

  • Bir düğme tıklandığında bir web sitesinin özelliğinin doğru bir şekilde çalıştığından emin olmak.
  • Karmaşık bir fonksiyonun doğru sonuçları verdiğinin doğrulanması.
  • Kullanıcı girişi gerektiren bir işlemi tamamlama.
  • Yanlış biçimlendirilmiş veri girildiğinde bir formun düzgün şekilde hata bildirip bildirmediğini kontrol etme.
  • Kullanıcı çok fazla işlem yaptığında karmaşık bir web uygulamasının çalışmaya devam etmesini sağlamak. veya çevrimdışı olabilir.

Otomatik ve manuel test

Yazılımınızı iki genel yöntemle test edebilirsiniz: otomatik test ve manuel teşvik etmek anlamına gelir.

Manuel test, yazılımı doğrudan çalışan insanlar içerir. Örneğin, bir web sitesini ziyaret ederek ve beklendiği gibi davrandığını doğrular. Manuel testlerin oluşturulması veya tanımlanması basittir. Örneğin, siteniz yüklenebilir mi? Şunları yapabilir: nasıl yardımcı olabilir? ancak her bir aşamanın maliyeti zaman harcıyor. İnsanlar çok yaratıcı olsalar da, bir tür test Keşif amaçlı testler olarak bilinen bu testler, başarısızlıkları veya sorunları arasında tutarsızlıklar olduğunu unutmamanız gerekir.

Otomatik test, testlerin kodlanıp çalıştırılmasına olanak tanıyan herhangi bir süreçtir. yazılımınızın amaçladığı davranışı doğrulamak için tekrar tekrar bir bilgisayar kurulum veya sonuçları kontrol etme gibi yinelenen adımları bir insandan isteyerek. Daha da önemlisi, otomatik test yapılandırıldıktan sonra sık sık çalıştırılabilir. Bu yine de çok geniş bir tanımdır ve otomatikleştirmenin, testler her türlü şekil ve biçimdedir. Bu kursun büyük bir kısmı otomatik test ile yapmayı öğreteceğim.

Manuel testler otomatik yazmanın öncüsü olarak devreye girmiştir. otomatik testler çok güvenilmez ve kapsamlı olduğunda da veya metin yazmakta zorlanırlar.

Bir örnek üzerinden temeller

JavaScript veya ilgili diller yazan web geliştiricileri olarak, bizim için otomatik test, belki de her gün çalıştırdığınız bunun gibi bir komut dosyası olabilir. Düğüm üzerinden veya bir tarayıcıya yükleyerek:

import { fibonacci } from "../src/math.js";

if (fibonacci(0) !== 0) {
  throw new Error("Invalid 0th fibonacci result");
}
const fib13 = fibonacci(13);
if (fib13 !== 233) {
  throw new Error("Invalid 13th fibonacci result, was=${fib13} wanted=233");
}

Bu, aşağıdaki analizleri sağlayan basitleştirilmiş bir örnektir:

  • Bu bir test olduğundan bazı yazılımlar çalıştırdığından (Fibonacci işlevini) yerine getirir ve istenen şekilde çalışıp çalışmadığını kontrol eder. Bunun için sonuçları düşünülebilir. Davranış doğru değilse bir hataya neden olur ve JavaScript, Error hatası vererek ifade eder.

  • Bu komut dosyasını terminalinizde manuel olarak çalıştırıyor veya tekrar tekrar çalıştırılabileceğinden bu hâlâ otomatik bir testtir tek tek işlemler yapmanıza gerek kalmadan. Sonraki sayfada, konulu videomuzu izleyin.

  • Bu test herhangi bir kitaplık kullanmasa da, kitaplığı bulunan bir JavaScript yardımcı olabilir. Bu hâlâ bir test. Paydaşlarla iletişime geçmek bu kursun ilerleyen bölümlerinde ele alınacaklar da dahil olmak üzere testler yazmanızı, ancak hepsinde hataya neden olma ilkesi temelinde bir şeyler ters gidebilir.

Kitaplıkları pratikte test etme

Çoğu kitaplık veya yerleşik test çerçevesi testlerin yazılmasını kolaylaştırın: iddialar ve bağımsız testleri tanımlama. Bu konular, bir sonraki bölümde iddialar ve ele alacağız. Ancak genel hatlarıyla gördüğünüz veya yazdığınız neredeyse tüm testlerin kullanmaya başladım.

Onaylamalar, bir sonucu kontrol etmeyi ve varsa hataya neden olmayı bir arada bir şeyler ters gidebilir. Örneğin, önceki testi daha kısa ve öz hale getirebilirsiniz. assert sunarak:

import { fibonacci } from "../src/math.js";
import { assert } from "a-made-up-testing-library";

assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");

İsteğe bağlı olarak, bağımsız testler tanımlayarak bu testi daha da iyileştirebilirsiniz süitler olarak gruplandırılmıştır. Aşağıdaki paket, Fibonacci'yi bağımsız olarak test eder fonksiyonunu ve Katalanca işlevini kullanın:

import { fibonacci, catalan } from "../src/math.js";
import { assert, test, suite } from "a-made-up-testing-library";

suite("math tests", () => {
  test("fibonacci function", () => {
    assert.equal(fibonacci(0), 0, "Invalid 0th fibonacci result");
    assert.equal(fibonacci(13), 233, "Invalid 13th fibonacci result");
  });
  test("relationship between sequences", () => {
    const numberToCheck = 4;
    const fib = fibonacci(numberToCheck);
    const cat = catalan(numberToCheck);
    assert.isAbove(fib, cat);
  });
});

Bu yazılım testi bağlamında isim olarak test, test durumunu ifade eder. bağımsız, adreslenebilir bir senaryodur. Örneğin, diziler" test durumunu inceleyelim.

Ayrı ayrı adlandırılmış testler, diğer görevlerin yanı sıra aşağıdaki görevler için yararlıdır:

  • Bir testin zaman içinde ne kadar başarılı ya da başarısız olduğunu belirleme.
  • Bir hatayı veya senaryoyu adla vurgulayın. Böylece, hatanın veya senaryonun çözüldüğünde ortaya çıkar.
  • Bazı testleri diğerlerinden bağımsız olarak (ör. bir glob filtresi aracılığıyla) çalıştırma.

Test senaryolarını düşünmenin bir yolu, "üç A" kullanmaktır bir diğer seçenek: düzenleme, harekete geçme ve iddiada bulunma. Her test durumunun temelinde:

  • Bazı değerleri veya durumu düzenleyin (bu, sabit kodlu giriş verileri olabilir).
  • Bir işlem (ör. yöntem çağırma) gerçekleştirin.
  • Çıkış değerlerini veya güncellenen durumu (assert kullanarak) doğrulayın.

Testlerin ölçeği

Önceki bölümde verilen kod örnekleri birim testi açıklar çünkü genellikle tek bir dosyaya odaklanarak yazılımınızın küçük kısımlarını test eder. tek bir işlevin çıktısı olabilir. Siz geliştirdikçe test karmaşıklığı da artar birden çok dosyadan, bileşenden, hatta birbirine bağlı farklı kodlardan sistemleri (bazen sizin kontrolünüzün dışındadır; örneğin bir ağ hizmeti bir dış bağımlılığın davranışını gösterir). Bu nedenle, test türleri genellikle kapsamına veya ölçeklerine göre sıralayın.

Birim testleri ile birlikte, diğer test türlerine örnek olarak bileşen , görsel test ve entegrasyon testi. Bu adların hiçbiri bir anlam ifade eder ve size bağlı olarak farklı anlamları olabilir. kod tabanı hakkında bilgi edinin. Bu nedenle, bunları bir rehber olarak kullanın ve en iyi uygulamaları sizin için faydalı olacaktır. Örneğin, sisteminizde test edilen bileşen nedir? Örneğin, Tepki veren geliştiriciler. Bu, kelimenin tam anlamıyla bir "Tepki bileşeni" ile eşlenebilir, ancak farklı bağlamlarda geliştiriciler için farklı bir anlama sahip.

Bireysel bir testin ölçeği, onu genellikle adı geçen bir kavramın içine yerleştirebilir. bir test piramidi gibi düşünün. Bu, test sadakati açısından iyi bir nasıl çalıştığını gösterir.

Test piramidi,
    üst kısımda uçtan uca (E2E), ortada entegrasyon testleri ve ortada
    birim testlerini kullanabilirsiniz.
Test piramidi.

Bu fikir yinelendi ve diğer çeşitli şekiller artık test elması veya test elması gibi popüler test ediyoruz. Test yazma öncelikleriniz muhtemelen, deneme kullanabilirsiniz. Ancak yaygın bir özellik, birim testleri gibi daha basit testlerin genelde daha hızlı çalışır, daha kolay yazılır (dolayısıyla daha fazla sayıda fırsatınız olur) ve sınırlı bir kapsamı test ederken, uçtan uca testler gibi karmaşık testler daha geniş bir kapsam test edebilir. Aslında, birçok mağazanın en üst katmanı "şekilleri" test etme manuel testtir, çünkü kullanıcı etkileşimlerinin bir kısmı otomatik teste kodlamak için çok karmaşıktır.

Bu türlerin kapsamı, otomatik test edilir.

Öğrendiklerinizi sınayın

Çoğu test kitaplığı ve çerçevesi hangi temel unsurları sağlar?

Bulut sağlayıcı kullanan bir koşucu hizmetidir.
Bazı tarayıcı tabanlı koşucular, testlerinizi dış kaynaklardan tamamlamanızı sağlayan bir yöntem sunarlar, ancak test kitaplıklarının normal bir özelliği değildir.
Memnun kalmamaları durumunda istisnalara neden olan iddialar.
Testte başarısız olmak için hata bildiriminde bulunabilseniz de, assert() ve varyasyonları, kontrolleri kolaylaştırdığı için dahil edilme eğilimindedir. tıklayın.
Testleri, test piramidinde kategorilere ayırma yöntemi.
Bunu yapmanın standart bir yolu yoktur. Örneğin, adlarını kullanabilir veya farklı dosyalara yerleştirebilirsiniz. sınıflandırma çoğu test çerçevesine dahil değildir.
Fonksiyona göre bağımsız testleri tanımlama beceri.
test() yöntemi neredeyse tüm testlere dahildir koşucu oyunları. Test kodu üst düzeyde çalıştırılmadığı için ve test çalıştırıcının her test durumunu yalnızca bir test bağımsız birimdir.