九、读取文件数据
1. 读取yml文件数据
yml
文件是一种特殊的文件格式,该格式的文件名均以.yml
结尾。-
表示列表,key: value
表示字典。
-
case.yml
文件中存放的内容- title: framwork text: selenium - title: framwork text: appium - title: language text: python - title: language text: C语言
1.1 yaml模块读取该文件中的内容
import yaml
with open('case.yml', mode='r', encoding='utf-8') as f:
result = yaml.load(f, Loader=yaml.FullLoader)
print(result)
print(type(result))
# 输出结果
[{'title': 'framwork', 'text': 'selenium'}, {'title': 'framwork', 'text': 'appium'}, {'title': 'language', 'text': 'python'}, {'title': 'language', 'text': 'C语言'}]
<class 'list'>
1.2 ddt数据驱动读取该文件中的内容
import unittest
from ddt import ddt, file_data
@ddt
class Test_baidu(unittest.TestCase):
@file_data('case.yml')
def test_baidu01(self, title, text):
print(title, text)
@file_data('case.yml')
def test_baidu02(self, **kwargs):
print(kwargs.get('title'), kwargs.get('text'))
if __name__ == '__main__':
unittest.main()
# 输出结果
framwork selenium
framwork appium
language python
language C语言
framwork selenium
framwork appium
language python
language C语言
2. 读取xlsx文件数据
xlsx是excel的一种数据文件格式。
-
case.xlsx
文件中存放的数据id excepted data 1 ('python1', '123456', '123456') 2 ('python2', '1234567', '123456') 3 ('python3', '1234567', '1234567') 4 ('python4', '123456', '1234567') -
读取该文件中的数据
import openpyxl class Case(object): ''' 用来存储用例 ''' def __init__(self, case): ''' 初始化用例 :param case:zip对象转换成的列表 --> [(key1, value1), (key2, value2), ...] ''' for item in case: # 得到每一个用例对象 setattr(self, item[0], item[1]) class ReadExcel(object): ''' 读取excel表单数据 ''' def __init__(self, filename, sheetname): ''' :param filename: 需要读取数据的xlsx文件名 :param sheetname: 需要读取数据的表单名 ''' self.filename = filename self.workbook = openpyxl.load_workbook(filename) self.sheet = self.workbook[sheetname] def __del__(self): # 在销毁对象时调用 self.workbook.close() def read_data_by_dict(self): ''' 按行读取数据 每个用例存储在一个字典中 :return: 返回读取到的表单数据 ''' # 将获取到的表单数据转化成列表格式 rows_data = list(self.sheet.rows) # 获取表头信息 titles = [] for title in rows_data[0]: titles.append(title.value) # 获取用例 cases = [] for case in rows_data[1:]: # 获取每一行的数据 data = [] for cell in case: if isinstance(cell.value, str): # 如果为字符串类型,则将其转化为python类型 data.append(eval(cell.value)) else: data.append(cell.value) # 将表头作为键,对应的数据作为值组成键值对,得到每一个用例 case_data = dict(zip(titles, data)) # 将得到的用例插入到总用例中 cases.append(case_data) return cases def read_data_by_obj(self): ''' 按行读取数据 每个用例存储在一个对象中 :return: 返回读取到的表单数据 ''' # 将获取到的表单数据转化成列表格式 rows_data = list(self.sheet.rows) # 获取表头信息 titles = [] for title in rows_data[0]: titles.append(title.value) # 获取用例 cases = [] for case in rows_data[1:]: # 获取每一行的数据 data = [] for cell in case: if isinstance(cell.value, str): # 如果为字符串类型,则将其转化为python类型 data.append(eval(cell.value)) else: data.append(cell.value) # 得到表头和数据的对应值 case_data = list(zip(titles, data)) # 创建一个Case类的对象,用来存储用例数据 case_obj = Case(case_data) # 将得到的用例对象插入到总用例中 cases.append(case_obj) return cases def read_data_by_column(self, column_list): ''' 读取指定列的数据 每个用例存储在一个对象中 :param column_list: 需要读取的列组成的列表 -->列表类型 :return: 返回读取到的表单数据 ''' # 用来存储测试用例 cases = [] # 用来存储表头信息 titles = [] for row in range(1, self.sheet.max_row+1): # 判断是否为第一行 if row != 1: # 用来存储每一行的数据 datas = [] for column in column_list: data = self.sheet.cell(row, column).value if isinstance(data, str): datas.append(eval(data)) else: datas.append(data) # 定义一个Case类的对象 case_obj = Case(list(zip(titles, datas))) # 将每一个用例对象插入到总用例列表中 cases.append(case_obj) else: for column in column_list: title = self.sheet.cell(row, column).value titles.append(title) return cases def write_data(self, row, column, message): ''' 写入数据 :param row: 写入位置的行号 :param column: 写入位置的列号 :param message: 写入位置的内容 ''' # 写入数据 self.sheet.cell(row=row, column=column, value=message) # 保存文件 self.workbook.save(self.filename) if __name__ == '__main__': read_excel = ReadExcel('case.xlsx', 'Sheet1') cases1 = read_excel.read_data_by_dict() for case in cases1: print(case) cases2 = read_excel.read_data_by_obj() for case in cases2: print(case.id, case.excepted, case.data) cases3 = read_excel.read_data_by_column([1, 3]) for case in cases3: print(case.id, case.data) # 输出结果 {'id': 1, 'excepted': {'url': 'http://www.baidu.com/', 'text': 'selenium'}, 'data': ('python1', '123456', '123456')} {'id': 2, 'excepted': {'url': 'http://www.baidu.com/', 'text': 'appium'}, 'data': ('python2', '1234567', '123456')} {'id': 3, 'excepted': {'url': 'http://www.baidu.com/', 'text': 'python'}, 'data': ('python3', '1234567', '1234567')} {'id': 4, 'excepted': {'url': 'http://www.baidu.com/', 'text': '求职'}, 'data': ('python4', '123456', '1234567')} 1 {'url': 'http://www.baidu.com/', 'text': 'selenium'} ('python1', '123456', '123456') 2 {'url': 'http://www.baidu.com/', 'text': 'appium'} ('python2', '1234567', '123456') 3 {'url': 'http://www.baidu.com/', 'text': 'python'} ('python3', '1234567', '1234567') 4 {'url': 'http://www.baidu.com/', 'text': '求职'} ('python4', '123456', '1234567') 1 ('python1', '123456', '123456') 2 ('python2', '1234567', '123456') 3 ('python3', '1234567', '1234567') 4 ('python4', '123456', '1234567')