17

Stiamo utilizzando protractor per testare le applicazioni AngularJS interne.Test delle prestazioni del browser tramite selenio

Oltre ai test funzionali, controlliamo le regressioni delle prestazioni con l'aiuto di protractor-perf basato sulla libreria nodejs browser-perf. Perché, "Performance is a feature".

Con protractor-perf siamo in grado di misurare e far valere i differenti caratteristiche delle prestazioni rendendo le azioni del browser, for example:

browser.get('http://www.angularjs.org'); 

perf.start(); // Start measuring the metrics 
element(by.model('todoText')).sendKeys('write a protractor test'); 
element(by.css('[value="add"]')).click(); 
perf.stop(); // Stop measuring the metrics 

if (perf.isEnabled) { // Is perf measuring enabled ? 
    // Check for perf regressions, just like you check for functional regressions 
    expect(perf.getStats('meanFrameTime')).toBeLessThan(60); 
}; 

Ora, per un un'altra applicazione interna abbiamo una serie di test di selenio a base di scritti in Python .

È possibile controllare le regressioni delle prestazioni con selenio-pitone o dovrei riscrivere i test utilizzando protractor per poter scrivere i test delle prestazioni del browser?

+1

Spero che questo possa [aiutare] (https://gist.github.com/klepikov/5457750) ... una discussione dettagliata su questo è stata data in [GTAC - 2013] (https://www.youtube.com/watch? v = 0_kAPWSZNY4). –

+1

@VivekSingh lo fa davvero. L'idea presentata durante questo talk di conferenza sull'automazione di google test è fantastica e molto correlata a ciò che sto chiedendo. Cercherò di sviluppare l'idea in modo specifico per Python e spero di presentare una risposta qui. Grazie mille. – alecxe

+0

bello sapere che ha aiutato ... saluti ... –

risposta

16

Vi è la possibilità di avvicinarsi a what browser-perf is doing raccogliendo il chrome performance logs e analizzandoli.

Per get performance logs, accendere performance log modificando loggingPrefs capacità desiderata:

from selenium import webdriver 
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities 

caps = DesiredCapabilities.CHROME 
caps['loggingPrefs'] = {'performance': 'ALL'} 
driver = webdriver.Chrome(desired_capabilities=caps) 

driver.get('https://stackoverflow.com') 

logs = [json.loads(log['message'])['message'] for log in driver.get_log('performance')] 

with open('devtools.json', 'wb') as f: 
    json.dump(logs, f) 

driver.close() 

A questo punto, devtools.json di file conterrebbe una serie di record di traccia:

[ 
    { 
    "params": { 
     "timestamp": 1419571233.19293, 
     "frameId": "16639.1", 
     "requestId": "16639.1", 
     "loaderId": "16639.2", 
     "type": "Document", 
     "response": { 
     "mimeType": "text/plain", 
     "status": 200, 
     "fromServiceWorker": false, 
     "encodedDataLength": -1, 
     "headers": { 
      "Access-Control-Allow-Origin": "*", 
      "Content-Type": "text/plain;charset=US-ASCII" 
     }, 
     "url": "data:,", 
     "statusText": "OK", 
     "connectionId": 0, 
     "connectionReused": false, 
     "fromDiskCache": false 
     } 
    }, 
    "method": "Network.responseReceived" 
    }, 
    { 
    "params": { 
     "timestamp": 1419571233.19294, 
     "encodedDataLength": 0, 
     "requestId": "16639.1" 
    }, 
    "method": "Network.loadingFinished" 
    }, 
    .. 
] 

Ora, la domanda è , cosa fare con esso.

Un'opzione inizialmente suggerita during the Google Test Automation Conference è di inviare i registri a webpagetest.org. C'è un esempio in java disponibile here, ma, al momento, non ho avuto fortuna ad implementarlo in Python.

In teoria, il report dell'interfaccia utente generato da webpagetest.org sarebbe simile a questa:

enter image description here

Essi forniscono inoltre le metriche in JSON/XML e altri formati che possono essere ulteriormente analizzati.

Questo è davvero qualcosa, grazie a Vivek Singh per il commento di puntamento.


browser perf utilizza anche la funzionalità di registrazione per raccogliere i registri di traccia e analizza i dati.

3

È possibile eseguire test di regressione delle prestazioni con selenio. Tuttavia, come forse hai già notato. L'essenza principale del Selenium è che imita il comportamento dell'utente. Ciò significa che Selenium eseguirà solo l'azione (ad esempio facendo clic sul pulsante) se l'utente è in grado di eseguire la stessa azione. Tenendo conto anche di determinati codici, i workaround (ad esempio, hard waits, vari controlli e codice personalizzato), richiedevano persino di essere in grado di eseguire lo script Selenium. Ciò significa che la "definizione" dei test delle prestazioni utilizzando il selenio sarà leggermente diversa rispetto ai test delle prestazioni tradizionali.

Quello che vorrete fare è avere un timer (start/stop) per ogni azione che il selenio sta eseguendo. Ad esempio: fare clic su un pulsante e registrarlo su un file per un uso futuro.

Utilizzando il selenio è possibile creare una linea di base delle prestazioni e da lì in poi confrontare ogni risultato consecutivo con la linea di base. Questo ti darà delle statistiche che potrai usare per ulteriori analisi.

Selenium e Webdriver (Selenium 2.0) sono dotati di questa funzione fuori dalla scatola. Quindi alcuni codici personalizzati devono succedere perché funzioni.

+0

Questo è un punto interessante e solido. Questo è qualcosa che personalmente mi piace sottolineare - 'selenium' è solo uno strumento di automazione del browser per imitare le azioni dell'utente nella pagina. Ma, lo strumento 'browser-perf' è decisamente [facendo molto su di esso] (https://github.com/axemclion/browser-perf/wiki/Architecture) - usa' about: tracing' per raccogliere le metriche di rendimento . Credo che dovrei seguire l'approccio che hai suggerito (attenersi a una linea di base), o passare a 'goniometro ', che è qualcosa che abbiamo iniziato a utilizzare in modo estensivo in ogni caso. Grazie. – alecxe