SoapUI + Selenium Webdriver 自動化測試學習
SoapUI是一個介面測試工具,也是一個巨大的可擴充套件的測試框架。SoapUI 可以整合Selenium Webdriver,然後在SoapUI中可以用Groovy來寫自動化測試用例。
Groovy是基於Java的,會Java的使用Groovy毫無壓力。 這樣只使用SoapUI就既可以做到Webservice介面自動化,也可以實施GUI介面操作的自動化測試。
如何實現SoapUI整合Selenium WebDriver?
根據SoapUI版本不同,我只使用過其中兩個版本SoapUI,配置略有不同。
2017-12-23更新:
最新SoapUI5.4.0 + Selenium3.8.1 :
將selenium-server-standalone-3.8.1.jar放到SOAPUI_HOME\jre\lib\ext下。如Windows中目錄C:\ProgramFiles\SmartBear\SoapUI-5.4.0\jre\lib\ext。
針對SoapUI 4.5.2版本
(1)下載selenium-server-standalone-2.53.0.jar,selenium各版本下載地址:http://selenium- release.storage.googleapis.com/index.html。(其他版本也可以,注意瀏覽器版本,能與瀏覽器版本配套即可, 如最新的Firefox 45.0.2,+ selenium2.48.2的話,好像會報錯), 將selenium-server-standalone-2.53.0.jar放到SOAPUI_HOME\jre\lib\ext下。如Windows中 目錄C:\ProgramFiles\SmartBear\SoapUI-5.2.1\jre\lib\ext。
如果是SoapUI4.5.2版本,那麼配置已經完成,可以開啟SoapUI,建工程,TestSuite,TestCase, Groovy的TestStep,開始用Groovy寫自動化測試程式碼了。。
為什麼要放在jre\lib\ext呢? 畢竟按照SoapUI的官方指導,第三方jar包如jdbc等是放在SOAPUI_HOME\bin\ext目錄
下的。原因是與SoapUI的類載入器體系有關,Selenium和SoapUI都是用了某些jar包只是版本不一致,Selenium的版本更
高一些,為了使Selenium中的生效,放在這裡,否則會報錯,具體錯誤就不再細說了。
針對SoapUI5以上還需要這一步:
如果是SoapUI 5.XX等高於5.0的版本,那麼麻煩一點,還需要這一步。因為SoapUI5以上版本設定Proxy代理功能發生了變化。SoapUI修改了ProxyUtils類。在Windows作業系統下會ProxySelector.setDefault( null ),Webdriver初始化啟動的候會報空指標錯誤。
(2)我的解決方法是:下載了SoapUI原始碼,修改ProxyUtils類,然後編譯ProxyUtils類,編譯成
ProxyUtils.class檔案。到SOAPUI_HOME\bin下找到SoapUI-version.jar,以壓縮包方式用
WinRAR或7-zip等開啟SoapUI-5.xxx.jar,找到對應目錄下
(C: \Program Files\SmartBear\SoapUI-5.2.1\bin\soapui-5.2.1.jar\com\eviware\soapui
\impl\wsdl\support\http\)的 ProxyUtils.class,替換為自己編譯的ProxyUtils.class,
然後啟動SoapUI即可。
所做的改動:將原類中ProxySelector.setDefault( proxySelector );行改為如下所示:
if(proxySelector != null){
ProxySelector.setDefault(proxySelector);
}
else{
proxySelector = ProxySelector.getDefault();
}
O(∩_∩)O,不知道是不是改得很挫,反正能用了。
在此提供一個我所做的修改後的class檔案及說明的下載連結:
http://download.csdn.net/detail/wwwqjpcom/9493875
資源中的附帶的文件中有點不太準確,但是已上傳的資源刪不了,改不了,CSDN 的這個作的真挫,
關於Selenium,我試過selenium 2.48.2和2.53.0版本。
以訪問百度並搜尋為例
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.WebElement
import org.openqa.selenium.firefox.FirefoxDriver
import org.openqa.selenium.OutputType
import org.apache.commons.io.FileUtils
WebDriver driver = new FirefoxDriver()
driver.get("https://www.baidu.com") // Url to be opened
log.info driver.getSessionId().toString()
driver.findElement(By.id("kw")).sendKeys("SoapUI")
driver.findElement(By.id("su")).click()
File f1 = driver.getScreenshotAs(OutputType.FILE)
FileUtils.copyFile(f1, new File("d:\\screenshot1.png"));