最近分析了一下IBM框架(也叫ITCL框架)。
http://www.ibm.com/developerworks/rational/library/06/0822_goel/
这个框架采用了三层架构:对象层、任务层和测试用例层。
对象层:存储AUT的GUI元素信息,并且由框架自动创建Getter方法用于返回对象。例如,登录窗口的用户名输入框、密码输入框、确认登录按钮等对象的获取都可放在名为Login的测试脚本中,Login放在名为AppObject的包里。
public WButton getButton_signInsubmit() {
TestObject to = button_signInsubmit(ANY, NO_STATE);
return new WButton(to);
}
public WTextField getText_login() {
TestObject to = text_login(ANY, NO_STATE);
return new WTextField(to);
}
public WTextField getText_passwd() {
TestObject to = text_passwd(ANY, NO_STATE);
return new WTextField(to);
}
任务层:在这一层中编写可重用的方法用于执行针对AUT的通用功能。例如,在LoginTask中编写AssignLoginInfo方法用于登录时的用户名和密码输入的脚本。这些脚本都统一放在名为Tasks的包里。
//DECLARE THE OBJECT OF THE SCRIPTS EXIST IN APPOBJECT
public AppObject.Login lgn = new AppObject.Login();
public void AssignLoginInfo()
{
lgn.getText_login().setText("abc");
lgn.getText_passwd().setText("New1");
}
用例层:编写测试用例的脚本的地方,一般用于实现业务流程的测试。例如,在YahooLogin脚本中实现登录的全过程。这些脚本都统一放在名为TestCase的包里。
//DECLARE THE OBJECT OF THE SCRIPTS EXIST IN TASKS
//OBJECT CREATION OF TASKS LOGINTASK SCRIPT
public Tasks.LoginTask lt = new Tasks.LoginTask();
public void testMain(Object[] args)
{
//INVOKING THE BROWSER
startBrowser("mail.yahoo.com");
//ASSIGNED THE USER NAME AND LOGIN INFO
lt.AssignLoginInfo();
//CLICKED ON LOGIN/SUBMIT BUTTON
lt.lgn.getButton_signInsubmit().click();
//FURTHER ACTION CAN BE WRITTEN ACCORDIUNLGY
//...
}
这样的框架的好处是:
1、分层的架构
2、把“what”从“how”中抽离出来
3、代码重用
4、一致和清晰的结构
5、有效的文件组织
6、…
关于分层的思想,这篇文章也值得一看:
http://www.ibm.com/developerworks/cn/rational/r-cn-rftwindows1/