17 Pārlūka vienums

Pārskats

Browser vienumi ļauj uzraudzīt sarežģītas tīmekļa vietnes un tīmekļa lietojumprogrammas, izmantojot pārlūkprogrammu.

Browser vienumu atbalsts pašlaik ir eksperimentāls.

Browser vienumi apkopo datus, izpildot lietotāja definētu JavaScript kodu un izgūstot datus, izmantojot HTTP/HTTPS. Šis vienums var simulēt tādas ar pārlūkprogrammu saistītas darbības kā klikšķināšana, teksta ievadīšana, navigācija tīmekļa lapās un citas lietotāju mijiedarbības ar tīmekļa vietnēm vai tīmekļa lietojumprogrammām.

Papildus skriptam var norādīt arī neobligātu parametru sarakstu (vārda un vērtības pārus) un taimautu.

Šis vienums daļēji ievieš W3C WebDriver standartu ar Selenium Server vai vienkāršu WebDriver (piemēram, ChromeDriver) kā tīmekļa testēšanas galapunktu. Lai vienums darbotos, Zabbix serveris/starpniekserveris konfigurācijas failā iestatiet parametru WebDriverURL (ja izmantojat ChromeDriver, skatiet Drošības apsvērumus). Lai nodrošinātu labāku veiktspēju, apsveriet iespēju izmantot atsevišķu serveri tīmekļa testēšanas videi.

Browser vienumu pārbaudes tiek izpildītas un apstrādātas ar Zabbix servera vai starpniekservera browser pollers. Ja nepieciešams, Zabbix serveris/starpniekserveris konfigurācijas failā varat pielāgot browser pollers iepriekš izveidoto instanču skaitu, izmantojot parametru StartBrowserPollers.

Sarežģītu tīmekļa vietņu un tīmekļa lietojumprogrammu uzraudzībai ir pieejama veidne Website by Browsergatava veidne.

Konfigurācija

Laukā Type vienuma konfigurācijas formā atlasiet Browser un pēc tam aizpildiet obligātos laukus.

Visi obligātie ievades lauki ir atzīmēti ar sarkanu zvaigznīti.

Lauki, kuriem Browser vienumiem ir nepieciešama specifiska informācija, ir šādi:

Lauks Apraksts
Key Ievadiet unikālu atslēgu, kas tiks izmantota vienuma identificēšanai.
Parameters Norādiet mainīgos, kas tiks nodoti skriptam kā atribūta un vērtības pāri.
Tiek atbalstīti lietotāja makrosi. Lai redzētu, kuri iebūvētie makrosi tiek atbalstīti, meklējiet "Browser-type item" atbalstīto makrosu tabulā.
Script Ievadiet JavaScript kodu modālajā redaktorā, kas tiek atvērts, noklikšķinot parametra laukā vai uz zīmuļa ikonas blakus tam. Šim kodam jānodrošina loģika metrikas vērtības atgriešanai.
Kodam ir piekļuve visiem parametriem, visiem Zabbix pievienotajiem papildu JavaScript objektiem un Browser vienuma JavaScript objektiem.
Skatiet arī: JavaScript Guide.
Timeout JavaScript izpildes noildze (1-600s; tās pārsniegšana atgriezīs kļūdu).
Ņemiet vērā, ka atkarībā no skripta var būt nepieciešams ilgāks laiks, līdz noildze nostrādā.
Papildinformāciju par parametru Timeout skatiet sadaļā vispārīgie vienuma atribūti.

Piemēri

Lai redzētu piemēru, kā iestatīt Zabbix vietņu uzraudzībai, izmantojot Website by Browser veidni, skatiet Monitor websites with browser items.

Noklusējuma skripts

Šis skripts:

  1. Inicializē pārlūka sesiju.
  2. Pāriet uz norādīto URL.
  3. Apkopo veiktspējas ierakstus un sesijas statistiku un atgriež tos kā JSON virkni.

Laukā Skripts ievadiet:

var browser = new Browser(Browser.chromeOptions());

