zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Docker 镜像
    为什么要用 Docker
    什么是 Docker
    python编码
    Python File(文件) 方法
    Python 日期和时间
    Python 字符串字典内置函数&方法
    Python 元组内置函数
    Epos消费管理系统使用发布订阅实现数据库SQL SERVER 2005同步复制
    Epos消费管理系统复制迁移SQL SERVER 2005数据库
  • 原文地址:https://www.cnblogs.com/111testing/p/6491928.html
Copyright © 2011-2022 走看看