单元测试框架(数据驱动csv,excel)
一、CSV(表格另存为时,将文件类型保存为CSV)
在Python中读取csv⽂件⾥⾯的使⽤直接使⽤标准库csv就可以的,在csv的库⾥⾯,读取⽂件的⽅式主要分为两种的⽅式,字典或者是列表的⽅式来读取数据。
1、以列表的方式来读取
(1)将文件添加到当前工程的data目录下
(2)创建Utils工具 csvUtils.py代码如下
import csv from utils.pathUtils import filePath def readCsvList(): # 列表的方式读取csv文件 lists=[] with open(filePath(fileName='data.csv'),encoding='utf-8') as f: reader=csv.reader(f) # 不读取第一行 next(reader) for item in reader: lists.append(item) return lists print(readCsvList()) [['', '', '请输入邮箱名'], ['asddsDf', 'Asdf', '您输入的邮箱名格式不正确'], ['sddtfy@sina.com', 'sdsfghjgf', '登录名或密码错误']]
(3)编写代码 导入读取的文件内容 文件内容是列表类型 根据索引获取信息
from page.sina import Sina from page.init import InitSina from utils.csvUtills import readCsvList from utils.yamlUtils import getUrl import unittest class sinaTest(InitSina,Sina): def test_sina_001(self): self.login(username=readCsvList()[0][0],password=readCsvList()[0][1]) self.assertEqual(self.getDivText,readCsvList()[0][2]) def test_sina_002(self): self.login(username=readCsvList()[1][0],password=readCsvList()[1][1]) self.assertEqual(self.getDivText,readCsvList()[1][2]) def test_sina_003(self): self.login(username=readCsvList()[2][0],password=readCsvList()[2][1]) self.assertEqual(self.getDivText,readCsvList()[2][2]) if __name__ == '__main__': unittest.main(verbosity=2)
2、以字典的方式来读取 CSV
(1)将文件添加到当前工程的data目录下
(2)创建Utils工具 csvUtils.py代码如下
import csv from utils.pathUtils import filePath def readCsvDict(): #字典的方式读取csv文件 lists=[] with open(filePath(fileName='data.csv'),encoding='utf-8') as f: reader=csv.DictReader(f) for item in reader: lists.append(dict(item)) return lists print(readCsvDict()) [{'\ufeffusername': '', 'password': '', '期望结果': '请输入邮箱名'},
{'\ufeffusername': 'asddsDf', 'password': 'Asdf', '期望结果': '您输入的邮箱名格式不正确'}, {'\ufeffusername': 'sddtfy@sina.com', 'password': 'sdsfghjgf', '期望结果': '登录名或密码错误'}]
注意事项:读取的文件中有时候会出现"\ufeff"非法字符,这个时候需要改变编码方式'UTF-8'为'UTF-8-sig':
import csv from utils.pathUtils import filePath def readCsvDict(): #字典的方式读取csv文件 lists=[] with open(filePath(fileName='data.csv'),encoding='utf-8') as f: reader=csv.DictReader(f) for item in reader: lists.append(dict(item)) return lists print(readCsvDict()) [{'username': '', 'password': '', '期望结果': '请输入邮箱名'},
{'username': 'asddsDf', 'password': 'Asdf', '期望结果': '您输入的邮箱名格式不正确'}, {'username': 'sddtfy@sina.com', 'password': 'sdsfghjgf', '期望结果': '登录名或密码错误'}]
(3)编写代码 导入读取的文件内容 文件内容是字典类型 根据索引和key的值获取信息
from page.sina import Sina from page.init import InitSina from utils.csvUtills import readCsvDict from utils.yamlUtils import getUrl import unittest class sinaTest(InitSina,Sina): def test_sina_001(self): self.login(username=readCsvDict()[0]['\ufeffusername'],password=readCsvDict()[0]['password']) self.assertEqual(self.getDivText,readCsvDict()[0]['期望结果']) def test_sina_002(self): self.login(username=readCsvDict()[1]['\ufeffusername'],password=readCsvDict()[1]['password']) self.assertEqual(self.getDivText,readCsvDict()[1]['期望结果']) def test_sina_003(self): self.login(username=readCsvDict()[2]['\ufeffusername'],password=readCsvDict()[2]['password']) self.assertEqual(self.getDivText,readCsvDict()[2]['期望结果']) if __name__ == '__main__': unittest.main(verbosity=2)
二、Excel
在Python中,操作Excel的⽂件需要使⽤到第三⽅的库xlrd,需要单独的安装,安装的命令为:
pip3 install xlrd
(1)表格另存为时,将文件类型保存为xls 将文件添加到当前工程的data目录下
(2)创建Utils工具 excelUtils.py代码如下 读取表格信息
import xlrd from utils.pathUtils import filePath def readExcel(): lists=[] book=xlrd.open_workbook(filePath(fileName='data.xls')) sheet=book.sheet_by_index(0) for item in range(1,sheet.nrows): lists.append(sheet.row_values(item)) return lists print(readExcel()) [['', '', '请输入邮箱名'], ['sdfgas', 'asdfg', '您输入的邮箱名格式不正确'], ['sddtfy@sina.com', 'Sdfgfy', '登录名或密码错误']]
(3)编写代码 导入读取的文件内容 文件内容是字典类型 根据索引获取信息
from page.sina import Sina from page.init import InitSina from utils.excelUtils import readExcel from utils.yamlUtils import getUrl import unittest class sinaTest(InitSina,Sina): def test_sina_001(self): self.login(username=readExcel()[0][0],password=readExcel()[0][1]) self.assertEqual(self.getDivText,readExcel()[0][2]) def test_sina_002(self): self.login(username=readExcel()[1][0],password=readExcel()[1][1]) self.assertEqual(self.getDivText,readExcel()[1][2]) def test_sina_003(self): self.login(username=readExcel()[2][0],password=readExcel()[2][1]) self.assertEqual(self.getDivText,readExcel()[2][2]) if __name__ == '__main__': unittest.main(verbosity=2)