Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór

  1. Strona główna
  2. Blog
  3. Automatyzacja testów

Automatyzacja testów

Selenium kontra dramaturg: Kluczowe różnice, porównanie kodów i wybór

Selen ma dwie dekady historii i ogromny ekosystem. Dramat jest nowszy i zawiera więcej rozwiązań od razu po wyjęciu z pudełka. Porównaj je w ważnych sprawach dnia codziennego, przeczytaj jeden test w obu przypadkach i podejmij decyzję ze śmiałością.

9 min czytania
Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i który wybrać

Najważniejsze

  • Selenium to dojrzała biblioteka do automatyzacji przeglądarki zbudowana w oparciu o standard W3C WebDriver.
  • Playwright to nowsza platforma z funkcją automatycznego oczekiwania, śledzeniem i modułem testowym.
  • W przypadku nowego projektu internetowego Playwright zwykle szybciej osiąga produktywność.
  • Selenium pozostaje dobrym wyborem w przypadku dużych istniejących pakietów, szerszych potrzeb językowych i testowania w przeglądarkach rzeczywistych dostawców.

Jeśli rozpoczynasz projekt automatyzacji testów, szybko pojawi się pytanie Selenium kontra Playwright. Wyniki wyszukiwania mogą sprawiać wrażenie przesądzonej kwestii, ale właściwa odpowiedź zależy od Twojego zespołu, istniejących testów i przeglądarek, które musisz obsługiwać.

W tym przewodniku porównano je pod kątem rzeczy, które faktycznie będziesz odczuwać w codziennej pracy. Przykłady kodu pokazują typowy styl każdego narzędzia i nie uruchomiliśmy ich na potrzeby tego artykułu. Unikamy również podawania wartości procentowych szybkości, ponieważ publikowane testy porównawcze są bardzo zróżnicowane i często pochodzą od dostawców. Zmierz na własnej aplikacji, jeśli prędkość zadecyduje o sprawie.

Krótka odpowiedź

Wybierz opcję Playwright w przypadku większości nowych projektów testowania stron internetowych, szczególnie jeśli Twój zespół potrafi pracować w JavaScript, TypeScript, Python, Java lub .NET. Otrzymujesz więcej funkcji od razu po wyjęciu z pudełka, a mniej czasu poświęcasz na infrastrukturę i niestabilne oczekiwania.

Wybierz Selenium, jeśli masz już duży, działający pakiet, jeśli potrzebujesz języka, którego Playwright oficjalnie nie obsługuje, takiego jak Ruby, lub jeśli musisz przetestować na prawdziwych kompilacjach i platformach przeglądarek dostępnych poprzez siatkę Selenium lub chmurę urządzeń.

Selen kontra dramaturg obok siebie

Aspekt Selen Dramaturg
Pierwszy wydany 2004 2020, autorstwa Microsoftu
Co to jest? Biblioteka automatyzacji przeglądarki Framework z modułem uruchamiającym w Node.js
Języki Java, Python, C#, Ruby, JavaScript TypeScript, JavaScript, Python, Java, .NET
Przeglądarki Chrome, Firefox, Edge, Safari Chromium, Firefox, WebKit
Czekam Wyraźne czeka, aż napiszesz Wbudowane automatyczne oczekiwanie
Biegacz testowy Przynieś swój własny, na przykład pytest lub JUnit Zawarte dla Node.js, wtyczka pytest dla Pythona
Biegi równoległe Selenium Grid lub framework testowy Wbudowany w prowadnicę
Debugowanie Logi frameworka, dodane zrzuty ekranu Przeglądarka śledzenia, tryb interfejsu użytkownika, generator kodów
Sieciowe kpiny Ograniczone, często dodatkowe narzędzia Wbudowany
Społeczność Bardzo duży i długoletni Duże i szybko rosnące

Architektura: jak każdy z nich komunikuje się z przeglądarką

Selenium wysyła polecenia przy użyciu protokołu W3C WebDriver, będącego formalnym standardem. Twój kod komunikuje się ze sterownikiem, takim jak ChromeDriver, który steruje przeglądarką, a każde polecenie jest zwykle oddzielnym żądaniem HTTP. Ponieważ dostawcy przeglądarek obsługują ten standard, zapewnia on szeroką kompatybilność. Nowszy protokół, WebDriver BiDi, dodaje do standardu dwukierunkową komunikację i strumieniowanie zdarzeń.

