2012-07-06 9 views
8

Sto provando a testare in modo programmato il tempo di caricamento di un elenco di siti Web. Lo scopo è simulare approssimativamente il tempo di caricamento della pagina che un utente percepirà.Modo giusto per testare il tempo di caricamento della pagina nel selenio?

Il mio primo approccio è quello di chiamare il seguente all'interno di un ciclo:

startTime = System.currentTimeMillis(); 
    driver.get("http://" + url); 
    diff = System.currentTimeMillis() - startTime; 
    System.out.println("Load time was " + diff); 

Il problema è a volte ho il risultato di tempo prima che la pagina ha davvero caricato (cioè io ottenere 50ms volte) quindi credo che il controllo viene consegnato alle istruzioni successive prima che lo driver.get() sia stato completato.

Cosa devo fare per migliorare questo test?

EDIT:

Come user1258245 suggerito vedevo l'ora per un elemento da caricare, ma il problema è che non so quale pagine essere malato di caricare in anticipo.

+0

Vedi http://stackoverflow.com/questions/6112863/timing-page-load-times- in-selenio – Avery

risposta

13

Ci sono 2 modi per farlo che ti daranno dati significativi.

  1. Utilizzare Browsermob Proxy con selenio. Questo è un esempio in Python, ma la sua più o meno lo stesso in Java

    from browsermobproxy import Server 
    server = Server("path/to/browsermob-proxy") 
    server.start() 
    proxy = server.create_proxy() 
    
    from selenium import webdriver 
    profile = webdriver.FirefoxProfile() 
    profile.set_proxy(proxy.selenium_proxy()) 
    driver = webdriver.Firefox(firefox_profile=profile) 
    
    proxy.new_har("google") 
    driver.get("http://www.google.co.uk") 
    proxy.har # returns a HAR JSON blob 
    
    proxy.stop() 
    driver.quit() 
    

Il file HAR che viene restituito dalla proxy.har, che è solo un blob JSON, vi darà le informazioni di cui avete bisogno. Ho blogged a questo proposito, all'inizio di quest'anno

  1. L'altro approccio è quello di utilizzare le specifiche di navigazioni temporizzazioni disponibili nei browser moderni. Tutto quello che dovete fare è eseguire alcuni javascript e si otterrà dettagli di caricamento della pagina, ecc

    ((JavascriptExecutor)driver).executeScript("var performance = window.performance || {};" + 
          "var timings = performance.timing || {};"+ 
          "return timings;"); 
    
    /* The hashmap returned will contain something like the following. 
    * The values are in milliseconds since 1/1/1970 
    * 
    * connectEnd: 1280867925716 
    * connectStart: 1280867925687 
    * domainLookupEnd: 1280867925687 
    * domainLookupStart: 1280867925687 
    * fetchStart: 1280867925685 
    * legacyNavigationStart: 1280867926028 
    * loadEventEnd: 1280867926262 
    * loadEventStart: 1280867926155 
    * navigationStart: 1280867925685 
    * redirectEnd: 0 
    * redirectStart: 0 
    * requestEnd: 1280867925716 
    * requestStart: 1280867925716 
    * responseEnd: 1280867925940 
    * responseStart: 1280867925919 
    * unloadEventEnd: 1280867925940 
    */ 
    
+0

È grandioso! Andrò con il numero 1 (il primo :). Penso che analizzerò solo il file HAR (appena controllato ed è solo JSON) e produrrò i risultati da solo. Molte grazie per il vostro aiuto. – cookM

Problemi correlati