Na czym polega testowanie

Pisząc oprogramowanie, możesz sprawdzić, czy działa on prawidłowo, wykonując testy. Ogólnie rzecz biorąc, testowaniem to proces uruchamiania oprogramowania w określonym obszarze aby zapewnić prawidłowe działanie.

Udane testy mogą zapewnić, że po dodaniu nowego kodu, funkcji nawet uaktualnienie zależności, napisane przez Ciebie oprogramowanie nadal działa w oczekiwany sposób. Testowanie pozwala również zabezpieczyć przed nieprawdopodobnymi scenariuszami lub nieoczekiwanymi danymi wejściowymi.

Oto kilka przykładów zachowań w internecie, które warto przetestować:

  • Zapewnienie prawidłowego działania funkcji witryny po kliknięciu przycisku.
  • Potwierdzenie, że funkcja zespolona daje poprawne wyniki.
  • Wykonanie działania, które wymaga zalogowania się użytkownika.
  • sprawdzenie, czy formularz prawidłowo zgłasza błąd po wpisaniu nieprawidłowych danych.
  • Upewnij się, że złożona aplikacja internetowa nieprzerwanie funkcjonuje, ma małą przepustowość lub przechodzi w tryb offline.

Testowanie automatyczne a ręczne

Możesz testować oprogramowanie na 2 ogólne sposoby: testy automatyczne i ręczne i testowania.

Testy ręczne polegają na tym, że ludzie bezpośrednio uruchamiają oprogramowanie, np. wczytują i potwierdzić, że działa ona zgodnie z oczekiwaniami. Ręcznie które można łatwo utworzyć lub zdefiniować, np. czy witryna może się wczytać? Czy możesz na wykonanie tych działań? – ale każda z nich to ogromny koszt, czas dla ludzi. Ludzie są bardzo kreatywni, więc można przeprowadzić nazywanych testami eksploracyjnymi, i nadal nie jesteśmy w stanie wykryć błędów zwłaszcza przy wielokrotnym wykonywaniu tego samego zadania.

Zautomatyzowane testowanie to każdy proces, który umożliwia kodowanie i uruchamianie testów przez komputer, aby potwierdzić zamierzone działanie oprogramowania bez zlecenie człowieka wykonania jakichkolwiek powtarzanych czynności, takich jak konfiguracja lub sprawdzanie wyników; Co ważne, po skonfigurowaniu testów automatycznych możesz je często przeprowadzać. Jest to nadal bardzo szeroka definicja – warto podkreślić, które przybierają różne kształty. Większość zagadnień omawianych w tym kursie z automatycznymi testami.

Polega ona na testowaniu ręcznym, często jako wstęp do pisania zautomatyzowanego ale także wtedy, gdy testy automatyczne stają się zbyt zawodne, mają szeroki zakres lub nieporęczne.

Podstawy z przykładem

Dla nas, programistów stron internetowych, którzy piszą JavaScript lub powiązanych języków, zwięzły może to być skrypt podobny do tego, który uruchamiasz codziennie, za pomocą węzła lub przez wczytanie go w przeglądarce:

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");
}

Oto uproszczony przykład, który zawiera następujące informacje:

  • To jest test, ponieważ korzysta z oprogramowania (Fibonacci ) i dba o to, działa w zamierzony sposób, sprawdzając wyniki pod kątem oczekiwanych wartości. Jeśli działanie będzie nieprawidłowe, spowoduje to błąd, który JavaScript jest wyrażany, wysyłając Error.

  • Mimo że skrypt możesz uruchamiać ręcznie w terminalu lub jest to nadal test automatyczny, ponieważ może być uruchamiany wielokrotnie bez konieczności wykonywania żadnych pojedynczych czynności. Kolejna strona, na której testów.

  • Mimo że ten test nie korzysta z żadnych bibliotek – to JavaScript uruchamiać się w dowolnym miejscu – to nadal egzamin. Istnieje wiele narzędzi, które mogą Ci pomóc napisać testy, w tym te, które zostaną omówione w dalszej części tego kursu, ale Wszystkie nadal działają na podstawie podstawowej zasady powodowania błędu, jeśli coś poszło nie tak.

Testowanie bibliotek w praktyce

Większość bibliotek i wbudowanych platform testowych zawiera 2 główne podstawowe elementy, ułatwiają pisanie testów: testy i sposób definiowania niezależnych testów. Tematy te zostaną szczegółowo omówione w następnej sekcji Aplikacji i propozycji. innych elementów podstawowych. Ogólnie jednak pamiętaj, że prawie wszystkie wyświetlone lub zapisane testy zakończą się przy użyciu elementów podstawowych.

Asercje to sposób na połączenie sprawdzania wyniku i powodującego błąd, jeśli coś poszło nie tak. Możesz np. zwięźle streścić poprzedni test wprowadzając assert:

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");