Playwright utrzymuje stałe połączenie z przeglądarką i korzysta z własnych, poprawionych wersji Chromium, Firefox i WebKit. Ponieważ połączenie jest bezpośrednie i dwukierunkowe, może reagować na zdarzenia przeglądarki, a każdy test można uruchomić w swoim własnym, lekkim kontekście przeglądarki. Dlatego większość porównań ocenia Playwright jako szybszy, chociaż faktyczna różnica zależy od aplikacji i testów.

Jeden test w obu narzędziach

Oto ten sam test logowania, napisany w Pythonie, w publicznej witrynie ćwiczeń.

Selen

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def test_login(driver):
    driver.get("https://the-internet.herokuapp.com/login")
    driver.find_element(By.ID, "username").send_keys("tomsmith")
    driver.find_element(By.ID, "password").send_keys("SuperSecretPassword!")
    driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()

    message = WebDriverWait(driver, 10).until(
        EC.visibility_of_element_located((By.ID, "flash"))
    )
    assert "You logged into a secure area" in message.text

Potrzebujesz także urządzenia do utworzenia i zamknięcia sterownika, jak pokazujemy w naszym samouczku Selenium Python.

Dramaturg

from playwright.sync_api import Page, expect

def test_login(page: Page):
    page.goto("https://the-internet.herokuapp.com/login")
    page.get_by_label("Username").fill("tomsmith")
    page.get_by_label("Password").fill("SuperSecretPassword!")
    page.get_by_role("button", name="Login").click()

    expect(page.locator("#flash")).to_contain_text("You logged into a secure area")

Opiera się to na wtyczce pytest-playwright, która zasila urządzenie page. Jest krótszy, głównie dlatego, że funkcja oczekiwania jest wbudowana w expect i dlatego, że lokalizatory takie jak get_by_role opisują stronę tak, jak ją widzi użytkownik. Dzięki Selenium możesz znacznie zredukować ten schemat za pomocą pomocników i Modelu obiektowego strony, który zalecamy w obu narzędziach.

Oczekiwanie i niestabilne testy

Wyczucie czasu jest główną przyczyną niestabilnych testów przeglądarki i to właśnie tutaj te dwa narzędzia różnią się najbardziej w codziennym użytkowaniu.

W Selenium odpowiadasz za synchronizację. Wyraźne oczekiwania sprawdzają się dobrze, ale ktoś musi je wszędzie pamiętać, a zespoły, które zapominają, często uciekają się do time.sleep. Nasz przewodnik po Selenium czeka wyjaśnia, jak zrobić to poprawnie.

W Playwright akcje automatycznie sprawdzają, czy element jest widoczny, stabilny, włączony i może odbierać zdarzenia, zanim podejmiesz działanie. Potwierdzenia dotyczące najpierw sieci Web są ponawiane aż do upłynięcia limitu czasu. Nadal możesz pisać wadliwe testy, na przykład ze słabymi danymi testowymi, ale główne źródło problemów jest domyślnie obsługiwane.

Przeglądarki i języki

W tym przypadku Selenium ma prawdziwą przewagę. Kompilacja WebKit firmy Playwright jest zbliżona do silnika Safari, ale to nie to samo, co Safari na komputerze Mac lub iPhonie. Jeśli prawdziwe zachowanie Safari jest krytyczne, Selenium z SafariDriver lub prawdziwa chmura urządzenia przybliży Cię do tego, z czego faktycznie korzystają Twoi użytkownicy.

Podobnie Playwright testuje dołączone wersje przeglądarek, chociaż może także obsługiwać zainstalowane kanały Chrome i Edge. Selenium steruje instalowanymi przeglądarkami, co jest pomocne, jeśli musisz obsługiwać określone wersje. W przypadku natywnych aplikacji mobilnych nie ma pełnej odpowiedzi: Appium, które jest zbudowane na koncepcjach WebDriver, jest zwykłym narzędziem.

Jeśli chodzi o języki, Selenium oficjalnie wspiera Ruby i ma bardzo długą historię w zespołach Java. Wersja Node.js firmy Playwright ma również najbardziej kompletne narzędzia, ponieważ zawiera pełny moduł testowy. Inne języki otrzymują bibliotekę podstawową i integrują się z własnymi frameworkami testowymi.