try {
    browser.navigate("http://example.com");
    browser.collectPerfEntries();
}
finally {
    return JSON.stringify(browser.getResult());
}
Inicializēt pārlūkprogrammu ar pielāgotām iespējām

Šis skripts:

  1. Inicializē pārlūkprogrammas sesiju pieejamajai pārlūkprogrammai, pamatojoties uz pirmo atbilstošo pārlūkprogrammu tādā secībā, kāda norādīta skriptā.
  2. Definē pārlūkprogrammas iespējas, tostarp lapas ielādes stratēģiju un katrai pārlūkprogrammai specifiskas opcijas, piemēram, bezgalvas režīmu Chrome, Firefox un Microsoft Edge pārlūkprogrammām.

Laukā Script ievadiet:

var browser = new Browser({
    "capabilities":{
        "firstMatch":[
            {
                "browserName":"chrome",
                "pageLoadStrategy":"normal",
                "goog:chromeOptions":{
                    "args":[
                        "--headless=new"
                    ]
                }
            },
            {
                "browserName":"firefox",
                "pageLoadStrategy":"normal",
                "moz:firefoxOptions":{
                    "args":[
                        "--headless"
                    ]
                }
            },
            {
                "browserName":"MicrosoftEdge",
                "pageLoadStrategy":"normal",
                "ms:edgeOptions":{
                    "args":[
                        "--headless=new"
                    ]
                }
            },
            {
                "browserName":"safari",
                "pageLoadStrategy":"normal"
            }
        ]
    }
});
Inicializēt pārlūkprogrammu ar GUI

Pēc noklusējuma pārlūkprogrammas sesijas (izņemot Safari) tiek inicializētas bezgalvas režīmā, kas nozīmē, ka pārlūkprogrammas grafiskais lietotāja interfeiss (GUI) netiek rādīts.

Šis skripts inicializē pārlūkprogrammas sesiju ar iespējotu GUI.

Ņemiet vērā: ja WebDriver nevar atrast pārlūkprogrammas bināro failu, varat norādīt ceļu manuāli.

var opts = Browser.chromeOptions();
opts.capabilities.alwaysMatch['goog:chromeOptions'].args = [];

// Lai inicializētu Firefox sesiju ar GUI, atkomentējiet šādas rindas:
// var opts = Browser.firefoxOptions();
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].binary = 'usr/bin/firefox';
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].args = [];

// Lai inicializētu Microsoft Edge sesiju ar GUI, atkomentējiet šādas rindas:
// var opts = Browser.edgeOptions();
// opts.capabilities.alwaysMatch['ms:edgeOptions'].binary = 'usr/bin/microsoft-edge';
// opts.capabilities.alwaysMatch['ms:edgeOptions'].args = [];

var browser = new Browser(opts);

Ja jūsu testi tiek palaisti attālā serverī vai konteinerā, varat izmantot Virtual Network Computing (VNC) klientu, lai izveidotu savienojumu ar iekārtas VNC serveri. Tas ļauj attālināti skatīt pārlūkprogrammas GUI un mijiedarboties ar to.

Ekrānuzņēmumu uzņemšana

Šis skripts:

  1. Inicializē pārlūkprogrammas sesiju.
  2. Iestata pārlūkprogrammas loga izmēru, lai noteiktu ekrānuzņēmuma izmēru (norādīts kā parametri, skatiet tālāk).
  3. Pāriet uz URL (norādīts kā parametrs, skatiet tālāk).
  4. Apkopo sesijas statistiku, uzņem ekrānuzņēmumu un pievieno to savāktajai statistikai.
  5. Apstrādā kļūdas, uzņemot kļūdu ziņojumus un ekrānuzņēmumu.
  6. Atgriež savāktos rezultātus kā JSON virkni.

Skripts izmanto arī parametrus no vienuma konfigurācijas formas:

Laukā Script ievadiet:

var browser, result;

var browser = new Browser(Browser.chromeOptions());

