之前基于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及穷举的理论开始被接受,使自动化更加智能化是下一个测试时代的理论。