unittest数据驱动

所谓的数据驱动就是将数据单独存放,在写方法将数据读取,然后将读取的数据放在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
原文地址:https://www.cnblogs.com/111testing/p/6491928.html