19 Pārlūka vienumi
Pārskats
Pārlūka vienumi ļauj uzraudzīt sarežģītas tīmekļa vietnes un tīmekļa lietojumprogrammas, izmantojot pārlūku.
Pārlūka vienumu atbalsts pašlaik ir eksperimentāls.
Pārlūka vienumi apkopo datus, izpildot lietotāja definētu JavaScript kodu un iegūstot datus, izmantojot HTTP/HTTPS. Šis vienums var simulēt tādas ar pārlūku saistītas darbības kā klikšķināšana, teksta ievade, pārvietošanās pa tīmekļa lapām un citas lietotāja mijiedarbības ar tīmekļa vietnēm vai tīmekļa lietojumprogrammām.
Papildus skriptam var norādīt neobligātu parametru sarakstu (nosaukuma un vērtības pārus) un noildzi.
Vienums daļēji ievieš W3C WebDriver standartu, izmantojot vai nu Selenium Server, vai parastu WebDriver (piemēram, ChromeDriver) kā tīmekļa testēšanas galapunktu.
Lai vienums darbotos, iestatiet galapunktu Zabbix serveris/starpniekserveris konfigurācijas faila parametrā WebDriverURL (ja izmantojat ChromeDriver, skatiet Drošības apsvērumi).
Labākai veiktspējai apsveriet iespēju izmantot atsevišķu serveri tīmekļa testēšanas videi.
Pārlūka vienumu pārbaudes izpilda un apstrādā Zabbix servera vai starpniekservera pārlūka aptaujātāji.
Ja nepieciešams, varat pielāgot iepriekš atzaroto pārlūka aptaujātāju instanču skaitu Zabbix serveris/starpniekserveris konfigurācijas faila parametrā StartBrowserPollers.
Sarežģītu tīmekļa vietņu un tīmekļa lietojumprogrammu uzraudzībai ir pieejama veidne Website by Browser kā gatava 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 skatītu piemēru, kā iestatīt Zabbix vietņu uzraudzībai, izmantojot veidni Website by Browser, skatiet Vietņu uzraudzība ar Browser vienumiem.
Noklusējuma skripts
Šis skripts:
- Inicializē pārlūka sesiju.
- Pāriet uz norādīto URL.
- 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ūku ar pielāgotām iespējām
Šis skripts:
- Inicializē pārlūka sesiju pieejamajam pārlūkam, pamatojoties uz pirmo atbilstošo pārlūku skriptā norādītajā secībā.
- Definē pārlūka iespējas, tostarp lapas ielādes stratēģiju un katram pārlūkam specifiskas opcijas, piemēram, bezgalvas režīmu Chrome, Firefox un Microsoft Edge pārlūkiem.
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ūku ar GUI
Pēc noklusējuma pārlūka sesijas (izņemot Safari) tiek inicializētas bezgalvas režīmā, kas nozīmē, ka pārlūka grafiskā lietotāja saskarne (GUI) netiek parādīta.
Tālāk redzamais skripts inicializē pārlūka sesiju ar iespējotu GUI.
Ņemiet vērā, ka, ja WebDriver nevar atrast pārlūka 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, noņemiet komentāru no tālāk norādītajām rindām:
// 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, noņemiet komentāru no tālāk norādītajām rindām:
// 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 izpildīti 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ūka GUI un ar to mijiedarboties.
Uzņemt ekrānuzņēmumus
Tālāk redzamais skripts:
- Inicializē pārlūka sesiju.
- Iestata pārlūka skata apgabala izmēru, lai noteiktu ekrānuzņēmuma izmēru (norādīts kā parametri, skatiet zemāk).
- Atver URL (norādīts kā parametrs, skatiet zemāk).
- Apkopo sesijas statistiku, uzņem ekrānuzņēmumu un pievieno to apkopotajai statistikai.
- Apstrādā kļūdas, uztverot kļūdu ziņojumus un ekrānuzņēmumu.
- Atgriež apkopotos rezultātus kā JSON virkni.
Skripts izmanto arī parametrus no vienuma konfigurācijas formas:
- webURL - http://example.com
- width - 1920
- height - 1080
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:
- Inicializē pārlūka sesiju.
- Atver lapu (norādīta kā parametrs, skatiet zemāk).
- Ievada lietotājvārdu un paroli (norādīti kā parametri, skatiet zemāk).
- Atrod un noklikšķina uz pieteikšanās pogas.
- Atrod un noklikšķina uz atteikšanās pogas.
- Apkopo veiktspējas datus pirms pieteikšanās un pēc tās, kā arī pēc atteikšanās.
- Apstrādā kļūdas, iegūstot kļūdu ziņojumus un ekrānuzņēmumu.
- Atgriež apkopotos rezultātus kā JSON virkni.
Skripts izmanto arī parametrus no vienuma konfigurācijas formas:
- webURL - http://{HOST.CONN}/index.php
- username - {$USERNAME}
- password - {$PASSWORD}
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:
- Inicializē pārlūka sesiju.
- Definē funkciju dublējošos elementu noņemšanai no masīva (skatiet 5. soli).
- Pāriet uz lapu (norādīta kā parametri, skatiet zemāk).
- Atrod saites lapā.
- Noņem dublējošās saites, lai nodrošinātu to unikalitāti.
- Izgūst tikai tās saites, kas sākas ar "http".
- Formatē izgūtās saites noteiktā struktūrā.
- Apstrādā kļūdas, uztverot kļūdu ziņojumus un ekrānuzņēmumu.
- 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);
}