1. 程式人生 > >docker下使用selenium+testng實現web自動化

docker下使用selenium+testng實現web自動化

Windows下selenium+testng的web自動化環境搭建

做過自動化的人,肯定對selenium web環境的搭建非常熟悉了,特別是selenium在java中的使用。

先搭建好安裝好JDK,配置好java開發環境(這個如果還是不知怎麼操作的話可是要打PP了)。然後從官網下載對應selenium的jar包,載入到專案裡;或者是使用maven,修改pom.xml檔案直接載入selenium的依賴包即可:

1 <dependency>
2 <groupId>org.seleniumhq.selenium</groupId>
3 <artifactId
>selenium-java</artifactId> 4 <version>3.14.0</version> 5 </dependency>

 

接著加上對應的瀏覽器驅動檔案,就基本搞定環境了,可以開始自動化測試程式碼之路了。

當然大家在編寫程式碼的過程中也會用到現在流行的單元測試框架testng。如何在這基礎上增加testng環境?其實這也不是什麼難事,在testng的官網(https://testng.org/doc/index.html)提供了Eclipse、IEDA等編輯器下如何安裝外掛,比如Eclipse直接進入Market搜尋testng安裝即可,使用maven則需要在pom.xml中新增依賴包:

1 <repositories>
2 <repository>
3 <id>jcenter</id>
4 <name>bintray</name>
5 <url>http://jcenter.bintray.com</url>
6 </repository>
7 </repositories>
8 
9 <dependency>
10 <groupId>org.testng</groupId>
11 <artifactId>testng</
artifactId> 12 <version>6.10</version> 13 <scope>test</scope> 14 </dependency>


無腦等待下載安裝完成,後續就是寫程式碼了,然後就可以自由的揮灑了。
但是今天要介紹的不是上面這些,這種環境的搭建非常簡單,大多數人其實都會,坑也不多,只是個程式碼環境而已。

我們這次要處理的麻煩事是什麼呢?在現在日益發達的docker模式下,上述的編譯環境沒法在linux系統上跑了,沒了程式碼編輯器、沒了介面、也沒了瀏覽器,那應該如何操作呢?讓我們來看一看。

Docker的安裝與使用

同樣的,還是需要java+selenium+testng,只不過環境從windows變成了linux。

關於docker的使用這裡稍稍給大家介紹一下安裝、啟動過程:

直接使用yum install docker命令安裝;

service docker start啟動docker服務;

然後docker pull centos搞定centos版本下最基本的docker映象;

通過docker images命令可以列出當前所有映象;

檢視到linux的映象後,使用docker run -it -d 映象名稱,讓linux的容器跑起來(注意-it -d的引數,如果沒有容器一閃而過就掛起了);

進入容器可先通過docker ps檢視當前所有執行的容器,如果查不到,說明容器並沒有啟動,或者已經關閉了,docker ps會列出容器的id;

使用docker attach 容器id即可登入到容器中的linux了。

 

Docker下java環境搭建

容器裡的linux其實和普通的linux操作是一樣的了。

首先是安裝jdk:

下載 jdk-8u181-linux-x64.tar.gz 包;

tar -xzvf jdk-8u181-linux-x64.tar.gz 解壓,得到jdk1.8.0_181 目錄(假設存放為/root/java/ 目錄);

配置java的環境變數:

編輯環境變數檔案:vi /etc/profile

加入內容:

1 export JAVA_HOME=/root/java/jdk1.8.0_181 
2 export JRE_HOME=${JAVA_HOME}/jre
3 export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib 
4 export PATH=${JAVA_HOME}/bin:$PATH

 

重新整理環境變數配置:

source /etc/profile

確認java版本是否生效:

java -version

到這裡java環境算是解決了,也沒什麼特別的難度,一步步來即可。

Docker下testng環境配置

接下來就是testng了,因為環境類似java而且也和環境變數有關係,所以優先解決:

下載 testng-6.14.3.jar 包;

tar -xzvf testng-6.14.3.jar解壓得到testng目錄(假設放在 /root/java/testng/ 目錄下) ;

繼續編輯環境變數檔案:

vi /etc/profile

加入內容:

export TESTNG_HOME=/root/java/testng
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH:$TESTNG_HOME/testng-6.14.3.jar

 

重新整理環境變數配置:

source /etc/profile

注意這裡的testng環境變數,其中的 CLASSPATH 是在java環境的基礎上追加的,如果大家是在windows上配置,分隔符要換成 ; 且環境變數的互相呼叫形式不同,這是有一些區別的。

好了,可能有人會覺得,這不是很簡單嗎?
但是,如果這時候繼續去執行的話,會發現開始報錯了,也就是深坑來了,這是因為脫離了整個開發環境。

先提一下testng的執行步驟,假設自己寫個test.java,記住要最簡單的,別參合其他jar包之類的,其中包含包名為 simple ,類名為 test:

1 javac test.java
2 java org.testng.TestNG -testclass simple.test


看似非常簡單,但是執行起來,到處都是錯誤,執行javac test.java,常見錯誤為:

java.lang.NoClassDefFoundError: com/beust/jcommander/

這是缺少因為缺少編譯時用到的jar包,需要下載 jcommander-1.72.jar,我們將它放置在testng的jar包一起(假設放置在/root/java/testng/目錄):

環境變數的CLASSPATH需要追加 :

CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH:$TESTNG_HOME/testng-6.14.3.jar:$TESTNG_HOME/jcommander-1.72.jar

 

繼續重新整理環境配置:

source /etc/profile

這之後一般就可以順利編譯,出現 test.class 檔案了。

如果出現其他錯誤,比如與testng相關的包不存在等等,請檢查環境變數配置是否正確。

最後就是執行的環節了,也是大家會遇到問題點最多的點了。

先提一下結構,比如上面 simple.test 的類,那麼需要建立資料夾 simple 裡面存放test.java。

CLASSPATH的環境變數裡,需要有testng程式碼檔案和包的頂級目錄追加新增,假設為

1 /root/java/testng/
2 /root/java/testng/simple/test.java

 

有了這樣的結構前提,就可以通過命令執行了:

java org.testng.TestNG -testclass simple.test
出現結果,意味著執行成功了:

Total tests run: 1, Failures: 0, Skips: 0

如果你的程式碼中有測試用例@Test,但run出現0的話,說明還是失敗的,只是沒有給明確的報錯而已。

當然到這裡還沒意味著結束。

因為你可能還會遇到缺乏各種依賴的jar包的問題:

可以通過引數將這些jar包都引入

1 /root/java/testng/
2 /root/java/testng/simple/test.java

 

遠端呼叫windows下瀏覽器

以為這就搞定環境,萬事大吉了麼?再補一刀,瀏覽器呢?沒有瀏覽器得問題應該怎麼解決呢?

請使用selenium自帶的server部署到windows機器上。

這個問題的解決反而是比較簡單的:

下載 selenium-server-standalone-3.14.0.jar 包;

放在指定目錄(比如放在C盤根目錄);

cd到該目錄下:cd C:\

執行命令開啟selenium remote服務:

java -jar selenium-server-standalone-3.14.0.jar -port 6666


接下來有人會問怎麼指定瀏覽器?

只需要在java程式碼裡,使用下面語句就可以對剛才在windows啟動的服務進行呼叫了:

WebDriver driver = new RemoteWebDriver("http://ip:6666/wd/hub/", DesiredCapabilities.chrome());


另外注意伺服器上還是需要瀏覽器的driver驅動檔案,無腦一點就和jar包放一起就完事了,愛折騰的可以自己研究一把,區別只是啟動服務時需要帶上一些引數。

整個docker下使用selenium+java遠端呼叫widows下Chrome瀏覽器,實現web自動化的環境搭建完畢。

後續關於docker下面使用selenium+testng實現web自動化程式碼的編寫,我們將在後續進行更新,等待我們下一次更新喲~

搭建環境如果遇到問題,或者是對web自動化有興趣的同學可以加入我們的測試討論群。