Debugowanie

Dramaturg ma tu wyraźną przewagę. Jej przeglądarka śladów rejestruje każdą akcję wraz z migawkami DOM, wywołaniami sieciowymi i dziennikami konsoli, dzięki czemu możesz przejść przez nieudany przebieg CI po jego zakończeniu. Jego tryb interfejsu użytkownika i generator kodu pomagają także szybciej pisać testy. Zobacz nasz samouczek dramaturga dla początkujących, jak z nich korzystać.

Dzięki Selenium montujesz to samodzielnie, na podstawie zrzutów ekranu w przypadku awarii, dzienników przeglądarki, wideo od dostawcy sieci i raportów z platformy testowej. Działa dobrze, a wiele zespołów ma doskonałe konfiguracje, ale zbudowanie ich wymaga wysiłku.

Funkcje sieciowe i API

Playwright może przechwytywać i kpić z żądań sieciowych za pomocą kilku linijek kodu, co jest przydatne do testowania stanów błędów:

page.route("**/api/orders", lambda route: route.fulfill(status=500))

Zawiera także klienta żądań API, dzięki czemu możesz tworzyć dane testowe za pośrednictwem API przed uruchomieniem przeglądarki. Selenium 4 dodało pewne funkcje sieciowe poprzez protokół Chrome DevTools i BiDi, ale obsługa i wygoda różnią się w zależności od przeglądarki i języka. Wielu użytkowników Selenium dodaje serwer proxy lub oddzielną bibliotekę HTTP, jak w przypadku narzędzi testowania API.

Wskazówka: Niezależnie od tego, które narzędzie wybierzesz, skup testy przeglądarki na kluczowych procesach i sprowadź szczegóły na niższy poziom. Mniejszy pakiet ma większe znaczenie niż szybsze narzędzie. Zapoznaj się z naszymi najlepszymi praktykami w zakresie kompleksowego testowania.

Biegi równoległe i skala

Runner Playwrighta obsługuje równoległe procesy robocze i sharding na maszynach CI za pomocą prostych opcji. Konteksty przeglądarki są tanie, więc izolacja nie wymaga zupełnie nowej przeglądarki do każdego testu.

Selenium używa Selenium Grid do dystrybucji testów na komputerach i wersjach przeglądarek, a struktury testowe obsługują równoległość. Grid jest bardziej praktyczny, ale został sprawdzony na bardzo dużą skalę i wiele komercyjnych chmur urządzeń obsługuje go bezpośrednio.

Czy powinieneś przejść z Selenium do Playwright?

Nie automatycznie. Pakiet roboczy jest cenny, a przepisanie go na nowo zajmuje trochę czasu na testowanie produktu. Najpierw zadaj te pytania:

  1. Czy istnieje mierzalny problem? Niestabilne testy lub powolne debugowanie to dobre powody. „Jest nowszy” – nie.
  2. Jak duży jest pakiet? Można przenieść sto testów. Dziesięć tysięcy to duży projekt.
  3. Czy obiekty na Twojej stronie są czyste? Dobre abstrakcje sprawiają, że przeprowadzka jest znacznie tańsza.
  4. Czy polegasz na funkcjach specyficznych dla Selenium? Najpierw sprawdź potrzeby swojej sieci i urządzenia.

Jeśli już się poruszasz, rób to stopniowo. Napisz nowe testy w Playwright, najpierw przeprowadź migrację najbardziej wadliwych starych testów i uruchamiaj oba obok siebie, aż stary pakiet będzie na tyle mały, że będzie można go wycofać. Nie tłumacz testów linia po linii, ponieważ powoduje to przeniesienie plików uśpionych i starych lokalizatorów. Unikaj także błędów opisanych w błędach automatyzacji testów.

Jak wybrać

Twoja sytuacja Rozsądny wybór
Nowa aplikacja internetowa, nowoczesny zespół Dramaturg
Duży stabilny pakiet Selenium Pozostań przy Selenium i ulepszaj go
Zespół pisze Ruby Selen
Prawdziwy zasięg Safari ma kluczowe znaczenie Selenium, czyli chmura urządzeń
Niestabilne testy i twarde debugowanie CI Wypróbuj Dramat w pilocie
Natywne aplikacje mobilne Appium

