上两篇简单介绍了unintest框架,但是用例及测试数据都写在了代码内,如果需要修改数据或查看的话需要去代码里面找,会有点麻烦。接下来结合Excel实际应用进行数据分离;现在主流的测试用例数据都是写在Excel中。
需要安装第三方库openpyxl,只支持xlsx的格式

pip install openpyxl

首先把用例整理到Excel表格,命名为case.xlsx

python编辑openpyxl读取execl行数 openpyxl读取excel数据_python


python编辑openpyxl读取execl行数 openpyxl读取excel数据_列表_02


打开文件使用openpyxl.load_workbook(‘case.xlsx’).这里用变量work_book接收

work_book=openpyxl.load_workbook('case.xlsx')#打开文件
print(work_book)
结果如下:是一个对象
<openpyxl.workbook.workbook.Workbook object at 0x037A7C10>

但是表内容是由多个Sheet表单组成,所以需要先获取到表单,获取的方式有很多,这里使用对象[‘表单名’]的形式去获取

python编辑openpyxl读取execl行数 openpyxl读取excel数据_表单_03

work_book=openpyxl.load_workbook('case.xlsx')#打开文件
sheet=work_book['Sheet1']#获取表单
print(sheet)

结果如下:
<Worksheet "Sheet1">

需要注意表单是区分大小写的,否则会找不到,如下:

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')v
sheet=work_book['sheet1']
print(sheet)

结果如下:
KeyError: 'Worksheet sheet1 does not exist.'

——————————————————————————————————————————————

获取到整个表单后获取里面的数据,使用sheet.cell(row,column)方法,需要传参(row=行,column=列)

python编辑openpyxl读取execl行数 openpyxl读取excel数据_excel_04


如下我想获取第一行第一列的数据:

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')
sheet=work_book['Sheet1']
data=sheet.cell(1,1)#获取第一行第一列的数据,这里结果是一个单元格,并不是要得到的数据
print(data)
print(data.value)


结果如下:
<Cell 'Sheet1'.A1>
case_id

获取所有行的数据可以使用sheet.rows。

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')
sheet=work_book['Sheet1']
data=sheet.rows
print(data)#generator object数据类型可以转换成列表
print(list(data))#转换成列表

结果如下:
<generator object Worksheet._cells_by_row at 0x036FD8F0>

[(<Cell 'Sheet1'.A1>, <Cell 'Sheet1'.B1>, <Cell 'Sheet1'.C1>, <Cell 'Sheet1'.D1>, <Cell 'Sheet1'.E1>), 
(<Cell 'Sheet1'.A2>, <Cell 'Sheet1'.B2>, <Cell 'Sheet1'.C2>, <Cell 'Sheet1'.D2>, <Cell 'Sheet1'.E2>), 
(<Cell 'Sheet1'.A3>, <Cell 'Sheet1'.B3>, <Cell 'Sheet1'.C3>, <Cell 'Sheet1'.D3>, <Cell 'Sheet1'.E3>),
(<Cell 'Sheet1'.A4>, <Cell 'Sheet1'.B4>, <Cell 'Sheet1'.C4>, <Cell 'Sheet1'.D4>, <Cell 'Sheet1'.E4>),
(<Cell 'Sheet1'.A5>, <Cell 'Sheet1'.B5>, <Cell 'Sheet1'.C5>, <Cell 'Sheet1'.D5>, <Cell 'Sheet1'.E5>),
(<Cell 'Sheet1'.A6>, <Cell 'Sheet1'.B6>, <Cell 'Sheet1'.C6>, <Cell 'Sheet1'.D6>, <Cell 'Sheet1'.E6>),
(<Cell 'Sheet1'.A7>, <Cell 'Sheet1'.B7>, <Cell 'Sheet1'.C7>, <Cell 'Sheet1'.D7>, <Cell 'Sheet1'.E7>)]

这时候获取的是所有的单元格由元组的形式存放在一个列表内,如果想获取所有的数据可以用for循环实现,如下:获取数据后以列表的形式储存。

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')#打开文件
sheet=work_book['Sheet1']#获取表单
data=list(sheet.rows)#获取所有行
result=[]
for rows in data[1:]:#获取不包含标题的所有行的数据
    lis=[]
    for row in rows:
        lis.append(row.value)
    result.append(lis)
print(result)

结果如下:
[[1, '登录', '登录成功', "{'username':'admin','password':'123456'}", '登录成功'],
 [2, '登录', '登录失败', "{'username':'ADMIN','password':'123456'}", '用户名或密码错误'],
 [3, '登录', '登录失败', "{'username':' ','password':' '}", '用户名或密码为空'],
 [4, '注册', '注册成功', "{'phone':'13800138000','code':'1234'}", '注册成功'],
 [5, '注册', '注册失败', "{'phone':'13800138000','code':'1234'}", '手机号或验证码错误'],
 [6, '注册', '注册失败', "{'phone':'','code':'1234'}", '手机号或验证码为空']]

以字典的形式存储:

import openpyxl
work_book=openpyxl.load_workbook('case.xlsx')
sheet=work_book['Sheet1']
data=list(sheet.rows)
title=[]
result=[]
for key in data[0]:#标题
    title.append(key.value)#标题取出来
for rows in data[1:]:
    dic = {}
    for indx,row in enumerate(rows):
        dic[title[indx]]=row.value
    result.append(dic)
print(result)

结果如下:
[{'case_id': 1,
  'data': "{'username':'admin','password':'123456'}",
  'exceped': '登录成功',
  'module': '登录',
  'title': '登录成功'},
 {'case_id': 2,
  'data': "{'username':'ADMIN','password':'123456'}",
  'exceped': '用户名或密码错误',
  'module': '登录',
  'title': '登录失败'},
 {'case_id': 3,
  'data': "{'username':' ','password':' '}",
  'exceped': '用户名或密码为空',
  'module': '登录',
  'title': '登录失败'},
 {'case_id': 4,
  'data': "{'phone':'13800138000','code':'1234'}",
  'exceped': '注册成功',
  'module': '注册',
  'title': '注册成功'},
 {'case_id': 5,
  'data': "{'phone':'13800138000','code':'1234'}",
  'exceped': '手机号或验证码错误',
  'module': '注册',
  'title': '注册失败'},
 {'case_id': 6,
  'data': "{'phone':'','code':'1234'}",
  'exceped': '手机号或验证码为空',
  'module': '注册',
  'title': '注册失败'}]