Je dois mesurer le temps de réponse d'un site Web utilisant du sélénium et du séléniure.
Temps de réponse d'un site web:
Je veux dire le temps de chargement, je vois qu'il existe une méthode pour faire la différence entre le temps avant et après l'ouverture du site Web.
Mais de cette façon, mesurera le temps de chargement du client, cela dépendra-t-il du client utilisé? Quelle est la meilleure façon de procéder?
long startTime = System.currentTimeMillis();
driver.get("http://zyxware.com");
new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.id("Calculate")));
long endTime = System.currentTimeMillis();
long totalTime = endTime - startTime;
System.out.println("Total Page Load Time: " + totalTime + "milliseconds");
ou ca?
driver.get("url");
WebElement ele = $(By.tagName("body"));
// get the page load time
Long loadtime = (Long)((JavascriptExecutor)driver).executeScript(
"return performance.timing.loadEventEnd - performance.timing.navigationStart;");
System.out.println(loadtime);
et enfin la manière suivante:
StopWatch pageLoad = new StopWatch();
pageLoad.start();
//Open your web app (In my case, I opened facebook)
driver.get("url");
// Wait for the required any element (I am waiting for Login button in fb)
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.tagName("body")));
pageLoad.stop();
//Get the time
long pageLoadTime_ms = pageLoad.getTime();
long pageLoadTime_Seconds = pageLoadTime_ms / 1000;
System.out.println("Total Page Load Time: " + pageLoadTime_ms + " milliseconds");
les gars, vous pouvez utiliser le pilote Web Selenium pour recueillir des données de synchronisation sur votre page Web, procédez comme suit:
from Selenium import webdriver
source = "http://www.example.com/"
driver = webdriver.Chrome()
driver.get(source)
navigationStart = driver.execute_script("returnwindow.performance.timing.navigationStart")
responseStart = driver.execute_script("return window.performance.timing.responseStart")
domComplete = driver.execute_script("return window.performance.timing.domComplete")
backendPerformance = responseStart - navigationStart
frontendPerformance = domComplete - responseStart
print "Back End: %s" % backendPerformance
print "Front End: %s" % frontendPerformance
driver.quit()
Vous pouvez obtenir les informations de performances liées au timing pour une page donnée avec le performance.timing
API:
// launch the browser
WebDriver driver = new FirefoxDriver();
// visit a page
driver.get("http://stackoverflow.com");
// get the page load time
Long loadtime = (Long)((JavascriptExecutor)driver).executeScript(
"return performance.timing.loadEventEnd - performance.timing.navigationStart;");
Le document :
https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming
Votre question comporte deux parties.
L'approche pour chacun de ces cas varierait un peu.
Dans le premier cas. vous pouvez utiliser la deuxième et la troisième approche spécifiées (celle avec javascript et Java). Cependant, comme mentionné à juste titre, cela varierait d'un client à l'autre. Comme le chargement de la page dépend complètement du moteur de rendu du navigateur, chaque navigateur donnerait une valeur différente.
En outre, si le temps de chargement prend plus de 10 secondes, vous ne pourrez peut-être pas identifier la valeur absolue car vous avez spécifié un délai d'expiration de 10 dans votre méthode WebDriverWait.
La première approche peut ne pas fournir ce dont vous avez besoin pendant que vous attendez un composant spécifique dans la page. Ce n'est peut-être pas le bon moyen car les navigateurs modernes affichent progressivement et n'attendent pas la réponse complète pour commencer à charger la page.
Dans le second cas, vous pouvez peaufiner les mêmes approches un peu et obtenir le temps de chargement de la fonctionnalité de recherche dans une perspective E2E (y compris toutes les variantes considérées dans le premier cas).
Si vous recherchez d'autres outils qui donneraient des détails beaucoup plus précis et précis, vous pouvez essayer [~ # ~] yslow [~ # ~] et WebPageTest . YSLOW a une intégration avec Phantom JS qui aidera à automatiser le processus et WebPageTest a des API qui peuvent être utilisées pour automatiser le même.
Lien de référence WebPageTest: https://sites.google.com/a/webpagetest.org/docs/advanced-features/webpagetest- restful-apis
Lien de référence YSLOW: http://yslow.org/phantomjs/
Le sélénium ne fournit pas une meilleure façon de le faire. La façon dont vous l'utilisez est la meilleure façon possible pour autant que je sache. Pour la méthode de recherche, vous pouvez utiliser la même manière que vous avez utilisée pour le chargement de la page. Sauf que vous feriez différentes actions entre l'heure de début et l'heure de fin.
Jetez également un œil à cette question car je crois qu'elle répond à votre question. Comment pouvons-nous obtenir l'heure exacte pour charger une page en utilisant Selenium WebDriver?
Le test de charge du site Web dépend toujours du client utilisé. Il existe des outils spécialisés pour tester le temps de chargement de votre site Web tels que Apache JMeter , mais il n'exécute pas Javascript ou ne rend pas la page HTML (et les temps de chargement de ces actions sont très spécifiques au client), il collecte uniquement le temps qu'il faut pour recevoir le site Web, et des cas comme votre deuxième question pourraient être plus faciles à tester dans Selenium que dans JMeter, selon la façon dont la recherche est exécutée.
Quant à votre deuxième question, vous auriez un WebDriverWait jusqu'à ce qu'un résultat de recherche soit trouvé, de la même manière que votre exemple.
function abc(){
var start = window.performance.now();
//Perform task
var end = window.performance.now();
console.log('start = ',start,' ','end = ',end);
}