A co najlepsze, przeprowadź krótki pilotaż. Zautomatyzuj trzy najbardziej niewygodne podróże w każdym narzędziu w stosunku do własnej aplikacji, we własnym CI i porównaj kod, szybkość i łatwość debugowania awarii. Tydzień dowodów przewyższa jakikolwiek artykuł porównawczy, łącznie z tym. Jeśli Cypress również znajduje się na Twojej krótkiej liście, przeczytaj artykuł Drutopisarz kontra Cypress.

Podsumowanie

Zazwyczaj łatwiej jest zacząć od dramaturga, a Selenium pozostaje niezawodnym standardem o szerokim zasięgu. Żadne z nich nie uratuje źle zaprojektowanego zestawu testów. Wybieraj w oparciu o swoje rzeczywiste ograniczenia, inwestuj w stabilne lokalizatory i dobre dane testowe i skup swój pakiet na tym, co najważniejsze dla Twoich użytkowników.

Najczęstsze pytania

Czy Dramat jest lepszy od Selenium?

W przypadku wielu nowych projektów internetowych tak, dzięki automatycznemu oczekiwaniu i wbudowanym narzędziom. Selenium może lepiej pasować do istniejących pakietów, szerszych potrzeb językowych lub konkretnych rzeczywistych przeglądarek.

Czy Playwright jest szybszy niż Selenium?

Powszechnie zgłasza się, że jest szybszy ze względu na trwałe połączenie z przeglądarką i lekkie konteksty. Prawdziwa różnica zależy od Twojej aplikacji, więc zmierz ją na podstawie własnych testów.

Czy Selen jest przestarzały?

Nie. Selenium jest aktywnie utrzymywane i budowane w oparciu o standard W3C i nadal jest szeroko stosowane. Selenium 4 i WebDriver BiDi nadal go unowocześniają.

Czy Playwright może przetestować prawdziwe Safari?

Playwright testuje własną kompilację WebKit, która jest zbliżona do silnika Safari, ale nie identyczna. Aby uzyskać prawdziwe zachowanie Safari lub iOS, użyj prawdziwych urządzeń lub SafariDriver.

Czy początkujący powinien uczyć się Selenium czy dramaturga?

Wielu początkującym łatwiej jest zacząć od Playwrighta. Selen nadal pojawia się na wielu ofertach pracy, więc sprawdź lokalny rynek. Podstawowe koncepcje przenoszą się między nimi.

Ucz się dalej

Pracuj z Stack Quora

Potrzebujesz pomocy przy testowaniu, WordPressie lub SEO?

Pomagamy zespołom dostarczać lepsze oprogramowanie i rozwijać ich witryny. Powiedz nam, nad czym pracujesz, a my zaproponujemy jasny następny krok.

Czytaj dalej

Więcej poradników na testowanie, sztuczna inteligencja i nowoczesny rozwój

Podobał Ci się ten artykuł? Wybierz temat i przejdź bezpośrednio do naszych najnowszych tutoriali.

Sztuczna inteligencja

Wyjaśnienie halucynacji AI: dlaczego modele językowe tworzą rzeczy i jak je zmniejszyć

Wyjaśniono halucynacje AI: czym są, dlaczego powstają w modelach językowych, typowe typy, jak je zredukować za pomocą uziemień i podpowiedzi oraz pr…

Przeczytaj artykuł →
DevOps

Wyjaśnienie zmiennych środowiskowych: pliki .env, sekrety i konfiguracja wykonana prawidłowo

Zmienne środowiskowe wyjaśnione na przykładach Pythona, które przeprowadziliśmy: ich odczytywanie i ustawianie, dlaczego każda wartość jest ciągiem …

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie ograniczenia szybkości interfejsu API: algorytmy, nagłówki i obsługa błędów 429

Ograniczanie szybkości API wyjaśnione za pomocą przeprowadzonej przez nas symulacji: zasobnik tokenów, stałe okno, przesuwane okno, 429 odpowiedzi, …

Przeczytaj artykuł →
Automatyzacja testów

Wyśmiewanie w Pythonie: unittest.mock, patch i błędy, które sprawiają, że testy kłamią

