之前基于DBT的page-model模式,在頁面數量和功能很大的情況下的伸縮性,擴展性都比較的差。
需要更多的mapping來減少工作量,想到了新的測試模式。
在MBT中提到了FSM對于web service測試的優越性
首先在MBT對于web service的測試中,總結了幾點主要的優點:
更準確的描述Web 服務之間的動態交互行為。
基于FSM的測試用例,有利于自動化的實現。
基于FSM的測試覆蓋率準則,有利于Web服務測試的充分性。
定義一個FSM,FSM為一個六元組(S,S0,δ,λ,I,O),其中:
S 為一個有限集合;
S0∈S是起始轉臺;
δ:S×I×O->S是狀態狀態函數;
λ: 是輸出函數;
I 為輸入字符集;
O 為輸出字符集;
狀態集 Q={q0,q1,q2,q3,a4……}
輸入集 I={userinfo, continue_operate, buy, finish}
輸出集 O={Verifi_ACC,Invalid_ACC,showinfo,showresults,showboughtlist}
字母表 R={userinfo/Verifi_ACC,userinfo/Invalid_ACC,continue_operate/showinfo,buy/showresults,finish/showboughtlist}
函數表
q0 = userinfo/Verifi_ACC × hasitem -> q1
q0 = userinfo/Verifi_ACC × noitem -> q2
q0 = userinfo/Invalid_ACC × true -> q3
q1 = continue_operate/showinfo × true -> q4
q2 = continue_operate/showinfo × true -> q5
……
這樣產生的狀態集即為相對應的測試用例。而函數即為相應的邏輯處理,這樣對于web service的自動化測試框架資本就成型了。
那MBT對于web ui自動化測試是否適用呢?之后Jason會詳細地介紹。
當自動化測試如火如荼的時候,測試2.0時代已經悄然來臨。
更多的時間是花在自動化測試腳本編寫上,還是其他?讓自動化更加自動化。之前jason已經介紹了相關的基于有限狀態機的測試(MBT)的測試,今天在工具的實踐上留下點memory.
model測試在國外不少公司已經應用起來了。 NModel,JunitModel,PyModel越來越多的語言實現了MBT的理論。
今天介紹下JunitModel,JunitModel的理論還是基于FSM的機制,對于已知的狀態和步驟進行自動化case的生成和執行。
這里我們可以使用HtmlUnit集成JunitModel來實現對于web工作流的測試。
為什么選擇HtmlUnit, UI操作的繁瑣和高異常性更多的選擇內存化自動化測試工具與JunitModel對接。
public enum State {welcome, register, displayTickets, terminal};
public boolean loginEricOkGuard() {return loginGrd(); }
@Action public void loginEricOk() { login(“ERIC”, “ETO”); }
public boolean loginGrd() {return state == State.welcome;}
public void login(String userName, String userPassword)
{
if (userName.equals(“”)) {
message = “EMPTY_USERNAME”; /*@REQ: CIN_031 @*/
}
else if (userPassword.equals(“”)) {
message = “EMPTY_PASSWORD”; /*@REQ: CIN_032 @*/
}
else if ( ! allUsers.containsKey(userName)) {
message = “UNKNOWN_USER_NAME_PASSWORD”; /*@REQ: CIN_033 @*/
}
else {
User user_found = allUsers.get(userName);
if (user_found.password.equals(userPassword)) {
currentUser = user_found;
message = “WELCOME”; /*@REQ: CIN_030 @*/
}
else {
message = “WRONG_PASSWORD”; /*@REQ: CIN_034 @*/
}
}
}
public Object getState()
{
}
public void reset(boolean testing)
{
}
已JunitModel為例以annotation @Action 為屬性間步驟的實現。reset為case進行reset的重寫方法。運行結果中多種覆蓋率的統計。
越來越多的公司注重自動化的效率和覆蓋率,也有越來越多的商業化工具基于MBT及窮舉的理論開始被接受,使自動化更加智能化是下一個測試時代的理論。
原文轉自:http://www.anti-gravitydesign.com