一、环境准备
1、安装xlrd

2、安装ddt
二、数据驱动原理
1、测试数据为多个字典的list类型
2、测试类前面加@ddt.ddt修饰
3、case前加@ddt.data()修饰
4、用例会单独运行多次(取决于测试数据的个数)
三、举例说明(此例子基于上文python+selenium Page Object 设计模式+Unittest单元测试框架)https://blog.csdn.net/weixin_42228683/article/details/102231182
1、方法一
test_case.py
# Author:Xueyun
# -*- coding:utf-8 -*-
import unittest
import ddt
from po.login_page import LoginPage
from selenium import webdriver
'''测试数据'''
test_data = [{"username": "zhangsan", "password": "zhangsan"},
{"username": "lisi", "password": "lisi"},
{"username": "wangwu", "password": "wangwu"},
]
@ddt.ddt
class Case01(unittest.TestCase):
''''登录乐学'''
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.url = "http://www.5itest.cn/login"
# self.username = "18328379237"
# self.password = "123456"
#用例执行体
@ddt.data(*test_data)
def test_login_lexue(self, data):
#声明登录页面类对象
login_page = LoginPage(self.driver,self.url,u"乐学")
#调用打开页面组件
login_page.open()
#调用用户名输入组件
login_page.input_username(data["username"])
#调用输入密码组件
login_page.input_password(data["password"])
#调用点击登录按钮组件
login_page.click_submit()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
2、方法二
①首先要知道,如何读取excel表格的数据
read_excel.py
import xlrd
class ReadExcel:
def __init__(self, excel_path, sheet_name):
#打开excel表格
self.data = xlrd.open_workbook(excel_path)
#通过列表名字获取
self.table = self.data.sheet_by_name(sheet_name)
#获取第一行key值
self.keys = self.table.row_values(0)
#获取总行数
self.rownum = self.table.nrows
#获取总列数
self.colnum = self.table.ncols
def dict_data(self):
#判断总行数不小于1
if self.rownum <= 1:
print("总行数小于1")
else:
#定义一个空列表来存放表格中的数据
r = []
#初始化j,从第二行开始取数据
j = 1
#利用循环读取表格中的数据
for i in range(self.rownum - 1):
s = {}
#从第二行取对应的values值
values = self.table.row_values(j)
for x in range(self.colnum):
s[self.keys[x]] = values[x]
r.append(s)
j += 1
return r
if __name__ == '__main__':
filepath = "test.xls"
sheetname = "Sheet1"
data = ReadExcel(filepath, sheetname)
print(data.dict_data())
②将读取excel数据与测试用例结合
test_case02.py
# Author:Xueyun
# -*- coding:utf-8 -*-
import unittest
import ddt
from exceldata import read_excel
from po.login_page import LoginPage
from selenium import webdriver
'''测试数据'''
filepath = "E:\\Pycharm_projects\\1\\exceldata\\test.xls"
sheetname = "Sheet1"
exce_data = read_excel.ReadExcel(filepath, sheetname)
test_data = exce_data.dict_data()
@ddt.ddt
class Case01(unittest.TestCase):
''''登录乐学'''
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(30)
self.url = "http://www.5itest.cn/login"
# self.username = "18328379237"
# self.password = "123456"
#用例执行体
@ddt.data(*test_data)
def test_login_lexue(self, data):
#声明登录页面类对象
login_page = LoginPage(self.driver,self.url,u"乐学")
#调用打开页面组件
login_page.open()
#调用用户名输入组件
login_page.input_username(data["username"])
#调用输入密码组件
login_page.input_password(data["password"])
#调用点击登录按钮组件
login_page.click_submit()
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
注意:将表格中的数据设置成文本
③执行结果