Sobes.tech
Middle

Jakie są główne aspekty testów wydajności i jakie narzędzia użyłeś do ich realizacji?

sobes.tech AI

Odpowiedź od AI

Testy wydajności obejmują:

  • Test obciążenia (Load Testing): Ocena zachowania systemu przy oczekiwanym obciążeniu. Określa maksymalną liczbę użytkowników lub transakcji, które system może obsłużyć, zanim wydajność zacznie się pogarszać.
  • Test przeciążeniowy (Stress Testing): Testowanie systemu pod ekstremalnym obciążeniem przekraczającym oczekiwania, aby określić punkt awarii i zachowanie w takich warunkach. Celem jest upewnienie się, że system odzyskuje się po przeciążeniu.
  • Test wytrzymałości (Endurance/Soak Testing): Testowanie systemu przez długi czas przy znacznym obciążeniu, aby wykryć wycieki pamięci lub inne problemy pojawiające się z czasem.
  • Test szczytowy (Spike Testing): Nagłe zwiększenie obciążenia systemu w celu zbadania reakcji systemu na nagłe skoki aktywności użytkowników.
  • Test objętości (Volume Testing): Testowanie z dużą ilością danych w bazie danych lub systemie plików, aby ocenić wydajność systemu przy obsłudze dużej ilości informacji.
  • Test skalowalności (Scalability Testing): Określenie zdolności systemu do radzenia sobie ze wzrostem obciążenia poprzez dodanie zasobów sprzętowych lub optymalizację oprogramowania.

Do przeprowadzenia testów wydajnościowych używa się następujących narzędzi:

  • Apache JMeter: Narzędzie Java open source obsługujące różne protokoły (HTTP, HTTPS, FTP, JDBC itp.). Umożliwia tworzenie złożonych scenariuszy testowych, w tym parametryzację, korelację, logowanie i generowanie szczegółowych raportów.
    // Przykład żądania HTTP w JMeter (plik JMX)
    <HTTPSamplerProxy guiclass="HttpTestSampleGui"
                       testclass="HTTPSamplerProxy"
                       testname="Przykład"
                       enabled="true">
      <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
        <collectionProp name="Arguments.arguments"/>
      </elementProp>
      <stringProp name="HTTPSampler.domain">example.com</stringProp>
      <stringProp name="HTTPSampler.port">80</stringProp>
      <stringProp name="HTTPSampler.protocol">http</stringProp>
      <stringProp name="HTTPSampler.path">/api/users</stringProp>
      <stringProp name="HTTPSampler.method">GET</stringProp>
    </HTTPSamplerProxy>
    
  • LoadRunner (Micro Focus): Komercyjne narzędzie, znane z szerokiego wsparcia protokołów i analizy wyników. Często używane w dużych projektach korporacyjnych.
  • Gatling: Nowoczesne narzędzie open source oparte na Scala. Znane z wysokiej wydajności i ekspresyjnego języka tworzenia scenariuszy testowych.
    // Przykład scenariusza Gatling (Simulation.scala)
    import io.gatling.core.Predef._
    import io.gatling.http.Predef._
    
    class BasicSimulation extends Simulation {
    
      val httpProtocol = http
        .baseUrl("https://example.com")
        .inferHtmlResources()
        .proxy(Proxy("localhost", 8888).httpsPort(443))
    
      val scn = scenario("Użytkownicy")
        .exec(http("Pobierz użytkowników").get("/api/users"))
    
      setUp(scn.inject(rampUsers(100) during (5 minutes))).protocols(httpProtocol)
    }