所谓的数据驱动就是将数据单独存放,在写方法将数据读取,然后将读取的数据放在testcase里面。
当然如果这种testcase都是一样的,只有需要的数据不一样,也可以将testcase写成一个方法,把上面获取的数据作为参数传进方法里面!
下面是一个关于登陆的自动化测试,由于登录的步骤完全一样,就是每次登录时用的账号密码不一样,所以可以用数据驱动啊!
def login(username, password): driver.find_element_by_id("idInput").send_keys(username) driver.find_element_by_id("pwdInput").send_keys(password) driver.find_element_by_id("loginBtn").click() if __name__ == '__main__': login("zhangsan","123") #... #... login("lisi","456")
当传zhangsan,程序就会用zhangsan登录,当传lisi,就会用lisi登录。
数据驱动的本质就是“测试数据”与“执行代码”做分离。至于,“测试数据”放哪儿都可以。
下面是csv文件的数据驱动
读取数据文件,并得到相应的数据,把这些数据用到具体的某个用例当中
from selenium import webdriver import unittest import csv csvData = csv.reader(open('C:\Users\chenjia\Desktop\test.csv','r')) Data = [] for i in csvData: #获取csv中每一行的数据(每一行的数据都是一个列表) print i #打印每一行的数据(也就是打印每一行列表) data= [] for j in i: #获取每一行的每一个单元格的值(也就是遍历每一行的单元格的值) data.append(j) #获取每一个单元表格的值,由于每次循环j只能显示一个值,所以data也只能显示一个值 Data.append(data) #所以再将data的每一个值都添加到Data里面 print Data print Data[0][0] #打印第一个小数列里面的第一个元素 print Data[3][2] #打印第4个小数列里面的第3个元素 print Data[-1][-1] #打印最后一个小数列里面的最后一个元素 class loginTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Chrome() self.driver.get("http://xxx.login.page") # 封装用户登录 def user_login(self, username, password): self.driver.find_element_by_id("idInput").send_keys(username) self.driver.find_element_by_id("pwdInput").send_keys(password) self.driver.find_element_by_id("loginBtn").click() def test_login1(self): '''用户名、密码为空登录''' username = Data[0][1] password = Data[0][2] self.user_login(username, password) def test_login2(self): '''用户名正确,密码为空''' username = Data[1][1] password = Data[1][2] self.user_login(username, password) def test_login3(self): '''用户名为空,密码正确''' username = Data[2][1] password = Data[2][2] self.user_login(username, password) def test_login4(self): '''用户名密码正确 ''' username = Data[3][1] password = Data[3][2] self.user_login(username, password) if __name__ == '__main__': unittest.main()
下面一段代码是在unittest里面用python读取excel 数据
#此代码为获取excel表中的每一个cell单元格的值,并将每一行的值作为一个小列表,整个excel表就是由多行值(多行小列表)构成的一个大列表 import xlrd data = xlrd.open_workbook('C:UserschenjiaDesktopunittest.xlsx') # 打开xls文件 table = data.sheets()[0] # 打开第一张表 nrows = table.nrows # 获取表的行数 ncols = table.ncols # 获取表的列数 Cell_List = [] for i in range(1, nrows): row_data = table.row_values(i) #获取每一行的值 print row_data cell_list = [] #建一个列表用于存放获取每一个cell表格的值 for l in range(ncols): cell_data = row_data[l] #获取每一个cell表格的值 print cell_data cell_list.append(cell_data) #获取每一个cell表格的值,由于每次循环cell_data只能显示一个值,所以cell_list只能显示一个值 Cell_List.append(cell_list) #所以再将cell_list的每一个值都添加到Cell_List里面 print "----------------------------------------------------------------------------------" print Cell_List