セレンとセレン化物を使用してWebサイトの応答時間を測定する必要があります。
ウェブサイトの応答時間:
読み込み時間ということですが、ウェブサイトを開く前と開いた後の時間に差をつける方法があることがわかります。
しかし、この方法では、クライアントの読み込み時間を測定しますが、使用するクライアントによって異なりますか?そのための最良の方法は何ですか?
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");
それともこれ?
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);
そして最後の方法は次のとおりです:
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");
皆さん、Selenium Webドライバーを使用して、Webページに関するタイミングデータを収集できます。
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()
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;");
文書:
https://developer.mozilla.org/en-US/docs/Web/API/PerformanceTiming
質問には2つの部分があります。
これらの各ケースのアプローチは少し異なります。
最初のケースでは。指定された2番目と3番目の方法(JavaScriptとJavaを使用する方法)を使用できます。ただし、正しく言及されているように、クライアントごとに異なります。ページの読み込みはブラウザのレンダリングエンジンに完全に依存しているため、ブラウザごとに異なる値が表示されます。
また、ロード時間が10秒を超える場合は、WebDriverWaitメソッドでタイムアウトを10に指定しているため、絶対値を識別できない場合があります。
最初のアプローチでは、ページ内の特定のコンポーネントを待機しているため、必要なものが提供されない場合があります。最近のブラウザーは段階的にレンダリングし、ページ全体の読み込みを開始する前に応答全体が届くのを待たないため、これは正しい方法ではない可能性があります。
2番目のケースでは、同じアプローチを少し調整して、E2Eの観点から検索機能のロード時間を取得できます(最初のケースで考慮されたすべてのバリエーションを含みます)。
より具体的で正確な詳細を提供する他のツールを探している場合は、[〜#〜] yslow [〜#〜]およびWebPageTest。 YSLOWはPhantom JSと統合されており、プロセスの自動化に役立ちます。WebPageTestには、自動化に利用できるAPIがあります。
WebPageTest参照リンク:https://sites.google.com/a/webpagetest.org/docs/advanced-features/webpagetest- restful-apis
YSLOWリファレンスリンク:http://yslow.org/phantomjs/
セレンはこれを行うためのより良い方法を提供していません。あなたがそれを使用している方法は、私が知る限り可能な限り最良の方法です。検索方法については、ページの読み込みに使用したのと同じ方法を使用できます。ただし、開始時間と停止時間の間にいくつかの異なるアクションを実行することになります。
また、あなたの質問に答えると思いますので、この質問もご覧ください。 Selenium WebDriverを使用してページをロードする正確な時間をどのように取得できますか?
Webサイトの負荷テストは常に、使用するクライアントに依存します。 Apache JMeter など、ウェブサイトの読み込み時間をテストするための特別なツールがありますが、JavaScriptを実行したりHTMLページをレンダリングしたりすることはありません(これらのアクションの読み込み時間はクライアント固有です)。 Webサイトの受信にかかる時間、および2番目の質問のようなケースは、検索の実行方法によっては、JMeterよりもSeleniumでテストする方が簡単な場合があります。
2番目の質問については、例と同じように、検索結果が見つかるまでWebDriverWaitが存在します。
function abc(){
var start = window.performance.now();
//Perform task
var end = window.performance.now();
console.log('start = ',start,' ','end = ',end);
}