使用selenium grid分布式執行之一
阿新 • • 發佈:2018-02-02
dom whole asd jnl web int user orm tcap
目前ui框架會做一個更新,把原有的Jenkins分布式方式換成grid方式,換成grid方式有兩個好處,1.grid的資源占用比Jenkins的jnlp占用資源少 2.grid可控制不同瀏覽器同時跑
看很多網上跑自己的案例都很順,想直接拿過來用,中間遇到很多問題,發現自己的電腦,啟動多個瀏覽器後,只會執行1個瀏覽器,讀取數據庫中的控件,報空指針問題等,類似並發的問題,最開始懷疑testng多線程問題,折騰了一天,發現是因為我們設計模式問題,並發中driver被覆蓋了,哎,,,之後並發有遇到很多問題,為了不耽誤項目進度,目前不考慮並發了,記錄我最開始使用的demo
public class login { private WebDriver dr; DesiredCapabilities test; String baseUrl; String testExpectedStr; String requestId; String domainName = "https://www.rosewholesale.com/"; String getkeys = "ths#^$%^sdaf%T#$%^fasdbhf&U*$%%$^#"; @Parameters({ "browser", "nodeUrl", "webSite" }) @BeforeClass public void BeforeClass(String browser, String nodeUrl, String webSite) { baseUrl = webSite; if (browser.equals("ie")) { test = DesiredCapabilities.internetExplorer(); } else if (browser.equals("ff")) { test = DesiredCapabilities.firefox(); } else if (browser.equals("chrome")) { String url = nodeUrl + "/wd/hub"; URL urlInstance = null; try { urlInstance = new URL(url); } catch (MalformedURLException e) { e.printStackTrace(); System.out.println("實例化url出錯,檢查一下url格式是否正確,格式為:http://192.168.40.67:5555"); } System.out.println(test); System.out.println("使用的平臺進行啟動的瀏覽器"); String platform_name = "win7"; DesiredCapabilities capabilities = new DesiredCapabilities(); if (platform_name.equalsIgnoreCase("win7")) { capabilities.setPlatform(Platform.VISTA); } if (platform_name.equalsIgnoreCase("win8")) { capabilities.setPlatform(Platform.WIN8); } if (platform_name.equalsIgnoreCase("win8_1")) { capabilities.setPlatform(Platform.WIN8_1); } if (platform_name.equalsIgnoreCase("win10")) { capabilities.setPlatform(Platform.WIN10); } if (platform_name.equalsIgnoreCase("linux")) { capabilities.setPlatform(Platform.LINUX); } capabilities.setBrowserName(browser); capabilities.setVersion(browser); ChromeOptions options = new ChromeOptions(); options.addArguments("disable-infobars"); if (platform_name.equalsIgnoreCase("linux")) { options.addArguments(Arrays.asList("--window-position=0,0")); options.addArguments(Arrays.asList("--window-size=1920,1080")); } else { options.addArguments(Arrays.asList("--start-maximized")); } capabilities.setCapability("chrome.switches", Arrays.asList("--incognito")); options.addArguments("--test-type"); options.addArguments("start-maximized"); options.addArguments("chrome.switches", "--disable-extensions"); capabilities.setCapability(ChromeOptions.CAPABILITY, options); try { dr = new RemoteWebDriver(new URL(url), capabilities); } catch (MalformedURLException e) { e.printStackTrace(); } } else { System.out.println("browser參數有誤,只能為ie、 ff、chrome"); } dr.get(webSite); } @Test public void signin_wrongemail() { Pub.checkStatusBrowser(); 以下是測試方法 }
以下是xml配置文件,並發方式以tests方式運行,class就是類名,以下包含一個登錄一個註冊
<suite name="template" parallel="tests" thread-count="5" > <test name="FirstTest" > <parameter name="browser" value="chrome"/> <parameter name="nodeUrl" value="http://10.33.6.230:5555"/> <parameter name="webSite" value="http://login.rosewholesale.com.trunk.s1.egomsl.com/m-users-a-sign.htm"/> <classes> <class name="com.globalegrow.login.login"> </class> </classes> </test> <test name="FirstTest2" > <parameter name="browser" value="chrome"/> <parameter name="nodeUrl" value="http://10.40.2.113:5555"/> <parameter name="webSite" value="http://login.rosewholesale.com.trunk.s1.egomsl.com/m-users-a-sign.htm"/> <classes> <class name="com.globalegrow.login.registered"> </class> </classes> </test> </suite>
使用selenium grid分布式執行之一