数据驱动测试

发表于:2010-3-24 14:26

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:ronghao(Javaeye)    来源:51Testing软件测试网采编

  我们从一个最简单的登录例子开始。

  最开始我们需要验证在用户名和密码都正确的情况下,能够正常登录系统,我们这样编写测试代码(以下都是伪代码,使用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[] 
 }

21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号