Wyśmiewanie w Pythonie za pomocą unittest.mock, przetestowane: Mock i zwracana wartość, efekt uboczny, łatanie tam, gdzie używana jest nazwa, specyf…

Przeczytaj artykuł →
Testowanie oprogramowania

Wyjaśnienie zasięgu kodu: pokrycie linii i oddziału oraz co naprawdę oznacza 100%

Wyjaśnienie pokrycia kodu za pomocą prawdziwego pliku cover.py: pokrycie linii, gałęzi i warunków, przeczytanie raportu, dlaczego 100% pokrycia może…

Przeczytaj artykuł →
Bazy danych i SQL

DELETE vs TRUNCATE vs DROP w SQL: różnice, wycofywanie i kiedy używać każdego z nich

DELETE vs TRUNCATE vs DROP wyjaśnione za pomocą przetestowanego SQL: co każdy usuwa, wycofywanie, wyzwalacze, resetowanie tożsamości, prędkość i czy…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie widoków SQL: tworzenie, używanie i unikanie pułapek wraz z przykładami

Widoki SQL wyjaśnione za pomocą zapytań, które uruchomiliśmy: tworzenie widoku, wyniki na żywo, ukrywanie kolumn, wydajność, widoki z możliwością ak…

Przeczytaj artykuł →
Tworzenie oprogramowania

Interfejs TypeScript a typ: rzeczywiste różnice, testowane za pomocą kompilatora

Interfejs TypeScript a typ, sprawdzony z prawdziwym kompilatorem: co oba mogą zrobić, co tylko jeden, łączenie deklaracji, rozszerzenia a przecięcia…

Przeczytaj artykuł →
Tworzenie oprogramowania

Python *args i **kwargs wyjaśnione: elastyczne funkcje z przejrzystymi przykładami

Python *args i **kwargs wyjaśnione za pomocą uruchomionego przez nas kodu: pakowanie i rozpakowywanie, kolejność parametrów, argumenty zawierające t…

Przeczytaj artykuł →
Tworzenie oprogramowania

Funkcje Lambda w Pythonie: składnia, rzeczywiste zastosowania i kiedy ich nie używać

Funkcje lambda w Pythonie wyjaśnione za pomocą uruchomionego przez nas kodu: składnia, sortowanie za pomocą klucza, mapa i filtr, domknięcia, pułapk…

Przeczytaj artykuł →
Sztuczna inteligencja

Kim są agenci AI? Jak one działają, dzięki prostej pętli agenta, którą możesz uruchomić

Kim są agenci AI? Prosty przewodnik po pętli agenta, narzędziach, pamięci i poręczach, z małą pętlą w Pythonie, którą uruchomiliśmy, prawdziwymi zag…

Przeczytaj artykuł →
DevOps

Monitorowanie a obserwowalność: prawdziwa różnica z logami, wskaźnikami i śladami

Wyjaśnienie monitorowania a obserwowalności: znane i nieznane awarie, dzienniki, metryki i ślady, opis incydentu przy kasie, złote sygnały, OpenTele…

Przeczytaj artykuł →
DevOps

Woluminy platformy Docker a mocowania powiązań: utrwalanie danych kontenera we właściwy sposób

Wyjaśniono woluminy Dockera a montowanie powiązań: dlaczego dane kontenera znikają, nazwane woluminy, montowanie powiązań, tmpfs, przykłady tworzeni…

Przeczytaj artykuł →
Automatyzacja testów

TDD vs BDD: kluczowe różnice, jedna funkcja zbudowana w obie strony i kiedy używać każdej z nich

TDD vs BDD wyjaśnione za pomocą jednej funkcji rabatowej zbudowanej w obie strony: refaktoryzacja czerwono-zielona z uruchomionym przez nas kodem, s…

Przeczytaj artykuł →
Testowanie oprogramowania

Testowanie akceptacyjne użytkownika (UAT): proces, lista kontrolna i rzeczywiste przykłady

Wyjaśniono testy akceptacyjne użytkownika: kto je przeprowadza, czym różni się od kontroli jakości, siedmioetapowy proces, szablon przypadku testowe…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie wartości SQL NULL: IS NULL, COALESCE, NULLIF i pułapki, których należy unikać

