Sobes.tech
Junior

Opowiedz o testowaniu mobilnym.

sobes.tech AI

Odpowiedź od AI

Testowanie mobilne to proces sprawdzania jakości oprogramowania zaprojektowanego dla urządzeń mobilnych (smartfony, tablety). Obejmuje testowanie na różnych platformach (Android, iOS), urządzeniach, wersjach systemu operacyjnego, rozdzielczościach ekranu, warunkach sieciowych i scenariuszach użytkowania.

Główne aspekty testowania mobilnego:

  • Testowanie funkcjonalne: Sprawdzanie zgodności aplikacji z wymaganiami i specyfikacjami.
  • Testowanie wydajności: Ocena szybkości działania, zużycia pamięci i baterii.
  • Testowanie użyteczności (Usability testing): Ocena intuicyjności interfejsu, łatwości nawigacji i ogólnego doświadczenia użytkownika.
  • Testowanie kompatybilności: Sprawdzanie działania aplikacji na różnych urządzeniach, wersjach systemu operacyjnego i rozdzielczościach ekranu.
  • Testowanie bezpieczeństwa: Wykrywanie luk i zapewnienie ochrony danych użytkownika.
  • Testowanie przerwań: Sprawdzanie reakcji aplikacji na przychodzące połączenia, SMS-y, powiadomienia i inne zdarzenia.
  • Testowanie instalacji/usuwania: Sprawdzanie poprawności instalacji i pełnego usuwania aplikacji.
  • Testowanie lokalizacji (dla wielojęzycznych aplikacji): Sprawdzanie poprawności wyświetlania tekstu, formatów dat i czasu dla różnych regionów.
  • Testowanie dostępności (Accessibility testing): Sprawdzanie użyteczności aplikacji dla osób z ograniczonymi możliwościami.

Narzędzia do testowania mobilnego obejmują:

  • Testowanie ręczne: Użycie fizycznych urządzeń lub emulatorów/symulatorów.
  • Testowanie automatyczne: Wykorzystanie frameworków i narzędzi.

Niektóre popularne narzędzia do automatyzacji testów mobilnych:

  • Appium:
    // Przykład prostego testu na Appium (Java)
    import io.appium.java_client.AppiumDriver;
    import io.appium.java_client.MobileElement;
    import io.appium.java_client.android.AndroidDriver;
    import org.openqa.selenium.remote.DesiredCapabilities;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class SimpleAppiumTest {
        public static void main(String[] args) throws MalformedURLException {
            DesiredCapabilities cap = new DesiredCapabilities();
            cap.setCapability("deviceName", "emulator-5554"); // Nazwa emulatora/urządzenia
            cap.setCapability("platformName", "Android");
            cap.setCapability("appPackage", "com.android.calculator2"); // Pakiet testowanej aplikacji
            cap.setCapability("appActivity", "com.android.calculator2.Calculator"); // Aktywność testowanej aplikacji
    
            AppiumDriver<MobileElement> driver = new AndroidDriver<>(new URL("http://127.0.0.1:4723/wd/hub"), cap);
    
            // Przykład interakcji: naciśnięcie przycisku '1'
            driver.findElementById("digit_1").click(); 
            
            // ... dalsze działania
            
            driver.quit(); // Zamknięcie sesji Appium
        }
    }
    
  • Espresso (Android):
    // Przykład prostego testu na Espresso
    package com.example.myapp.test;
    
    import androidx.test.ext.junit.rules.ActivityScenarioRule;
    import androidx.test.ext.junit.runners.AndroidJUnit4;
    import androidx.test.espresso.Espresso;
    import androidx.test.espresso.action.ViewActions;
    import androidx.test.espresso.matcher.ViewMatchers;
    import org.junit.Rule;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    
    import static androidx.test.espresso.assertion.ViewAssertions.matches;
    import static androidx.test.espresso.matcher.ViewMatchers.withId;
    import static androidx.test.espresso.matcher.ViewMatchers.withText;
    
    @RunWith(AndroidJUnit4.class)
    public class SimpleEspressoTest {
    
        @Rule
        public ActivityScenarioRule<MainActivity> activityRule =
                new ActivityScenarioRule<>(MainActivity.class); // Aktywność do uruchomienia
    
        @Test
        public void testButtonClick() {
            // Znalezienie przycisku po ID i kliknięcie
            Espresso.onView(withId(R.id.myButton)).perform(ViewActions.click());
    
            // Sprawdzenie tekstu w polu tekstowym
            Espresso.onView(withId(R.id.myTextView)).check(matches(withText("Button clicked!")));
        }
    }
    
  • XCUITest (iOS):
    // Przykład prostego testu na XCUITest (Swift)
    import XCTest
    
    class SimpleXCUIITest: XCTestCase {
    
        func testButtonPress() throws {
            // Inicjalizacja aplikacji
            let app = XCUIApplication()
            app.launch()
    
            // Znalezienie przycisku i kliknięcie
            let myButton = app.buttons["MyButtonIdentifier"] // ID lub etykieta przycisku
            myButton.tap()
    
            // Znalezienie pola tekstowego i sprawdzenie jego wartości
            let myLabel = app.staticTexts["MyLabelIdentifier"] // ID lub etykieta pola tekstowego
            XCTAssertEqual(myLabel.label, "Button Pressed!")
        }
    }
    

Specyfika testowania mobilnego obejmuje:

  • Duża liczba urządzeń i wersji systemu operacyjnego, wymagających obszernej farmy testowej lub usług chmurowych.
  • Konieczność testowania w różnych warunkach sieciowych (Wi-Fi, 3G, 4G, 5G, offline).
  • Zarządzanie przerwaniami i procesami w tle.
  • Zużycie zasobów systemowych (CPU, RAM, bateria).

Emulatory i symulatory są używane do wstępnych testów, ale końcowe testy powinny być wykonywane na rzeczywistych urządzeniach, aby dokładnie ocenić wydajność i doświadczenie użytkownika w warunkach rzeczywistych.