try {
    var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.

    browser.setScreenSize(Number(params.width), Number(params.height))

    browser.navigate(params.webURL);

    result = browser.getResult();
    result.screenshot = browser.getScreenshot();
}
catch (err) {
    if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
    result.error.screenshot = browser.getScreenshot();
}
finally {
    return JSON.stringify(result);
}
Pārbaudīt Zabbix pieteikšanos

Šis skripts:

  1. Inicializē pārlūka sesiju.
  2. Atver lapu (norādīta kā parametrs, skatiet zemāk).
  3. Ievada lietotājvārdu un paroli (norādīti kā parametri, skatiet zemāk).
  4. Atrod un noklikšķina uz pieteikšanās pogas.
  5. Atrod un noklikšķina uz atteikšanās pogas.
  6. Apkopo veiktspējas datus pirms pieteikšanās un pēc tās, kā arī pēc atteikšanās.
  7. Apstrādā kļūdas, iegūstot kļūdu ziņojumus un ekrānuzņēmumu.
  8. Atgriež apkopotos rezultātus kā JSON virkni.

Skripts izmanto arī parametrus no vienuma konfigurācijas formas:

Laukā Script ievadiet:

var browser, result;

browser = new Browser(Browser.chromeOptions());

try {
    var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.

    browser.navigate(params.webURL);
    browser.collectPerfEntries("open page");

    var el = browser.findElement("xpath", "//input[@id='name']");
    if (el === null) {
        throw Error("cannot find name input field");
    }
    el.sendKeys(params.username);

    el = browser.findElement("xpath", "//input[@id='password']");
    if (el === null) {
        throw Error("cannot find password input field");
    }
    el.sendKeys(params.password);

    el = browser.findElement("xpath", "//button[@id='enter']");
    if (el === null) {
        throw Error("cannot find login button");
    }
    el.click();

    browser.collectPerfEntries("login");

    el = browser.findElement("link text", "Sign out");
    if (el === null) {
        throw Error("cannot find logout button");
    }
    el.click();

    browser.collectPerfEntries("logout");

    result = browser.getResult();
}
catch (err) {
    if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
    result.error.screenshot = browser.getScreenshot();
}
finally {
    return JSON.stringify(result);
}
Saišu atrašana

Šis skripts:

  1. Inicializē pārlūkprogrammas sesiju.
  2. Definē funkciju dublikātu elementu noņemšanai no masīva (skatiet 5. soli).
  3. Pāriet uz lapu (norādītu kā parametrus, skatiet tālāk).
  4. Atrod saites lapā.
  5. Noņem dublētās saites, lai nodrošinātu, ka tās ir unikālas.
  6. Izvelk tikai tās saites, kas sākas ar "http".
  7. Formatē iegūtās saites noteiktā struktūrā.
  8. Apstrādā kļūdas, saglabājot kļūdu ziņojumus un ekrānuzņēmumu.
  9. Atgriež savāktos rezultātus kā JSON virkni.

Skripts izmanto arī parametrus no vienuma konfigurācijas formas:

  • scheme - {$WEBSITE.SCHEME}
  • domain - {$WEBSITE.DOMAIN}
  • path - {$WEBSITE.PATH}

Laukā Script ievadiet:

var browser, result;

browser = new Browser(Browser.chromeOptions());

try {
    var params = JSON.parse(value);  // Parse the JSON string containing parameters passed from Zabbix.

    function uniq(a) {
        return a.sort().filter(function (item, pos, ary) {
            return !pos || item != ary[pos - 1];
        });
    }

    browser.navigate(params.scheme + '://' + params.domain + params.path);

    var el = browser.findElements("link text", "");
    var links = [];
    for (var n = 0; n < el.length; n++) {
        links.push(el[n].getAttribute('href'));
    }

    links = uniq(links);

    result = [];
    for (i = 0; i < links.length; i++) {
        if (links[i].match(/^http.*/)) {
            var row = {};
            row["{#URL}"] = links[i];
            result.push(row);
        }
    }
}
catch (err) {
    if (!(err instanceof BrowserError)) {
        browser.setError(err.message);
    }
    result = browser.getResult();
    result.error.screenshot = browser.getScreenshot();
}
finally {
    return JSON.stringify(result);
}