Sobes.tech
Middle

Papaskinkite apie savo patirtį tarpnaršykliniame testavime.

sobes.tech AI

Atsakymas iš AI

Kroso-brauzeriniai testavimai yra būtinas etapas internetinių programų, užtikrinantis teisingą jų rodymą ir funkcionalumą skirtinguose naršyklėse ir jų versijose:

Mano patirtis apima:

  1. Rankinis testavimas:

    • Po kiekvieno reikšmingo funkcionalumo ar UI pakeitimo rankiniu būdu tikrindavau pagrindinius scenarijus pagrindinėse naršyklėse (Chrome, Firefox, Edge, Safari) — skirtingose operacinėse sistemose (Windows, macOS, Linux) ir ekrano raiškose.
    • Ypatingą dėmesį skyriau CSS atvaizdavimo ypatybėms, JavaScript veikimui ir reaguojančiam dizainui.
    • Naudojau kūrimo įrankius (Developer Tools) problemų derinimui ir analizei skirtingose naršyklėse.
  2. Tikrasis testavimas fiziniuose įrenginiuose ir virtualiose aplinkose:

    • Naudojau virtualias mašinas (pavyzdžiui, su skirtingomis Windows ir macOS versijomis) senesnių naršyklių ar specifinių OS konfigūracijų testavimui.
    • Naudojau emuliatorius ir simuliatorius (pavyzdžiui, Xcode Simulator iOS-Safari) mobiliesiems įrenginiams.
    • Dirbau su nuotolinio valdymo įrenginiais ir naršyklių valdymo paslaugomis (pavyzdžiui, BrowserStack, Sauce Labs), siekiant išplėsti testavimo apimtį ir testuoti didelėje įrenginių ir naršyklių įvairovėje.
  3. Kroso-brauzerinė automatizacija:

    • Integravau automatinius testus į CI/CD piltuvą, kasdien arba po kiekvieno įsipareigojimo, vykdant juos skirtingose naršyklėse.
    • Naudojau rėmelius:
      • Selenium WebDriver: rašyti testus įvairiomis kalbomis (Java, Python, JavaScript) ir vykdyti juos su atitinkamais vairuotojais.
      • Playwright ir Cypress: naujuose projektuose, siekiant greitesnio ir patikimesnio automatizavimo, su naršyklių palaikymu "iš dėžutės".
    • Naudojau multyplexing arba paralelinį testų vykdymą skirtinguose mazguose (pavyzdžiui, naudojant Selenium Grid arba debesų paslaugas), siekiant sutaupyti laiko.
    • Automatizavau vizualinių regresijų patikrinimus, naudojant įrankius (pavyzdžiui, Applitools, Percy), lyginant ekrano kopijas skirtingose naršyklėse.
  4. Strategijos ir įrankių nustatymas:

    • Analizavau tinklo analizę (Google Analytics), siekiant nustatyti dažniausiai naudojamas naršykles ir įrenginius.
    • Kūriau testavimo matricą su būtinomis naršyklių, OS ir įrenginių kombinacijomis, remiantis analitika, projekto reikalavimais ir rizikomis.
    • Nuolat tyrinėjau naujų naršyklių versijas ir jų ypatybes, koreguodamas testavimo strategiją.

Pavyzdinis kodas Selenium testui Chrome ir Firefox naršyklėse:

// Laikoma, kad yra įdiegta TestNG arba JUnit ir atitinkami vairuotojai (chromedriver, geckodriver) PATH'e

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

public class CrossBrowserTest {

    WebDriver driver; // vairuotojo kintamojo deklaravimas

    @BeforeClass // metodas vykdomas prieš visus testus klasėje
    public void setup() {
        // vairuotojų kelių konfigūracija, jei jie nėra PATH'e
        // System.setProperty("webdriver.chrome.driver", "kelias/į/chromedriver");
        // System.setProperty("webdriver.gecko.driver", "kelias/į/geckodriver");
    }

    // metodas vairuotojo inicijavimui pagal parametrą "browser"
    @Parameters("browser") // iš XML konfigūracijos gautas parametras
    @Test // testavimo scenarijus
    public void testHomepageTitle(String browserName) { // įvesties parametras iš testng.xml
        if (browserName.equalsIgnoreCase("chrome")) {
            driver = new ChromeDriver(); // Chrome vairuotojo inicijavimas
        } else if (browserName.equalsIgnoreCase("firefox")) {
            driver = new FirefoxDriver(); // Firefox vairuotojo inicijavimas
        } else {
            throw new IllegalArgumentException("Naršyklė " + browserName + " nepalaikoma");
        }

        driver.manage().window().maximize(); // naršyklės lango padidinimas
        driver.get("https://www.example.com"); // URL atidarymas

        // Puslapio antraštės tikrinimas
        String pageTitle = driver.getTitle();
        System.out.println("Naršyklės " + browserName + " puslapio antraštė: " + pageTitle);
        // Assert.assertEquals(pageTitle, "Example Domain"); // patikrinimo assert'ai

        // Tolimesni veiksmai ar patikrinimai...
    }

    @AfterMethod // vykdomas po kiekvieno testo metodo
    public void tearDown() {
        if (driver != null) {
            driver.quit(); // naršyklės uždarymas ir sesijos pabaiga
        }
    }
}
<!-- pavyzdinis testng.xml failas, skirtas Chrome ir Firefox testavimui -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Cross Browser Suite"> <!-- testų rinkinys pavadinimas -->

    <test name="Chrome Test"> <!-- atskiras testas Chrome naršyklei -->
        <parameter name="browser" value="chrome"/> <!-- naršyklės pasirinkimo parametras -->
        <classes>
            <class name="CrossBrowserTest"/> <!-- testų klasės nuoroda -->
        </classes>
    </test>

    <test name="Firefox Test"> <!-- atskiras testas Firefox naršyklei -->
        <parameter name="browser" value="firefox"/> <!-- naršyklės pasirinkimo parametras -->
        <classes>
            <class name="CrossBrowserTest"/> <!-- testų klasės nuoroda -->
        </classes>
    </test>

</suite>

Mano požiūris į kryžminį naršyklių testavimą visada siekia pasiekti maksimalų padengimą ir optimalų išteklių naudojimą, derinant rankinius patikrinimus, siekiant atskleisti niuansus, ir automatizaciją, skirtą regresiniam testavimui.