一、需求背景
在开发测试工具的过程中,需要将excel文件格式的测试用例导出为yaml文件格式
测试用例excel文件示例如下:
二、方案对比
1.使用pandas读取excel文件,再将dataframe转换为yaml文件
2.tablib读取excel文件,再将dataset导出为yaml文件
pandas并不支持直接将dataframe导出为yaml,需要使用pyyaml库辅助
tablib为查阅资料后发现,可直接将dataset导出为yaml文件
三、代码实现
pandas方法
读取excel转换为字典
import pandas as pd
import yaml
def excel_to_yaml_pd(path, target):
df = pd.read_excel(path) # pandas读取excel
data_dict = df.to_dict() # 转换为字典
print(data_dict)
if __name__ == "__main__":
file_path = '用例模版.xlsx'
target_path_pd = 'target_pd.yaml'
excel_to_yaml_pd(file_path, target_path_pd)
运行后发现读取结果中包含nan,使用fillna()方法处理
data_dict = df.fillna('').to_dict(orient='index') # 填充NAN值,转换为字典
字典数据写入yaml文件
with open(target, 'w', encoding='utf-8') as f: # 数据写入yaml文件
yaml.dump(data_dict, stream=f)
为了更直观查看保存的yaml文件,在写入yaml时添加allow_unicode和sort_keys参数
import pandas as pd
import yaml
def excel_to_yaml_pd(path, target):
df = pd.read_excel(path) # pandas读取excel
data_dict = df.fillna('').to_dict(orient='index') # 填充NAN值,转换为字典
with open(target, 'w', encoding='utf-8') as f: # 数据写入yaml文件
yaml.dump(data_dict, stream=f, allow_unicode=True, sort_keys=False)
if __name__ == "__main__":
file_path = '用例模版.xlsx'
target_path_pd = 'target_pd.yaml'
excel_to_yaml_pd(file_path, target_path_pd)
tablib方法
读取excel后直接转换为yaml
from tablib import Dataset
def excel_to_yaml_tab(path, target):
with open(path, 'rb') as f: # 从excel导入数据
source_data = Dataset().load(f)
with open(target, 'w', encoding='utf-8') as f: # 导出为yaml
f.write(source_data.yaml) # xlsx xls json csv html markdown
# a = source_data.export('yaml')
if __name__ == "__main__":
file_path = '用例模版.xlsx'
target_path_tab = 'target_tab.yaml'
excel_to_yaml_tab(file_path, target_path_tab)
tablib还支持导出为其它格式:xlsx、xls、json、csv、html、markdown等