Opcjonalnie możesz dodatkowo ulepszyć ten test, definiując niezależne testy. podzielone na apartamenty. Następujący zestaw niezależnie testuje mechanizm Fibonacciego i funkcji katalońskiej:

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);
  });
});

W kontekście testowania oprogramowania określenie test odnosi się do przypadku testowego. pojedynczy, niezależny, możliwy do omówienia scenariusz, taki jak „relacja między ciągi” z poprzedniego przykładu.

Testy z osobnymi nazwami przydają się między innymi do takich zadań:

  • To określanie, jak z upływem czasu test wypadnie pomyślnie lub negatywnie.
  • Warto wymienić błędy lub scenariusze według nazwy, aby w łatwiejszy sposób sprawdzić, czy jest już rozwiązany.
  • Przeprowadzanie niektórych testów niezależnie od innych, np. za pomocą filtra glob.

Jednym ze sposobów podejścia do przypadków testowych jest stosowanie „3 punktów A” testowania jednostkowego: aranżować, działać i zgłaszać. Zasadniczo każdy przypadek testowy:

  • Uporządkuj pewne wartości lub stany (może to być po prostu zakodowane na stałe dane wejściowe).
  • Wykonaj działanie, na przykład wywołaj metodę.
  • Zgłoś wartości wyjściowe lub zaktualizowany stan (za pomocą funkcji assert).

Skala testów

Przykładowe fragmenty kodu w poprzedniej sekcji opisują test jednostkowy, ponieważ testowania niewielkich części oprogramowania, często skupiając się na pojedynczym pliku. tylko dane wyjściowe z pojedynczej funkcji. Złożoność testów staje się coraz większa rozważyć kod z wielu plików, komponentów, a nawet różnych elementów powiązanych ze sobą systemów (niekiedy pozostają one poza Twoją kontrolą, takie jak usługa sieciowa czy zachowanie zależności zewnętrznej). Z tego powodu są często nazywane typami testów na podstawie ich zakresu lub skali.

Oprócz testów jednostkowych niektóre inne typy testów to m.in. test komponentowy testowanie, testy wizualne i testy integracji. Żadna z tych nazw nie ma bardzo rygorystyczne definicje, które mogą mieć różne znaczenie w zależności od bazy kodu. Należy więc pamiętać o nich jako wskazówkę i przygotowywać definicje, dla Twojej firmy. Jaki na przykład komponent jest testowany w Twoim systemie? Dla: dla programistów React, może to być dosłownie zmapowane na „komponent React”, ale mają dla programistów inne znaczenie w innych kontekstach.

Skala pojedynczego testu może umieścić go w pojęciu często odnoszącym się do jako „piramidę testowania”, co może być dobrą zasadą ustalania, co i sposób jego działania.

W piramidzie testowania
    a na samej górze – od kompleksowych testów (E2E), testów integracji (w środku),
    testów jednostkowych.
piramida testowania.

Pomysł ten powtórzono i obecnie dostosowano do różnych kształtów spopularyzowanych, takich jak diament testowy lub i testowania lodu. Priorytety pisania testów będą prawdopodobnie bazy kodu. Wspólną cechą jest jednak stosowanie prostszych testów, takich jak testy jednostkowe, szybciej się uruchamia, łatwiej się pisze (więc masz ich więcej) na ograniczonym zakresie, a złożone, takie jak testy kompleksowe, są trudne do pisania, ale mogą przetestować szerszy zakres. Najwyższej warstwa wielu testowanie „kształtów” są zwykle testowane ręcznie, bo niektóre interakcje z użytkownikiem jest zbyt skomplikowane, aby można było je sklasyfikować w automatycznym teście.

Tematy te zostaną rozszerzone w ramach typów raportów automatycznych.

Sprawdź swoją wiedzę

Jakie elementy podstawowe udostępnia większość bibliotek i platform testowych?

Usługa uruchamiania, która korzysta z dostawcy chmury.
Niektóre aplikacje biegowe oparte na przeglądarkach umożliwiają zlecenie testów, ale nie jest to normalna funkcja bibliotek testowych.
Twierdzenia, które powodują wyjątki, jeśli nie są spełnione.
Chociaż możesz zgłosić błąd, żeby nie zdać testu, assert() a jego odmiany są uwzględniane, ponieważ ułatwiają weryfikację do pisania.
Sposób podziału testów na piramidę testów.
Nie ma na to standardowego sposobu. Możesz poprzedzić prefiksem nazwy testów lub umieszczenie ich w różnych plikach, kategoryzacji nie jest wbudowana w większość platform testowych.
Możliwość definiowania niezależnych testów według funkcji.
Metoda test() jest uwzględniona w niemal wszystkich testach biegacze. To ważne, ponieważ kod testowy nie działa na najwyższym poziomie który umożliwia uruchomienie testu potraktowanie każdego przypadku testowego jako niezależną jednostką.