Gate教程
圖形化的邏輯表述,可視化建模比代碼邏輯表述更加容易理解,不少有優秀的軟件實踐已經充分證實了這一點。 Gate 是可視化建模在測試領域的一次實踐,咱們指望經過結合實際經驗總結的出的自動化測試分層方式和友好的邏輯表達方式,達到度下降自動化測試用例開發難度,提搞自動化測試效率和可維護性的目標。html
主要功能
- 可視化測試邏輯流建模
- 封裝可複用測試流程
- 近似JMeter的用戶自定義變量及內置函數
- 近似TestNG的測試用例組織能力。
- 用例級別的多線程執行能力以及所須要的用例執行依賴
- CSV數據格式的數據驅動
- 可拖拽的Selenium和HTTP/HTTPS組件
- CMD執行完成後自動釋放資源更好的支持CI/CD。
使用Gate
Gate是全圖形化的功能測試環境,包含功能測試須要的所有必要功能。目前Gate的主要用於支持UI自動化測試。Gate把Selenium API從新劃分紅不一樣的組件,提供對應的支持組件達到DnD方式畫圖建模能力。 java
啓動Gate
Gate是開箱即用軟件,從XXX處獲取安裝包到本機,解壓運行${GATE_HOME}/bin/gate.bat後便可啓動。 Gate支持圖形和命令行兩種執行模式。圖形模式主要用於開發,命令行模式主要用於測試執行以及對CI/CD的支持。 參數說明:apache
名稱 | 說明 |
---|---|
-h | 打印幫助信息 |
-n | 命令行模式執行 |
-G | 向Gate傳遞Gate變量值。例如 -GvarName=value -GsomePort=8081 |
-t | 指定Gate文件 *.gmx 的位置 |
-S | 經過前綴過濾Test suites,使用逗號分隔,僅在命令行模式生效 |
-C | Filter test case by name prefix. Separate with comma. Command line only |
新建測試用例
添加Test Case
Test Case是一種存放模型容器,容器種的模型即爲用例的測試用例執行邏輯。右鍵點擊Test樹根節點,鼠標移動到Add選項,在子選項中選擇TestSuite點擊。 右鍵點擊上一步建立的TestSuite,鼠標移動到Add選項,在子選項中選擇TestCase點擊。 create a test suite then add test case to it. Change the name of elements by edit the name panel then press enter. Double click on the test case to open the model editor. 多線程
TODO add screen shot 點擊上一步建立的TestCase,修改下方屬性面板中的name,修改後敲擊回車。可使用相同的方法修改TestSuite和Fixture的名稱併發
添加執行單元和選擇條件
雙擊上一步建立的TestCase打開模型編輯器。鼠標移動至右側模型編輯器,在模型編輯器上鼠標點擊右鍵,按照add->controller->start順序選擇子菜單,點擊start添加start執行單元至TestCase。Start單元是模型的起始頂點,Gate中定義的模型所有從Start單元開始執行。 模型編輯器上點擊右鍵打開菜單,按照add->controller->debug順序選擇子菜單,點擊debug添加debug執行單元至TestCase 模型編輯器上點擊右鍵打開菜單,按照add->link->success順序選擇子菜單,點擊success添加選擇條件Success至TestCase 框架
鏈接執行單元和選擇條件
在上一步打開的模型編輯器中,鼠標左鍵選中success條件帶箭頭的一側,拖動箭頭至debug執行單元,debug執行單元出現綠色邊框時,釋放鼠標左鍵。 鼠標左鍵選中success條件不帶箭頭的一側,拖動箭頭至start執行單元,start執行單元出現綠色邊框時,釋放鼠標左鍵。 這個模型表達了首先執行start,start執行成功後執行debug。 dom
快捷鍵:編輯器
Test和Action樹沒有快捷鍵可是模型編輯器實現常見的鍵盤編輯快捷鍵 「ctrl +a」, 「ctrl +c」, 「ctrl +v」, 「ctrl+x」 for edit and 「ctr+x」, 「ctrl + y」
拖拽 模型編輯器和Test樹實現了拖拽以支持用例執行依賴。Action樹當前不支持拖拽ide
執行和中止測試
執行測試
鼠標點擊以前建立的測試用例。點擊工具欄上的綠色箭頭執行測試。點擊模型編輯器下方的面板的「result」頁籤查看測試結果。 點擊「result」頁簽上結果樹上的節點,查看執行單元執行相關的信息 快捷鍵: 「ctrl + r」函數
中止測試
點擊工具欄的紅色方框中止測試。紅色方框在測試執行時會被激活,咱們給以前建立的測試用例添加一個「sleep」使紅色方框處於激活狀態。
- 雙擊點擊以前建立的測試用例打開模型編輯器。
- 模型編輯器上點擊鼠標右鍵打開菜單,按照add->timer->constant timer順序選擇子菜單,點擊constant timer添加定時器至模型。點擊constant timer,在下方屬性面板中修改等待時間。
- 模型編輯器上點擊鼠標右鍵打開菜單,添加選擇條件Success。拖動success有箭頭一側連接至constant timer,拖動success另外一側連接至debug。點擊綠色箭頭執行測試用例,測試用例執行時,紅色方形圖標被激活。點擊紅色放行圖標中止測試用例執行。 快捷鍵: "ctrl + comma"
執行多個測試用例
在以前建立的Test Suite中多添加多個測試用例。鼠標右鍵點擊以前建立的測試用例,在菜單中選擇「copy」複製這個用例,鼠標右鍵點擊Test Suite,在菜單中選擇「paste」添加以前複製的用例至Test Suite。 按下鍵盤ctrl同時點擊測試用例選擇多個測試用。點擊紅色箭頭執行,這些選中的測試用例將會被執行。點擊Test Suite,點擊紅色箭頭,Test Suite中所有用例會被執行。按下鍵盤「ctrl」鍵時,能夠選擇多個Test Suite。點擊Test Suites,點擊紅色箭頭,執行全部的測試用例。
啓用禁用Test Suite/Case
Test Suite、Case能夠被啓用/禁用,新建Test Suite、用例時默認狀態是啓用,選擇鼠標右鍵菜單的「disable」禁用這個單元。單元被禁用後能夠經過鼠標右鍵菜單「enable」從新啓用這個單元。 Test Suite,Case被禁用後這個單元在測試啓動時會被忽略,當存在其餘測試單元依賴這個測試單元,系統會提示並中止啓動。
測試用例依賴
選中多個用例執行測試時,每一個用例會分派給不一樣的線程併發執行,測試用例依賴功能能夠確保多線程併發執行時某個用例能夠在某個或某幾個用例以後執行。
測試用例只能依賴相同Test Suite內且處於上方的測試用例,測試用例能夠依賴多個用例。 設置${GATE_HOME}/bin/gate.properties文件中的「gate.engine.test.runner.number」能夠調整最大併發數限制。當最大併發數的值設置爲1系統爲單線程執行,這時會按照Test樹上用例組織順序執行。
使用數據驅動
添加「csv data provider」至測試用例後,測試用例會根據csv data provider配置的csv文件迭代執行測試用例,每一個迭代讀csv中的一行,csv文件沒有下一行數據時中止迭代這個測試用例並執行下一個測試用例。
- 在一個包含「Debug」執行單元的測試用例上點擊鼠標右鍵打開菜單,按照add->data provider->csv data provider順序選擇子菜單,點擊csv data provider添加csv data provider到測試用例。
- 點擊上一步添加的csv data provider,在下方屬性面板中的「name」選項輸入新的名稱後回車更更名稱。
- 在「file name」選項中輸入csv文件的絕對路徑。例如,文件名稱爲example.csv,文件內容以下。
11,12,13 21,22,23
- 在「variables name」屬性欄填寫變量名,若是有多個能夠用「,」分割(ASCII符號),分隔符能夠被修改。上一步建立的csv文件中,每一列對應一個變量,例如「v1,v2,v3」,爲三個變量名。
- 點擊測試用例,而後點擊綠色箭頭運行這個測試用例。運行完成後在結果樹上點擊Debug單元檢查結果,能夠看到變量「v1,v2,v3」每一個迭代的值。
Configuration | Result |
---|---|
使用Fixture
Fixture類型單元是一種存放模型的容器,容器中的模型會根據Fixture類型在測試用例以前、以後執行,與大多數測試框架同樣,Gate包含兩種類型的Fixture及setup、teardown。Setup在所用測試用例以前執行,teardown在全部測試用例以後執行。當存在多個setup、teardown時,相同類型的Fixture會按照測試樹上的前後順序依次執行。Test Fixture能夠被添加至test suites或者test suite節點。
- 在Test suites、suite單元上點擊鼠標右鍵,按照add->fixture->setup、teardown選擇fixutre點擊,添加setup、teardown。
- 雙擊fixutre打開模型編輯器,添加 「start」和「debug」和「next」條件,鏈接start和debug。
- 點擊test suites、suite,點擊工具欄上的綠色箭頭執行測試,能夠看到setup在全部test case以前運行,teardown在全部測試用例以後執行。
使用Action
Action類型元素是一種存放測試模型的容器,能夠被Fixture、TestCase容器中的模型引用。使用Action能夠實現重用測試邏輯,例如,咱們能夠把登陸,某個表單添加若干條數據等操做。Action能夠在TestCase、Fixture或其餘Action模型中被引用。 Action被引用後在執行時會使用和引用它的模型相同的上下文。
- 點擊左上角樹菜單上方的「Lib」標籤頁,右鍵點擊Lib樹的根節點,按照add->action選擇子菜單,點擊action添加action單元。
- 雙擊上一步建立的action打開模型編輯器,添加「start」和「debug」執行單元並添加一個「next」條件鏈接它們。
- 點擊左上角樹菜單上方的「Test」標籤頁,雙擊要引用action的test case打開模型編輯器。
- 保持上一步打開的模型編輯器,點擊「Lib」頁籤切換到Action樹面板,右鍵點擊上面建立的Action,在菜單中選擇「add to editor"添加Action至當前打開的模型編輯器。
- 在模型編輯器添加「success」條件,並使用「success」鏈接「Debug」和「Action」
- 執行測試並查看結果,Action會做爲一個可展開的子節點出如今結果樹上。
函數和變量
函數和變量功能的使用方式徹底等同於JMeter,能夠翻閱JMeter文檔了更懂多關於函數和變量使用的細節 https://jmeter.apache.org/usermanual/functions.html。
變量
變相能夠在全部類型的模型中使用,也能夠在測試樹上的單元(test suites、suite、case和Fixutre)中使用。 變量能夠經過「User define variables」,「Data Provider"或在JSR223Sampler中嵌入「vars.put("name","value")」定義。能夠在任何字符串中使用${變量名}引用變量的值或在JSR223Sampler中嵌入「vars.get("name")」獲取。 同名的變量會被按照聲明的位置根據suites -> suite -> case -> model的順序重載。
- 在測試單元上添加用戶定義變量「user defined variable」。 右鍵點擊test suite、case節點,按照add -> config -> 「user defined variable」順序選擇子菜單,點擊「user defined variable」。
點擊上一步添加的「user defined variable」,在下方屬性面板上的argument區域點擊「add」添加一個變量,輸入變量名稱和值,輸入後敲擊回車鍵。 運行測試用例,在結果樹上點擊debug查看運行時變量。
- 在模型中添加變量,雙擊模型容器單元(Test case、fixture或action)打開模型編輯器,在模型編輯器區域點擊右鍵打開菜單,按照add-> config -> 「user defined variables」順序選取子菜單,點擊「user defined variables」添加用戶自定義單元至模型。 點擊上一步添加的「user defined variable」,在下方屬性面板上的argument區域點擊「add」添加一個變量,輸入變量名稱和值,輸入後敲擊回車鍵。 運行測試用例,在結果樹上點擊debug查看運行時變量。
函數
函數能夠在全部類型的模型中或用戶定義的變量中被使用,函數能夠經過這種方式調用「${__functionName(var1,var2,var3)}」。函數的使用方式和JMeter徹底相同,幾乎全部的函名稱、參數、功能也和JMeter徹底相同,使用變量名時請注意空格符也會做爲變量名 下面選取__javaScript函數舉例說明怎麼使用函數:
- 雙擊測試用例打開模型編輯器,點擊「user defined variable」執行單元,添加一個用戶自定義變量
n1=1
- 模型編輯器上點擊鼠標右鍵打開菜單,順序選擇click -> add -> controller -> Decide添加一個「Decide」執行單元。在Decide的condtion欄中輸入
${__javaScript(var a=${n1};a >1? true : false;)}
- 添加一個「Debug」執行單元,添加一個「success」條件,鏈接Decide和Debug,有箭頭一側鏈接在Debug上。添加一個「Assert」,設置變量名爲「n1」,設置「Pattern to Test」爲0。
- 運行測試用例並查看結果。 這個用例的在達到
${n1} <=1 && ${n1}!=0
條件時會失敗。
下列函數徹底和JMeter提供的同名函數相同,請參考文檔 https://jmeter.apache.org/usermanual/functions.html
__time;__Random;__log;__logn;__UUID;__groovy;__javaScript;__property;__setProperty;__split;__eval;__evalVar;__V;__char;__escapeHtml;__unescape;__unescapeHtml;__urlencode;__urldecode;__dateTimeConvert __digest;__isVarDefined;__isPropDefined;__changeCase;__FileToString;__StringToFile;__XPath
下列函數徹底和JMeter Plugin提供的同名函數相同,請參考文檔 https://jmeter-plugins.org/wiki/Functions
__base64Encode;__base64Decode;__env;__if;__strLen;__substring;__strReplace
下面幾個函數是Gate新增的
name | parameters | usage |
---|---|---|
__JSONPath | JSON文件名, JSONPath string | 使用方法同 __XPATH |
__TestSuitesName | 無 | 返回調用函數模型所在的Test Suite名稱 |
__ThreadName | 無 | 返回調用函數模型所在的執行線程名稱。 格式爲 <Suite name>_<model name> |
分析和註釋
分析功能目前選項爲「connect」,檢查是否模型中全部的執行單元和執行條件都是鏈接的。
點擊菜單欄上的Option,順序點擊Option -> Analyze -> 「Is Connected」, 若有存在沒有鏈接條件的執行單元或者沒有鏈接執行單元的條件,會提示失敗。 經過提供「note」類型的條件和「Commnet」類型的單元支持註釋功能。note條件沒有指向(及箭頭),note鏈接的執行單元不會被執行。「comment」類型的單元不會被執行,點擊comment能夠下方屬性欄中書寫註釋。
聯通性檢查和註釋
分析功能目前選項爲「connect」,檢查是否模型中全部的執行單元和執行條件都是鏈接的。
點擊菜單欄上的Option,順序點擊Option -> Analyze -> 「Is Connected」, 若有存在沒有鏈接條件的執行單元或者沒有鏈接執行單元的條件,會提示失敗。 經過提供「note」類型的條件和「Commnet」類型的單元支持註釋功能。note條件沒有指向(及箭頭),note鏈接的執行單元不會被執行。「comment」類型的單元不會被執行,點擊comment能夠下方屬性欄中書寫註釋。
目錄結構和配置文件
Gate跟目錄包含兩個子目錄bin和lib, bin目錄爲Gate的執行包含執行文件和配置文件,lib目錄包含運行須要的jar包。 bin目錄中包含兩個配置文件,gate.properties and system.properties,這兩個配置文件都會在Gate啓動時加載。 system.properties 文件中的配置項做用域爲java虛擬機,實際功能操做相似於「java -Dname=value ...」或者程序中執行「System.setProperty(name, value)」。 gate.properties 加載Gate配置項,配置項明細和說明見文件註釋