1、读取Excel文件
安装xlrd库,调用xlrd库去读取文件并返回数据
import xlrd
class ReadExcel:
@staticmethod
def get_data():
# 创建一个空的List
row_list = []
# 打开工作簿
book = xlrd.open_workbook("C:\\Users\\Think\\Desktop\\test_python_data.xlsx")
# 获取第一个sheet
'''
1、sheet.nrows: 工作表中有值总行数
2、sheet.ncols:工作表中有值总列数
3、sheet.row_values(rowx, start_colx=0, end_colx=None):
返回给定行中单元格值的一部分(开始行,开始列默认是0,结束列)
'''
sheet = book.sheet_by_index(0)
for i in range(1, sheet.nrows):
row_value = sheet.row_values(i, 0, sheet.ncols-1)
row_list.append(row_value)
return row_list
# if __name__ == '__main__':
# ReadExcel().get_data()
2、使用ddt库中的@data解析数据,如下简单示例:
import unittest
from ddt import ddt,data,unpack
from src.utils.ReadExcel import ReadExcel
@ddt
class Testddt2(unittest.TestCase):
def setUp(self):
pass
'''
*的作用类似于将原始数据的最外层括号拿掉,例如我们的原始数据是:
[['123456', 111], ['111', 'aaa'], ['123458', 'aaa'], ['123459', 'aaa']]
加上*之后变成:
['123456', 111], ['111', 'aaa'], ['123458', 'aaa'], ['123459', 'aaa']
然后可使用@unpack读取值,参数两位,运行结果:
15210 111
111 aaa
123458 aaa
123459 aaa
'''
#调用ReadExcel类中的get_data()方法获取数据
@data(*ReadExcel().get_data())
@unpack
def test_1(self, username, password, message):
print()
print(username, password, message)
'''
不加*,不拆包时运行结果:
[['123456', 111.0], ['111', 'aaa'], ['123458', 'aaa'], ['123459', 'aaa']]
'''
@data(ReadExcel().get_data())
def test_2(self, value):
print()
print("---test_2---")
print(value)
'''
不加*,使用@unpack时,运行结果:
['123456', 111.0] ['111', 'aaa'] ['123458', 'aaa'] ['123459', 'aaa']
'''
@data(ReadExcel().get_data())
@unpack
def test_3(self, value1, value2, value3, value4):
print()
print("---test_3---")
print(value1, value2, value3, value4)
3、实际项目中使用:
from src.pages.LoginPage import LoginPage
from selenium import webdriver
from time import sleep
import unittest
from src.utils.ReadExcel import ReadExcel
from ddt import ddt, data, unpack
'''
1、使用数据驱动模式,测试用户登录测试用例
2、测试模板Excel
'''
@ddt
class TestLoginCaseDataDrive(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.url = "http://mail.163.com/"
# 打开浏览器
LoginPage(self.driver).open_browser(self.url)
sleep(1)
'''
1、读取ReadExcel类中的get_data(),获取数据
2、将获取到的数据进行拆包,并根据数据个数传参数
3、test_login根据参数个数,运行多次(根据逻辑说明的)
'''
@data(*ReadExcel().get_data())
@unpack
def test_login(self, username, password, expect_message):
print(username,password,expect_message)
LoginPage(self).login_operation(username, password)
# 定位错误提示消息,设置断言
actual_message = self.driver.find_element_by_xpath("//div[@class='ferrorhead']")
print(actual_message.text)
self.assertEqual(actual_message.text, expect_message, msg="测试失败!")
print("测试成功!")
def tearDown(self):
self.driver.quit()
4、简单的Excel数据格式
5、生成测试报告
做测试所以将pattern改成了pattern='TestLoginCaseDataDrive.py',只测试当前文件,运行结果如下: