GraphWalker是一個開源的基於模型的自動化測試工具,它能夠用來經過圖形測試模型來自動生成測試用例。
本文主要描述了使用yed畫出FSM, EFSM模型圖(常見的流程圖),而後使用GraphWalker命令生成手工自動化用例,最終經過python將手工用例讀取後自動執行並生成執行報告。
GraphWalker就是一個基於測試模型的用例生成工具。它主要應用於FSM, EFSM模型。能夠用來它能夠直接讀取FSM, EFSM圖形模型、json模型、生成測試用例。那什麼是MBT呢? MBT中文名稱爲基於模型的測試, 基於模型的測試屬於軟件測試領域的一種測試方法。MBT步驟以下:首先由被測系統(SUT, system under test )的一些(一般是功能)方面描述,構建出被測系統的模型。再根據模型或模型中的一部分部分生成測試用例。進而進行軟件測試。常見的MBT中模型一般有下列幾種:java
一、畫圖工具YEDpython
工具下載官網地址:https://www.yworks.com/products/yed,用該工具畫出來的圖大體以下:git
二、 GraphWalker的jar包下載:github
https://graphwalker.github.io/ web
一、頂點:如上圖所示,全部的頂點好比Start,V_ClientNotRuning.一個頂點稱爲節點,一般表示爲一個框表示咱們想要檢查的預期狀態。在任何實現代碼/測試中,能夠經過斷言或者數據校驗改結果。常見有如下幾種頂點:算法
Start頂點:start頂點不是必需的。若是使用,則必須有1個(且只有1個)頂點名稱爲:start.從start頂點出發只能有1個邊。start頂點不會包括在任何生成的測試路徑中,它只表示一個開始位。json
SHARED頂點: 意味着GraphWalker能夠跳出當前模型,到任何其餘模型到具備相同SHARED名稱的頂點。 語法是: SHARED:SOME_NAME瀏覽器
二、邊:如上圖的e_Init。表示從一個頂點到另外一個頂點的方法。這是爲了達到下一個狀態須要作的任何動做。它能夠選擇一些菜單選項,單擊按鈕等測試動做。GraphWalker只接受單向有向邊(箭頭)。邊架構
的函數下有時候會有不一樣的字符串,好比[rememberMe&vaildLogin]和/rememberMe=false; vaildLogin=true; 表示不一樣的規則,基於表有以下規則:框架
守衛(Guards):他們的角色與if語句相同,而且使邊有資格或者沒有資格被訪問。
守衛guard是一個用方括號括起來的JavaScript條件表達式只有一個。[rememberMe&vaildLogin]
/rememberMe=false; vaildLogin=true ;action是動做代碼,它的執行結果將做爲數據傳遞給守衛。
三、路徑生成器:生成器是決定如何遍歷模型的算法。不一樣的生成器將生成不一樣的測試序列,而且它們將以不一樣的方式遍歷模型。多個發生器能夠串聯。常見有如下幾種:
四、結束條件:常見有如下幾種:
五、GraphWalker提供3種工做方式:
六、學習參考文檔:
以2.1的圖爲例,是官網的的demo圖。下載地址:http://graphwalker.github.io/Model_design/,找到圖片後雙擊便可下載:Login.graphml
一、可執行程序,以offline模式生成自動化用例,路徑生成器使用經常使用的quick_random,結束條件使用vertex_coverage100%覆蓋,在jar包目錄下執行命令java -jar graphwalker-cli-3.4.2.jar offline -m Login.graphml "quick_random(vertex_coverage(100))" ,以下會生成對應的自動化用例。
也能夠把這些用例保存在txt文件中:java -jar graphwalker-cli-3.4.2.jar offline -m Login.graphml "quick_random(vertex_coverage(100))" > login_test_case.txt
二、可執行程序,以online模式生成自動化用例,使用相同的結束條件和路徑生成器,
第一步執行命令:java -jar graphwalker-cli-3.4.2.jar -d all online -s RESTFUL -m Login.graphml "quick_random(vertex_coverage(100))" ,結果以下:
第二步:簡單的在web瀏覽器訪問:http://localhost:8887/graphwalker/getNext
再訪問一次:
目前測試工做中,經常使用的就是狀態機測試和模塊間的數據流測試。這個工具就很是適合這兩類圖的測試。在生成手工用例後,怎麼轉變成自動化測試用例是考慮的主要問題。下面以實際工做中的一個狀態機爲例
第一步 : 把工做中的狀態機圖,使用yed轉換成graph圖。
狀態機以下:
yed 畫圖以後:
第二步:執行graphwalker命令生成測試用例,報錯 java -jar graphwalker-cli-3.4.2.jar offline -m rtp_status.graphml "quick_random(edge_coverage(100))" > bpn_status_test_case.txt。
執行報錯:報錯緣由:由於狀態機內存在終點,致使算法執行不下去報錯失敗。那這就不適應有終點的狀態機了?
忽然想起一句名言: 我是環繞着一個圓圈而行的。越接近終點也就越接近起點——-(狄斯)。人醜多讀書仍是有點用處的,靈機一動,那就乾脆把全部終點再指定起點,起點又算是一筆新的數據,講圖改造後以下:
雖然變醜了,可是再執行不會報錯。目的達到了(每次執行的產生的用例是不徹底一致的)。用例以下圖:
第三步:思考怎麼轉變成自動化用例。
思考問題:
從終點到頂點V_MakeData的邊都沒有標籤,那python讀取文件時,能夠根據兩個{}以前肯定是一條用例。
邊意味着執行某個程序,頂點意味着檢查表的數據狀態。那在畫圖時,肯定好邊和頂點的描述,作好string和代碼對象的映射,讀取到邊,就啓動程序,讀取到頂點,就執行某個表的校驗函數便可。
第四步:代碼實現:
一、主要業務流程:
二、生成python自動化用例使用的方法,考慮到其實執行的步驟是明確的,惟一會變化的就是執行命令每次產生的用例不一致。那每次替換用例case就能夠了。作成了文件替換動態生成自動化用例的模式。
三、自動化用例剩下以下:
四、說明:
在編寫自動化生成用例前,已存在構建好的python自動化pyuint測試框架,我這邊結合起來使用就很方便。這個技術結合pyunit框架作效果更好。
這個工具的學習來源於其餘部門測試同事的分享,他們把這個工具應用於web平臺的相似登錄系統的測試,以爲確實好用。雖然這個工具和理念很早就已經有了,貌似2016年左右就已經很流行了,但不影響去深刻的學習和研究。學習和研究工具的目的,最終都是把它應用到實際項目之中。相似這種狀態機測試,若是這時在一個地方增長了一個狀態。那我只須要改下圖,再補充好對應頂點和邊的部分代碼,就能夠獲取全流程的狀態機測試用例。
這個工具仍是很強大的,特別是在數據流的各類處理上,有時間仍是建議去看下官網,畢竟介紹更詳細。