Wartości SQL NULL wyjaśnione za pomocą zapytań, które wykonaliśmy: logika trójwartościowa, IS NULL, COALESCE, NULLIF, w jaki sposób agregacje, łącze…

Przeczytaj artykuł →
Bazy danych i SQL

Instrukcja SQL CASE WHEN: składnia, rzeczywiste przykłady i typowe błędy

SQL CASE WHEN wyjaśnione za pomocą zapytań, które uruchomiliśmy: proste i przeszukiwane formularze, kolejność warunków, elementy przestawne z SUM, s…

Przeczytaj artykuł →
Tworzenie oprogramowania

Co to jest JWT? Tokeny internetowe JSON wyjaśnione na przykładzie działania

Co to jest JWT? Wyjaśniono tokeny sieciowe JSON: trzy części, token zbudowany i zmodyfikowany w uruchomionym przez nas kodzie, JWT a sesje, pamięć m…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie pętli zdarzeń JavaScript: stos wywołań, mikrozadania i liczniki czasu z przykładami

Pętla zdarzeń JavaScript wyjaśniona za pomocą uruchomionego przez nas kodu: stos wywołań, kolejki zadań i mikrozadań, dlaczego setTimeout 0 nie jest…

Przeczytaj artykuł →
Tworzenie oprogramowania

Wyjaśnienie generatorów Pythona i wydajności: oszczędzaj pamięć dzięki prawdziwym przykładom

Generatory Pythona i wydajność wyjaśnione za pomocą uruchomionego przez nas kodu: sposób wstrzymywania i wznawiania, mierzone oszczędności pamięci, …

Przeczytaj artykuł →
Sztuczna inteligencja

Czym są osady? Wyjaśnienie wektorów i podobieństwa cosinusa

Czym są osadzania? Prosty przewodnik po wektorach, podobieństwie cosinusów i wyszukiwaniu semantycznym, z małym przykładem, który przeprowadziliśmy,…

Przeczytaj artykuł →
DevOps

Wdrożenie niebiesko-zielone a kanaryjskie: różnice, kompromisy i sposób wyboru

Wyjaśniono wdrożenie Blue-Green vs Canary: sposób działania każdego z nich, koszty, ryzyko i wycofywanie zmian, przetestowane przez nas stabilne łąc…

Przeczytaj artykuł →
Automatyzacja testów

Niestabilne testy: co je powoduje i jak je naprawić na dobre

Niestabilne testy wyjaśnione w przeprowadzonych przez nas demonstracjach: główne przyczyny, sposób potwierdzenia i zdiagnozowania jednej z nich, odp…

Przeczytaj artykuł →
Testowanie oprogramowania

Load Testing vs Stress Testing: Differences, Metrics and k6 Examples

Wyjaśniono testy obciążenia i testy warunków skrajnych: co dowodzi każdy z nich, testy szczytowe i nasiąkania, istotne metryki, dlaczego średnie wpr…

Przeczytaj artykuł →
Testowanie oprogramowania

Przypadek testowy a scenariusz testowy: kluczowe różnice, przykłady i kiedy stosować każdy z nich

Wyjaśnienie przypadków testowych i scenariuszy testowych: jasne definicje, tabela obok siebie, jedna funkcja resetowania hasła zaczerpnięta ze scena…

Przeczytaj artykuł →
Bazy danych i SQL

Optymalizacja zapytań SQL: czytaj plany wykonania i napraw powolne zapytania z synchronizacją

Optymalizacja zapytań SQL przetestowana na milionie wierszy: przeczytaj plany wykonania, dodaj odpowiednie indeksy, napraw filtry niesargowalne, uży…

Przeczytaj artykuł →
Bazy danych i SQL

SQL UNION vs UNION ALL: różnice, przykłady i testowana wydajność

SQL UNION vs UNION ALL wyjaśnione na podstawie zapytań, które uruchomiliśmy: duplikaty, obie reguły są zgodne, prawdziwy błąd danych, zmierzona wyda…

Przeczytaj artykuł →
Tworzenie oprogramowania

Samouczek API pobierania JavaScript: GET, POST, obsługa błędów i limity czasu

