我们从一个最简单的登录例子开始。
最开始我们需要验证在用户名和密码都正确的情况下,能够正常登录系统,我们这样编写测试代码(以下都是伪代码,使用TestNG和Selenium):
Java代码:
@Test def should_login_success_with_exist_username_and_correct_password(){ LoginPage page = user.open(LoginPage,"/login.html") user.perform("login",['user1','1234'],on(page)) assert page.successLogin } |
恩,很不错,运行一下,出现红条。为什么呢?原来测试数据库里没有用户名为user1的用户,好吧,写个数据库数据初始化脚本。再运行,OK,绿条!
那么,接下来我们再增加一个测试,需要覆盖密码错误时不能登录系统的情况,很快测试就完成了:
Java代码:
@Test def should_login_success_with_exist_username_and_incorrect_password(){ LoginPage page = user.open(LoginPage,"/login.html") user.perform("login",['user1','4321'],on(page)) assert page.successLogin,false } |
再运行一下测试,绿条。好啦,现在可以看下这段代码,恩,有些重复,重构一下:
Java代码:
@Test def should_login_success_with_exist_username_and_correct_password(){ assert login('user1','1234') } @Test def should_login_success_with_exist_username_and_incorrect_password(){ assert login('user1','4321'),false } def login(username,password){ LoginPage page = user.open(LoginPage,"/login.html") user.perform("login",[username,password],on(page)) return page.successLogin } |
重构完成,可以看到,我们的测试方法里现在没有了任何行为,仅仅是数据!这样让我感觉有点怪,不管了,先用TestNG提供的@dataProvider整理一下:
Java代码:
@Test(dataProvider="testdata") def testLogin(username,password,expected){ LoginPage page = user.open(LoginPage,"/login.html") user.perform("login",[username,password],on(page)) assert page.successLogin,expected } @DataProvider(name="testdata") def Object[][] dataForLogin(){ def data=new Object[2][] data[0]=['user1','1234',true] as Object[] data[1]=['user1','4321',false] as Object[] } |