在前面详细的介绍了ddt模块的安装以及在自动化项目中的使用,我们再已验证V客网登录界面为实例,来说明ddt模块在自动化中的实战,验证点分别为如下几点:
验证点一:输入无效的用户名和密码,验证返回的错误信息
验证点二:输入有效的用户名和无效的密码,验证返回的错误信息
验证点三:输入无效的邮箱和无效的密码,验证返回的错误信息
我们把读取数据的方法,登录以及获取错误信息,编写的 location.py的模块中,见location.py的源码:
#!/usr/bin/env python
#coding:utf-8
import csv,xlrd
from selenium import webdriver
import time as t
def getCsv(file_name):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows
defgetExcel(rowValue,colValue,file_name='d:\\test.xlsx'):
"""
:paramrowValue:表格的行
:paramcolValue: 表格的列
:paramfile_name: excel文件
:return:
"""
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
returnsheet.cell_value(rowValue,colValue)
#V客网登录
def clickLogin(driver,username,password):
driver.find_element_by_id('l-1').send_keys(username)
t.sleep(2)
driver.find_element_by_id('l-2').send_keys(password)
t.sleep(2)
driver.find_element_by_id('l-4').click()
#获取返回的错误信息
def getText(driver):
returndriver.find_element_by_xpath(".//*[@id='login-tips']").text
见验证weke登录界面的测试代码:
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
import time as t
from ddt import ddt,data,unpack
import unittest,sys,location
reload(sys)
sys.setdefaultencoding('utf-8')
@ddt
class WekeTest(unittest.TestCase):
defsetUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://my.weke.com/loginVerify.html')
@data(('admin','admin',u'账号必须是邮箱或者手机号'),('13484545195','admin',u'用户名或密码错误'),('4856758@qqq.comdf','admin',u'用户名或密码错误'))
@unpack
deftestCase_01(self,username,password,expect):
"""
验证点一:输入无效的用户名和密码,验证返回的错误信息
验证点二:输入有效的用户名和无效的密码,验证返回的错误信息
验证点三:输入无效的邮箱和无效的密码,验证返回的错误信息
:return:
"""
location.clickLogin(self.driver,username,password)
self.assertEqual(location.getText(self.driver),expect)
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
suite=unittest.TestLoader().loadTestsFromTestCase(WekeTest)
unittest.TextTestRunner(verbosity=2).run(suite)
ok,我现在结合ddt模块,把上面自动化使用到的数据,存储在excel 中,见excel的数据截图:
这样修改后的location.py源码为:
#!/usr/bin/env python
#coding:utf-8
import csv,xlrd
from selenium import webdriver
import time as t
def getCsv(file_name):
rows=[]
withopen(file_name,'rb') as f:
readers=csv.reader(f,delimiter=',',quotechar='|')
next(readers,None)
forrow in readers:
rows.append(row)
returnrows
defgetExcel(rowValue,colValue,file_name='d:\\test.xlsx'):
"""
:paramrowValue:表格的行
:paramcolValue: 表格的列
:paramfile_name: excel文件
:return:
"""
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
returnsheet.cell_value(rowValue,colValue)
defgetDdtExcel(file_name='d:\\test.xlsx'):
rows=[]
book=xlrd.open_workbook(file_name)
sheet=book.sheet_by_index(0)
forrow in range(1,sheet.nrows):
rows.append(list(sheet.row_values(row,0,sheet.ncols)))
returnrows
#V客网登录
def clickLogin(driver,username,password):
t.sleep(2)
driver.find_element_by_id('l-1').send_keys(username)
t.sleep(2)
driver.find_element_by_id('l-2').send_keys(password)
t.sleep(2)
driver.find_element_by_id('l-4').click()
#获取返回的错误信息
def getText(driver):
returndriver.find_element_by_xpath(".//*[@id='login-tips']").text
修改后的测试代码见wekeTest.py模块的源码:
#!/usr/bin/python
#coding:utf-8
from selenium import webdriver
import time as t
from ddt import ddt,data,unpack
import unittest,sys,location
reload(sys)
sys.setdefaultencoding('utf-8')
@ddt
class WekeTest(unittest.TestCase):
defsetUp(self):
self.driver=webdriver.Firefox()
self.driver.maximize_window()
self.driver.implicitly_wait(30)
self.driver.get('http://my.weke.com/loginVerify.html')
@data(*location.getDdtExcel())
@unpack
deftestCase_01(self,username,password,expect):
"""
验证点一:输入无效的用户名和密码,验证返回的错误信息
验证点二:输入有效的用户名和无效的密码,验证返回的错误信息
验证点三:输入无效的邮箱和无效的密码,验证返回的错误信息
:return:
"""
location.clickLogin(self.driver,username,password)
self.assertEqual(location.getText(self.driver),expect)
deftearDown(self):
self.driver.quit()
if __name__=='__main__':
suite=unittest.TestLoader().loadTestsFromTestCase(WekeTest)
unittest.TextTestRunner(verbosity=2).run(suite)
见执行代码后的截图:
OK,我们比较二次实现的方式,可以发现,在第二次的代码中,我们只需要调用调用getDdtExcel() 的函数,该函数实现了从excel读取存储的数据。