Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
16m 21s
Podczas tworzenia i testowania nowoczesnych aplikacji, zwłaszcza tych z interfejsem webowym, programiści często muszą symulować scenariusze rzeczywiste, takie jak opoźnienia API i niespodziewane odpowiedzi błędów. Aby to umożliwić, Tim Corey przedstawia bardzo praktyczne przejście w lekcji swojego kursu zatytułowanej "Dodawanie opoźnień i kodów błędów - Budowanie przykładowego API w C#". W tym wideo Tim ilustruje, jak wzbogacić minimalistyczne API w C# o sztuczne opoźnienia i niestandardowe odpowiedzi błędów — bezcenne narzędzia do symulacji negatywnych sytuacji podczas testowania.
W tym artykułe przeprowadzimy cię przez koncepcje i implementacje, które Tim demonstruje na wideo.
Tim rozpoczyna lekcję, podkreślając wartość posiadania przykładowego API podczas nauki tworzenia stron internetowych. Takie API daje ci coś konkretnego, aby testować swoje front-endowe aplikacje.
Do końca kursu Tim zamierza zbudować solidne API, które obejmuje:
Przykładowe dane
Dokumentację
Sprawdzenia zdrowia
Symulowane opoźnienia
Symulowane błędy
Opcje wdrożenia przez Docker i VPS
W tej konkretnej lekcji Tim koncentruje się na symulacji opoźnień i generowaniu kodów błędów dla realistycznego zachowania API w trudnych warunkach.
Tim zaczyna, dodając opcjonalny parametr opoźnienia do konkretnych punktów końcowych API — szczególnie tych dotyczących danych kursu. Jego celem jest symulowanie wolnych odpowiedzi API, aby lepiej testować front-end.
Parametr opoźnienia jest mieleniem całkowitym reprezentującym milisekundy.
Aby to obsłużyć, Tim przekształca metody punktu końcowego w metody asynchroniczne (async), które zwracają Task<IResult> zamiast jedynie IResult.
Jeśli opoźnienie zostanie podane i mieści się w dopuszczalnych granicach (nie przekracza 300 000 milisekund lub 5 minut), metoda wywołuje Task.Delay(), aby wstrzymać wykonanie.
Na 2:33, Tim podkreśla znaczenie ograniczenia opoźnienia. Ustala limit na 5 minut, aby zapobiec nielogicznie długim czasom oczekiwania, które mogłyby sprawić, że aplikacja byłaby nieodpowiedzialna lub wyglądałaby na uszkodzoną.
if (delay > 300000)
{
delay = 300000;
}
await Task.Delay(delay.Value);If delay > 300000 Then
delay = 300000
End If
Await Task.Delay(delay.Value)Ten dodatek zapewnia, że programiści mogą symulować opoźnienia do pięciu minut, co jest przydatne do testowania timeoutów i reaktywności w aplikacji klienta.
Tim wykonuje kilka testów za pomocą Postman (lub klona Postman), aby zweryfikować logikę opoźnienia. Na przykład:
Opoźnienie=5000 (5 sekund) powoduje, że API się pauzuje przed zwróceniem wyników.
Opoźnienie=500 efektywnie powoduje krótszą pauzę.
Obserwuje, że rzeczywiste opoźnienie będzie zawsze nieco dłuższe niż podana wartość z powodu obciążenia przetwarzania — ważna rzeczywista subtelność. Jak zauważa Tim na 5:09, nie mierzysz API co do milisekundy, ale raczej symulujesz prog.
Tim nie zatrzymuje się tylko na punkcie końcowym "załaduj wszystkie kursy". Chce spójności, więc implementuje tę samą zdolność opoźnienia w punkcie końcowym "załaduj kurs przez ID".
Na 6:15, napotyka problem: konflikt nazw z powodu automatycznego dodania "Async" do nazwy metody podczas przekształcania na asynchroniczną. Tim dostosowuje obie nazwy metod, aby dostosować je do konwencji nazewniczej Async dla przejrzystości i spójności.
Testowanie potwierdza implementację:
Opoźnienia są respektowane.
Nieistniejące rekords zwracają 404 zgodnie z oczekiwaniami po opoźnieniu.
Usunięcie opoźnienia lub przekazanie pustych wartości zachowuje się odpowiednio, Tim zauważa jednak pewną anomalię interfejsu użytkownika w Postman, a nie z API samym w sobie (8:00).
Następnie Tim wprowadza wartościowe narzędzie do testowania API: dedykowany punkt końcowy, który może symulować różne kody błędów HTTP.
Na 9:13, wyjaśnia, że choć niektóre punkty końcowe (jak ten, który zwraca kurs przez ID) naturalnie zwracają 404 dla brakujących danych, nie ma wbudowanego sposobu na testowanie innych kodów błędów — chyba że są one wyraźnie symulowane.
Tim buduje nowy punkt końcowy przy /error/{code}, który:
Akceptuje całkowity kod statusu HTTP.
Zwraca odpowiadającą odpowiedź błędu HTTP za pomocą wyrażenia switch.
code switch
{
400 => Results.BadRequest(),
401 => Results.Unauthorized(),
403 => Results.Forbid(),
404 => Results.NotFound(),
_ => Results.StatusCode(code)
};Select Case code
Case 400
Results.BadRequest()
Case 401
Results.Unauthorized()
Case 403
Results.Forbid()
Case 404
Results.NotFound()
Case Else
Results.StatusCode(code)
End SelectObejmuje to zarówno typowe błędy po stronie klienta, jak i dowolne zdefiniowane przez siebie kody, które deweloper może chcieć przetestować.
Na 12:03, dodaje ten nowy punkt końcowy do programu przez app.AddErrorEndpoints() i oznacza klasę błędu jako statyczną.
Tim teraz testuje punkt końcowy, przekazując różne kody statusu:
400 zwraca "Złe żądanie"
401 zwraca "Nieautoryzowany"
404 zwraca "Nie znaleziono"
301 zwraca "Trwale przeniesiony"
405 zwraca "Metoda niedozwolona"
Pokazuje to elastyczność punktu końcowego — nie tylko dla kodów błędów, ale dla dowolnego kodu statusu HTTP. Na 13:04, Tim potwierdza, że to podejście jest idealne do testowania, jak front-endowe aplikacje obsługują różne odpowiedzi serwera.
Rozważał nazwanie go /httpcode, ale utrzymał /error dla prostoty, jako że jest on przede wszystkim używany do symulacji warunków błędów.
Tim kończy wideo, podsumowując ulepszenia wprowadzone do API:
Opoźnienia symulują rzeczywiste opoźnienia w odpowiedziach API.
Symulacja błędów zapewnia elastyczność testowania praktycznie każdej odpowiedzi HTTP.
Te funkcje sprawiają, że przykładowe API jest bardziej solidne i wartościowe dla realistycznych scenariuszy testowania.
Na 14:16, Tim podkreśla znaczenie tych narzędzi do testowania, jak aplikacja zachowuje się w różnych stanach API, takich jak opoźnione odpowiedzi czy różne błędy serwera.
Chociaż nie opisano tego szczegółowo w tym wideo, Tim sugeruje kolejny krok: Dockerization API. To pozwala programistom uruchamiać przykładowe API lokalnie w samodzielnym kontenerze Docker, co ułatwia wdrażanie i udostępnianie w różnych środowiskach.
Tim kończy wideo, ponownie podkreślając swoje zaangażowanie w tworzenie kompleksowego przykładowego API, które obejmuje realistyczne funkcje, których programiści naprawdę potrzebują do testowania. Obejmują one:
Opoźnienia
Błędy
Sprawdzenia zdrowia
Plany na przyszłość dotyczące uwierzytelniania i zaawansowanych punktów końcowych
Cel jest prosty, ale potężny — wyposażenie deweloperów w narzędzie, które naśladuje kaprysy prawdziwych API, dzięki czemu ich aplikacje są solidne, niezawodne i przyjazne dla użytkownika.
Do końca tej lekcji widzowie zyskują lepsze zrozumienie, jak i dlaczego wprowadzać sztuczne opoźnienia i odpowiedzi błędów w swoich API. Podejście Tima Corey'a jest metodyczne, praktyczne i bezpośrednio związane z potrzebami testowania rzeczywistych aplikacji. Jeśli szukasz sposobu, aby wzmocnić swoje testy API, ta lekcja jest doskonałym zasobem do naśladowania — a teraz dokładnie wiesz, gdzie szukać.
Obejrzyj pełną lekcję wideo Tima Corey, aby uzyskać praktyczne wskazówki.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy