1 前言
在自动化测试过程中, 经常需要与外部文件打交道, 或是导入测试数据, 或是加载测试用例
外部文件可以有多种表现形式, 有人喜欢用excel, 有人喜欢用csv, 也有人喜欢用yml
不同的形式有着不同的处理方式, 为避免遗忘, 特在此记录
2 纯文本
2.1 CSV
csv一般以TAB作为分隔符, 但也可以使用|
, ,
等
csv表现形式与Excel想像, 但本质还是普通文本, 处理比较容易
样本数据, 包含数据头, 且以\t
分隔:
name age favor
Lili 19 Art
Ming 18 Math
Kate 15 Game
内置库CSV可以轻松搞定, 当然用pandas只需一句话
// import csv
with open(file) as fp:
reader = csv.DictReader(fp, delimiter='\t')
datas = [row for row in reader]
// import pandas as pd
df = pd.read_csv(file, sep='\t')
2.2 XML
样本数据:
Chinese Food
28.8
JVM
39.5
- getroot() 获取根节点
- iter(childNode) 可以迭代指定子节点
- items() 获取节点属性
- list(node) 列出子节点
from xml.etree import ElementTree as ET
datas = []
tree = ET.parse('data.xml')
root = tree.getroot()
for book in root.iter('book'):
# print(book.items())
data = {}
for field in list(book):
data[field.tag] = field.text
datas.append(data)
2.3 JSON
文件的话, 直接使用load方法; 如果读取了现成的json字符串, 则使用loads
with open('data.json') as fp:
data = json.load(fp)
3 INI
import configparser
datas = {}
parser = configparser.ConfigParser()
parser.read('data.ini', encoding='utf-8')
for section in parser.sections():
data = {}
for option in parser.options(section):
data[option] = parser.get(section, option)
datas[section] = data
4 YML
需要安装PyYAML模块
safe_load相较于load, 对yaml语法有严格限制, 禁止自由定制
with open('data.yml') as fp:
data = yaml.safe_load(fp)
5 Excel
安装xlrd库, 支持xlsx格式; openpyxl库也可以处理
import xlrd
workbook = xlrd.open_workbook('data.xlsx')
for name in workbook.sheet_names(): //获取sheet名称
sheet = workbook.sheet_by_name(name)
row_num = sheet.nrows // 获取行数
col_num = sheet.ncols // 获取列数
for i in range(row_num):
// 列表形式返回某一行数据,
print(sheet.row_values(i))
// 获取单元格数值, 行列起始均为0
print(sheet.cell(rowx=1, colx=1).value)