2015-04-03 154 views
3

我想使用PhantomJS 2.0/GhostDriver代替ChromeDriver,因爲我已經閱讀過我可以加速我的UI測試。 這是我跑的測試代碼,作爲JUnit測試的一部分:PhantomJS比ChromeDriver慢,使用硒

@Override 
public void runTestCase() throws Exception { 
    long startTime = System.currentTimeMillis(); 
    // log in as admin 
    Login.loginAs("admin", "password"); 
    System.out.println(System.currentTimeMillis() - startTime); 
} 

loginAs功能的用戶名和密碼的文本字段填寫,然後點擊提交按鈕,最後在移動新返回頁面的主頁部分。

現在,我運行一次這個簡單的測試,同時使用Phantomjs和ChromeDriver作爲Selenium在Java(v2.45)中的驅動程序。 他們被初始化爲:

  • ChromeDriver

    System.setProperty("webdriver.chrome.logfile", workingDirectory + "\\chromedriver.log"); 
    service = new ChromeDriverService.Builder().usingDriverExecutable(new File(workingDirectory + "\\chromedriver.exe")).build(); 
    capabilities = DesiredCapabilities.chrome(); 
    
    options = new ChromeOptions(); 
    options.addArguments("--allow-file-access-from-files"); 
    options.addArguments("--verbose"); 
    capabilities.setVersion(""); 
    capabilities.setCapability(ChromeOptions.CAPABILITY, options); 
    driver = new ChromeDriver(service, capabilities); 
    
  • PhantomJS

    System.setProperty("phantomjs.binary.path", workingDirectory + "\\phantomjs.exe"); 
    cliArgsCap = new ArrayList<String>(); 
    capabilities = DesiredCapabilities.phantomjs(); 
    cliArgsCap.add("--web-security=false"); 
    cliArgsCap.add("--ssl-protocol=any"); 
    cliArgsCap.add("--ignore-ssl-errors=true"); 
    cliArgsCap.add("--webdriver-loglevel=INFO"); 
    cliArgsCap.add("--load-images=false"); 
    
    capabilities.setCapability(CapabilityType.SUPPORTS_FINDING_BY_CSS, true); 
    capabilities.setCapability(CapabilityType.TAKES_SCREENSHOT, true); 
    capabilities.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, cliArgsCap); 
    driver = new PhantomJSDriver(capabilities); 
    

我跑我在64位的Windows 7機器的測試。所以,看看測試所花的時間,我總是注意到ChromeDriver比PhantomJS更快。總是。例如,如果使用ChromeDriver進行測試大約需要3-4秒,與PhantomJS相同則需要大約5-6秒。

有沒有人遇到過這個問題?或者有人能給我任何理由嗎?我是否設置了錯誤?

此外,如果您需要更多的細節,請告訴我。

+0

你的設置是正確的。我和Ghostdriver有過相同的經歷。但是,我發現Ghostdriver很有用,以防萬一您需要刮掉網站或將其作爲後臺進程運行。您是否嘗試過命令行/ javascript phantomjs? – LittlePanda 2015-04-03 11:03:58

+0

不幸的是沒有。我怎麼能把我的JUnit測試與那個?此外,我無法修改我想測試的服務器。 – 2015-04-03 11:23:06

+0

對我而言,性能似乎不錯。對你來說太慢了嗎?我知道需要3-4秒才能顯示日誌,然後腳本執行開始。我不會推薦HtmlUnitDriver,因爲我遇到了太多的異常。 GhostDriver也有一些問題,但它比HtmlUnitDriver更好。 – LittlePanda 2015-04-03 11:29:06

回答

1

「PhantomJS是一款帶JavaScript API的無頭WebKit腳本」,因爲它在項目的主頁上進行了解釋。 谷歌從WebKit拆分出來,創建Blink以在Chrome中使用它。 他們之間的主要區別是什麼 - 不幸的是,我不是這裏的專家。

我跑的我真的很長的場景都在Chrome和PhantomJS讓我吃驚的區別之一是非常顯著:

  • PhantomJS - 583.251小號
  • 鉻 - 448.384小號

使用PhantomJS在我的情況下不會帶來性能優勢,但是無需進行無頭測試。我可以使用沒有圖形桌面的機器,併爲一些額外的線程節省計算能力。

+1

此外,PhantomJS是60MB,而谷歌瀏覽器將至少250-300MB。如果你需要運行多個實例,這是一個問題。 – 2016-04-23 19:47:11

0

網頁最慢的一個方面是下載html,JavaScript,css,圖片等,併發出AJAX請求。

對任何一個說Headless的人來說速度更快,怎麼可以無頭無際地解決這些問題?

+0

當然,但花費時間來下載HTML和所有其他的東西,再加上時間來呈現頁面是大於只是下載HTML和所有其他東西。我錯了嗎? – 2015-04-07 08:21:53

+0

在渲染上花費的CPU數量很小。事實上,你可以從PhantomJS獲得屏幕截圖的事實表明,渲染必須在某處完成 – 2015-04-07 12:08:58

4

我發現,這個設置使用了大量的內存也在不斷增加:

cliArgsCap.add("--load-images=false"); 

但是當我使用這個設置,內存使用穩定:

cliArgsCap.add("--load-images=true"); 
+0

在我的情況下,將load-images = false的方法執行從20.000ms減少到200ms。 – outofBounds 2016-10-27 09:52:14