openpyxl: .xlsx读写操作
安装:pip install openpyxl
测试数据:事先会写好在excel
平常操作excel的流程(3个对象):
工作薄(Workbook) wb = load_workbook(file_path)
表单(Sheet) sh = wb["表单名称“]
单元格(Cell) 按行获取 sh.rows =》 list(sh.rows) == 列表的成员是元组;sh.columns: 所有列的对象
cell(row=1,cloumn=2).value #获取到某个单元格的值
import os #导入os文件操作模块
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx") #获取当前文件绝对路径并在统计目录下新建文件“login_cases.xlsx”
from openpyxl import load_workbook #导入openpyxl的load_workbook模块
wb = load_workbook(file_path) # 1、加载excel数据文件
sh = wb["login"] # 2、根据表单名称选择表单:wb['表单名称']
cel = sh.cell(2,2) # 3、单元格对象:sh.cell(row,colum) # 下标从1开始
# sh.max_row # 总行数
# sh.max_column # 总列数
在表单当中,获取单元格的数据:
单元格对象:sh.cell(row,colum) # 下标从1开始
点value获取单元格的值。
修改数据:sh.cell(row,colum).value = 新的值 #等于重新赋值
保存数据(保存整个工作薄)
WorkBook对象(wb).save(文件路径)
wb.save("save_as_another_excel.xlsx") #另存在括号里面的地址
保存到原文件的时候,需要注意:文件没有被占用(没有被打开),否则会被权限不允许的错误。
所有读取出来的数据:不是字符串就是数字
将表格中的数据转换成列表内嵌字典的形式:
按行读取数据: sh.rows = 所有行的数据。list(sh.rows)返回的是一个列表,列表当中的成员:每一个行的数据元组。
方法一:
import os
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx")
# 1、加载excel数据文件
from openpyxlimport load_workbook
wb = load_workbook(file_path)
# 2、根据表单名称选择表单:wb['表单名称']
sh = wb["login"]
# 1、拿到字典的key值:
# print(list(sh.rows)[0]) # (, , )
titles = []
for itemin list(sh.rows)[0]:# 遍历第1行当中每一列
titles.append(item.value)
print(titles)
data_lists = []
# 2、把key和value组合到一起,形成一个字典。再将字典,放到列表当中。
# # print(list(sh.rows)) # 每一个行是个元组,无组里放的是每一行的单元格。
for itemin list(sh.rows)[1:]:# 遍历每一行
value_dict = {}# 每一行是一个字典。
print(item)
for indexin range(len(item)):# 获取每一行的单元格数据
print(index,item[index],item[index].value)
value_dict[titles[index]] = item[index].value
print(value_dict)
data_lists.append(value_dict)# 将每一行测试数据追加到列表当中。
print(data_lists)
方法2(使用打包函数zip方法):
zip函数基本使用方法:
li1 = ['user','passwd','check']
li2 = ["python27","lemonban66666",{"code":0,"msg":"登录成功"}]
res =zip(li1,li2)
print(dict(res))
打印结果:{'user' :"python27" ,'passwd' :"lemonban66666" ,'check' :“{"code":0,"msg":"登录成功"} ”}
结合eval函数可以将字符串中的数据转成python语句执行
eval(字符串)
eval(“ {"code":0,"msg":"登录成功"} ”)==》{"code":0,"msg":"登录成功"}
import os
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"login_cases.xlsx")
# 1、加载excel数据文件
from openpyxlimport load_workbook
wb = load_workbook(file_path)
# 2、根据表单名称选择表单:wb['表单名称']
sh = wb["login"]
all_datas = []# 获取excel表格当中所有的测试数据
# 1、拿到字典的key值:
# print(list(sh.rows)[0]) # (, , )
titles = []
for itemin list(sh.rows)[0]:# 遍历第1行当中每一列
titles.append(item.value)
print(titles)
for itemin list(sh.rows)[1:]:# 遍历数据行
values = []
for valin item:# 获取每一行的值
values.append(val.value)
res =dict(zip(titles,values))# title和每一行数据,打包成字典
res["check"] =eval(res["check"])# 将check的字符串,转换为字典对象。
all_datas.append(res)# 追加到列表
print(all_datas)
结合ddt使用
@ddt #定义类之前先引入模块
class TestLogin(unittest.TestCase):
@ddt(*all_datas) #定义函数前先引入数据
def test_login(self,case): #case接收all_datas,一般类里面的函数参数只有self
# 1、测试数据 # 2、测试步骤
res = login_check(case["user"],case["passwd"])
# 3、断言:预期结果与实际结果的比对
self.assertEqual(res,case["check"])