如何使用Java編寫自定義的RobotFramework Lib
本文包括2個章節
1、 Robot Frdamwork中如何調用java Lib庫
2、使用 java編寫自定義的Lib
本文作者為:張永清,轉載請注明出處,版權歸作者所有。Robot Framework自動化測試架構核心指南-如何使用Java編寫自定義的RobotFramework Lib
我們在前面介紹了,Robot Framework可以支援跨語言,那麼對java肯定也是可以支援的。
而且Robot Framework中,RIDE中本身也提供了對測試案例的兩種執行方式,支援pybot和jybot兩種執行方式,如下圖所示。

其中jybot 就是以java虛拟機的形式來執行測試案例,此種方式執行,執行的環境中,需要安裝java jdk運作環境以及jython 安裝包,jython是一個python語言在java中完全實作,也就是說用java來實作了python語言的功能,jython中不僅提供了python庫,也支援java方法的執行。是以jython其實就是解決了Robot Framework中python 不支援直接調用java語言的問題。Jython 可以從http://www.jython.org/downloads.html 連結中進行下載下傳,然後安裝完成後,就可以在Robot Framework中進行使用,如下圖所示。
我們來看一個jython 語言來執行測試案例的例子。
示例:這是一個将字元串全部轉換成大寫形式的例子,這個例子我們用jython語言來執行。
${str} Set Variable aaBBccDDeeFF
${result} Convert To Uppercase ${str}
log ${result}
運作結果如下:
如下圖 所示,這裡我們選擇了jybot 來進行執行,執行時,同pybot一樣得到了我們想要的運作結果。
其實在Robot Framework的官方網站中很多Library庫都提供了java語言版本的實作,如下圖所示。
這裡我們以我們在第二章節中講到的Database Library python庫來作為示例,來看下這個庫對應的java語言的實作以及如何來通過java語言的形式來進行調用。
我們使用時,可以通過Robot Framework提供的maven插件robotframework-maven-plugin來直接引入
或者我們将源碼下載下傳下來後,自己通過執行編譯打包的方式來生成都可以。這裡我們選擇直接用源碼的形式進行編譯,源碼可以從https://github.com/Hi-Fi/robotframework-dblibrary上直接擷取到。下載下傳完成解壓到自己需要的目錄後,可以通過cmd指令行切入到對應的目錄下,使用maven指令行進行編譯,前提是需要在自己的環境中事先安裝好maven的編譯環境,編譯打包時執行mvn clean install -Dmaven.test.skip=true 即可以生成我們想要的java語言實作的Library庫,如下圖所示。
打包完成後,再生成的target目錄中,就可以擷取到編譯好的java語言實作的Library,如下圖所示。
将編譯生成好的robotframework-dblibrary-3.2-SNAPSHOT.jar包和mysql的Driver驅動包一起加入到運作環境的CLASSPATH下面,然後在測試案例集中引入DatabaseLibrary庫,如下圖所示。
引入後,我們就可以正常使用jython的方式來調用java語言版本的DatabaseLibrary庫了,如下圖所示。
使用java語言版本的DatabaseLibrary庫中的關鍵字時,和使用python語言版本的DatabaseLibrary庫中的部分關鍵字的傳參有些不一樣。Java語言版本的DatabaseLibrary連接配接資料庫時,是通過jdbc的方式來進行連結,這裡我們列舉了java語言版本的DatabaseLibrary庫連結一些常用資料庫的示例,如下表所示。Java語言版本的Connect To Database關鍵字接收 [資料庫driver類|jdbc連結位址|資料庫使用者名|資料庫密碼| alias=default ]五個參數,alias如果不傳入的話,預設為取名為default。
Connect To Database
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/world
root
連接配接mysql資料庫
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@servername:port:dbname
system
12345678
連接配接oracle資料庫
org.h2.Driver
jdbc:h2:mem:robotframeworkt;DB_CLOSE_DELAY=-1
sa
連接配接h2資料庫庫
這裡我們看一個java語言實作的DatabaseLibrary庫的源碼的片段,讓大家可以了解下,java語言版本中是如何實作和封裝關鍵字的,這是Connect To Database關鍵字的實作方法,
我們可以看到是通過在方法上加java注解的方式來實作的,@RobotKeyword和@ArgumentNames注解均來自javalib-core庫,我們自己在開發時,可以通過maven依賴的方式引入。
DatabaseLibrary庫的源碼片段:
除了通過jython語言來調用java的Library外,我們還可以通過Remote的方式來實作調用Java語言實作的Library庫。從https://github.com/ombre42/jrobotremoteserver 連結中,可以擷取到用java語言來實作的遠端接口服務,如下圖所示。
我們不建議在實際工作中,過多的使用的jython的方式來調用java語言實作的Library,因為每個測試案例在執行時,都需要一個啟動jvm虛拟機的過程,執行會比使用python語言的方式執行耗時更長,而且相容性并不是十分好,推薦使用Remote的方式來調用Java語言實作的Library庫。
前面我們已經講了如何調用java語言編寫的Lib庫,這一節中,我們來介紹下如何使用java語言編寫自定義的Lib庫。
要使用java編寫自定義Lib庫,我們首先需要建構一個java的開發工程,這裡我們以建構一個java的maven項目為例。在建構的maven工程的的pom.xml檔案中,我們需要引入如下必要依賴。
這個是必須引入的依賴包,作用是提供了建立RobotFramework的關鍵字的注解等功能,友善我們快速的去建立一個Lib庫以及對應的關鍵字。
這個是Remote Server的依賴包,作用是可以啟動一個RobotFramework的遠端調用接口服務,然後RIDE中通過Remote的方式就可以連接配接到該遠端調用服務上,如果不使用遠端調用服務的話,可以不引入該依賴包。
這個是RobotFramework提供的maven插件,這個不是一個必須的maven工程依賴,該插件的作用在于可以模拟我們的RIDE一樣來執行測試案例,在使用maven編譯打包時,可以同時來執行RobotFramework的測試案例。通過如下的方式來指定測試案例的位置。
在maven工程建構好了後,我們就可以來編寫自定義的Lib庫了,下表中描述了使用java語言來編寫自定義Lib時,一些常用的java注解。
注解名稱
使用描述
@RobotKeywords
該注解一般用于java類的頭部,用來标注該java類提供的是一個RobotFramework關鍵字類。
@RobotKeyword
該注解和@RobotKeywords注解需要一起配合使用,@RobotKeyword注解一般用于java中的某個具體方法的頭部,用來标注該方法提供的是一個RobotFramework關鍵字。
可以通過@RobotKeyword後面加括号的方式來說明該關鍵字的用途,比如@RobotKeyword("這是一個示例關鍵字")
該注解需要和@RobotKeyword注解一起使用,該注解用于标注一個RobotFramework關鍵字需要傳入的參數,使用示例:
代碼示例:我們這裡用java的方式來實作RobotFramework 中的Sting Lib庫(如下圖所示)中的部分關鍵字Convert To Lowercase和Convert To Uppercase。
示例:我們通過一個示例來調用一下我們遠端接口服務中定義的關鍵字,如下圖所示。
Starting test: RobotFrameworkTest1.TestSuite11.TestCase001
20180822 10:04:23.328 : INFO : Convert robotFramework To Lowercase
20180822 10:04:23.328 : INFO : ${strLowercase } = robotframework
20180822 10:04:23.330 : INFO : robotframework
20180822 10:04:23.337 : INFO : Convert robotframework To Uppercase
20180822 10:04:23.338 : INFO : ${strUppercase } = ROBOTFRAMEWORK
20180822 10:04:23.340 : INFO : ROBOTFRAMEWORK
Ending test: RobotFrameworkTest1.TestSuite11.TestCase001
從運作結果看,可以成功調用到我們遠端接口服務中自定義編寫的兩個關鍵字。
上面我們是通過RemoteServer的方式來調用java編寫的自定義的關鍵字,我們也可以改用jybot的方式來調用java編寫的自定義關鍵字,在工程中,我們引入maven-assembly-plugin這個插件,這個插件可以通過執行mvn clean assembly:assembly -Dmaven.test.skip=true 打包時,将所有相關的依賴包打包在一個jar包中,友善我們在執行時,不需要手動一個個去配置執行時需要依賴的其它相關jar包。
另外需要注意是,我們需要将我們上面定義的MyRemoteLibrary這個類移動到我們maven工程的根目錄下,如下圖所示。
執行mvn clean assembly:assembly -Dmaven.test.skip=true打包後,就可以生成我們需要的jar包了,如下圖所示。
将MyRemoteLibrary-1.0-jar-with-dependencies.jar 放置到java的classpath目錄下後,我們就可以在RIDE中引入MyRemoteLibrary庫了,如下圖所示。
引入後,我們再用jybot的方式執行上面RemoteServer運作時的同樣示例,如下圖所示。
運作結果如下:如下圖所示。
備注:本文内容摘選自作者自己出版的Robot Framework自動化測試架構核心指南 一書。
關于自動化測試的更多内容,請關注:
Robot Framework自動化測試架構核心指南京東官方購買
Robot Framework自動化測試架構核心指南電子版試讀
Robot Framework自動化測試架構核心指南天貓官方旗艦店購買
Robot Framework自動化測試架構核心指南當當網購買
Robot Framework自動化測試架構核心指南 作者簽名版本購買
相關博文彙總:
RobotFramework下的http接口自動化Create Http Context關鍵字的使用
RobotFramework下的http接口自動化Get關鍵字的使用
RobotFramework下的http接口自動化post關鍵字的使用
如何建立一個自動化測試項目
RobotFramework下的http接口自動化Get Response Body關鍵字的使用
RobotFramework下的http接口自動化Get Response Status 關鍵字的使用
RobotFramework下的http接口自動化Get Response header 關鍵字的使用
RobotFramework下的http接口自動化Set Request Header 關鍵字的使用
RobotFramework下HttpLibrary庫其它關鍵字
RobotFramework下的http接口自動化Set Request Body 關鍵字的使用
RobotFramework下的http接口自動化Follow Response關鍵字的使用
RobotFramework自動化測試架構的基礎關鍵字(一)
RobotFramework自動化測試架構的基礎關鍵字(二)
RobotFramework自動化測試架構的基礎關鍵字(三)
RobotFramework自動化測試架構的基礎關鍵字(四)
RobotFramework自動化測試架構的基礎關鍵字(五)
RobotFramework自動化測試架構-移動手機自動化測試AppiumLibrary介紹
RobotFramework自動化測試架構-移動手機自動化測試Open Application關鍵字的使用
RobotFramework自動化測試架構-常用斷言關鍵字
RobotFramework自動化測試架構-移動手機自動化測試AppiumLibrary庫其它的常見自動化關鍵字
RobotFramework自動化測試架構-移動手機自動化測試Input Text和Click Button關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Clear Text關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Click Element關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Click A Point關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Click Element At Coordinates關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Get Element Location關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Get Network Connection Status和Set Network Connection Status關鍵字的使用
RobotFramework自動化測試架構-移動手機自動化測試Element Attribute Should Match關鍵字的使用
RobotFramework自動化測試架構-DatabaseLibrary庫的使用(對資料庫的操作)
RobotFramework自動化測試架構-使用Python編寫自定義的RobotFramework Lib
RobotFramework自動化測試架構-Selenium Web自動化(-)-Open Browser和Close Browser
RobotFramework自動化測試架構-MongoDBLibrary庫的使用
作者的原創文章,轉載須注明出處。原創文章歸作者所有,歡迎轉載,但是保留版權。對于轉載了部落客的原創文章,不标注出處的,作者将依法追究版權,請尊重作者的成果。