Samouczek JavaScript Fetch API testowany na serwerze lokalnym: GET i POST, dlaczego 404 nie rzuca, pomocnik wielokrotnego użytku, ciągi zapytań, prz…

Przeczytaj artykuł →
Tworzenie oprogramowania

Obsługa plików w Pythonie: odczyt, zapis, CSV, JSON i pathlib z przykładami

Obsługa plików w Pythonie wyjaśniona za pomocą uruchomionego przez nas kodu: tryby otwarte, czytanie dużych plików, CSV, JSON, pathlib, pliki binarn…

Przeczytaj artykuł →
Tworzenie oprogramowania

Klasy i obiekty Pythona: samouczek OOP z prawdziwymi przykładami

Klasy i obiekty Pythona objaśnione za pomocą uruchomionego przez nas kodu: __init__, metody, atrybuty klas i instancji, dziedziczenie, właściwości, …

Przeczytaj artykuł →
Sztuczna inteligencja

Co to jest model dużego języka? Jak działają LLM, wyjaśnione bez szumu

Co to jest model dużego języka? LLM wyjaśnione prostym językiem: tokeny, osadzanie, uwaga, szkolenie, temperatura i okna kontekstowe, mała demonstra…

Przeczytaj artykuł →
DevOps

Polecenia systemu Linux dla początkujących: niezbędny przewodnik po terminalu z przykładami

Polecenia systemu Linux dla początkujących, pogrupowane według zadań: nawigacja, pliki, przeglądanie logów, grep, potoki, uprawnienia, procesy i arc…

Przeczytaj artykuł →
Automatyzacja testów

Selenium kontra dramaturg: kluczowe różnice, porównanie kodu i wybór

Porównanie Selenium i Playwright: architektura, oczekiwanie, obsługa przeglądarki i języka, debugowanie, ten sam test w obu narzędziach, porady doty…

Przeczytaj artykuł →
Testowanie oprogramowania

Partycjonowanie równoważne: technika projektowania testów wyjaśniona na praktycznych przykładach

Wyjaśniono podział równoważny: jak znaleźć prawidłowe i nieprawidłowe partycje, sprawdzone przykłady dla grup wiekowych, hasła i kupony, przeprowadz…

Przeczytaj artykuł →
Testowanie oprogramowania

Ważność a priorytet w testowaniu oprogramowania: różnice, macierz i rzeczywiste przykłady

Wyjaśniono ważność a priorytet w testowaniu oprogramowania: jasne definicje, czterokierunkowa macierz z przykładami, skale poziomów, kto ustawia każ…

Przeczytaj artykuł →
Bazy danych i SQL

Samouczek dotyczący podzapytań SQL: typy, skorelowane podzapytania i ISTNIEJĄ z przykładami

Samouczek dotyczący podzapytań SQL z zapytaniami, które wykonaliśmy: podzapytania skalarne, IN, FROM i SELECT, podzapytania skorelowane, EXISTS, puł…

Przeczytaj artykuł →
Bazy danych i SQL

Wyjaśnienie transakcji SQL i ACID: COMMIT, ROLLBACK i poziomy izolacji

Transakcje SQL i ACID wyjaśnione za pomocą wykonanego przez nas przelewu bankowego: COMMIT, ROLLBACK, punkty zapisu, blokady, poziomy izolacji, brud…

Przeczytaj artykuł →
Tworzenie oprogramowania

Git merge vs rebase: różnice, przykłady i kiedy czego używać

Git merge vs rebase wyjaśnione na prawdziwym wyniku logu, z tabelą porównawczą, złotą zasadą rebase i bezpiecznym procesem pracy zespołu.

Przeczytaj artykuł →
Tworzenie oprogramowania

Python list comprehension: składnia, przykłady i kiedy jej unikać

Python list comprehension wyjaśnione: składnia, filtrowanie, if-else, zagnieżdżone pętle, zmierzone czasy i sytuacje, w których zwykła pętla for jes…

Przeczytaj artykuł →
Bazy danych i SQL

SQL JOIN – wyjaśnienie z przykładami (Inner, Left, Right, Full)

Zrozum złączenia SQL krok po kroku na przykładowych tabelach i zapytaniach: INNER, LEFT, RIGHT, FULL, CROSS i SELF, plus typowe błędy i wskazówki wy…

Przeczytaj artykuł →