背景
很多公司還是用excel去管理測(cè)試用例的,所以為了減少重復(fù)繁瑣的導(dǎo)出導(dǎo)出工作,學(xué)會(huì)如何用代碼操作excel表格很實(shí)用~
1、讀取excel文件基本步驟
1、操作excel的一些庫(kù)
1、xlrd:讀取庫(kù),xlwt:寫入,現(xiàn)在基本不用,因?yàn)橹荒芴幚?xls這種格式的數(shù)據(jù)
2、使用openpyxl庫(kù):不支持的 .xls格式,支持的格式:.xlsx、.xlsm、.xltx、.xltm,可以將.xls 轉(zhuǎn)化為 xlsx格式
? ? ? ? - 安裝openpyxl,使用 pip install openpyxl
? ? ? ? - 導(dǎo)入:import | from? openpyxl? import? xxx
2、讀取的步驟
1、讀取單元格數(shù)據(jù)
- 獲取表格的工作簿對(duì)象(用到 openpyxl中的load_workbook模塊)
- 得到表單,通過(guò)sheet名稱 — sheet
- 獲取單元格?— cell
- 獲取單元格數(shù)據(jù) — cell.value
實(shí)戰(zhàn)演練:
excel表格如下:
代碼實(shí)戰(zhàn):
from openpyxl import load_workbook
import pathlib
# 獲取excel的相對(duì)路徑
cur_path = pathlib.Path(__file__).absolute()
excel_path = cur_path.parent/"testcase64.xlsx"
# 第一步,獲取表格的工作簿對(duì)象
wb = load_workbook(excel_path)
print(wb) # <openpyxl.workbook.workbook.Workbook object at 0x03EFCD60>
# 第二步,得到表單——sheet
sheet = wb["login"]
print(sheet)
# 第三步,獲取單元格數(shù)據(jù)
cell = sheet.cell(row=1,column=3)
print(cell)
# 第四步,獲取單元格數(shù)據(jù) -- value
cell_value = sheet.cell(row=2,column=2).value
print(cell_value) # 輸出:登錄正常
# 獲取表單中所有的數(shù)據(jù) -- 轉(zhuǎn)化為列表
# 因?yàn)?sheet.values的輸出是“<generator object Worksheet.values at 0x03817840” > 就是一個(gè)生成器,可以轉(zhuǎn)化為列表的形式
datas = list(sheet.values)
print(datas) # 是一個(gè)列表,每一個(gè)數(shù)據(jù)都是元組
'''
[
('id', 'title', 'method', 'header', 'url', 'data', 'expected'),
(1, '登錄正常', 'post', '{"Content-Type":"application/json"}', 'https://openapiv5.ketangpai.com//UserApi/login', '{"email":"2378807189@qq.com ","password":"lemon123456 ","remember":"0","code":"","mobile":"","type":"login","reqtimestamp":1695045752424}', '{"status":1,"code":10000,"message":"訪問成功","data":{"token":"skjdaskjhd"}'),
(2, '登錄異常', 'post', '{"Content-Type":"application/json"}', 'https://openapiv6.ketangpai.com//UserApi/login', '{"email":"2378807189@qq.com ","password":"lemon","remember":"0","code":"","mobile":"","type":"login","reqtimestamp":1695045752424}', '{"status":0,"code":"30508","message":"登錄失敗"}')
]
'''
'''
全部讀取的數(shù)據(jù)轉(zhuǎn)化為項(xiàng)目里需要的格式數(shù)據(jù)
'''
# 第一步,取出標(biāo)題
title = datas[0]
# 第二步,再一次獲取后續(xù)的每一行數(shù)據(jù),跟title壓縮成字典
case_list = []
for case in datas[1:]:
case_dict = dict(zip(title,case))
case_list.append(case_dict)
print(case_list)
# 通過(guò)列表推導(dǎo)式來(lái)遍歷
case_list1 = []
case_list1 = [case_list1.append(dict(zip(title,case))) for case in datas]
print(case_list)
?2、讀取excel文件的優(yōu)化
優(yōu)化思路,代碼分層思想:按照不同的功能代碼進(jìn)行不同包的管理(自動(dòng)化框架的結(jié)構(gòu)):
- 工具層:tools/common/util,封裝好的公共方法,類同于Jmeter里的函數(shù)助手,比如對(duì)excel讀取數(shù)據(jù)的處理過(guò)程
- 測(cè)試數(shù)據(jù)層:data/testdata,放測(cè)試數(shù)據(jù),例如:txt文件、excel表格等
- 測(cè)試用例層:主要維護(hù)用例(pytest框架主要做的事情)
- 測(cè)試結(jié)果輸出:如 測(cè)試報(bào)告、測(cè)試日志
- 入口文件:main.py、run.py一般放在最外層
優(yōu)化實(shí)戰(zhàn):
1、按照分層思想,新建data層和tools層,并完善其中的文件,參考如下圖片:
2、將獲取excel_path和獲取數(shù)據(jù)的方式分別寫到handle_excel文件和handle_path兩個(gè)文件中,如下:
'''
handle_excel文件
'''
from openpyxl import load_workbook
from d11_excel操作和pytest框架.tools.handle_path import exce_path
def read_excel(filename, sheet)
wb = load_workbook(filename)
sheet = wb[sheet]
datas_list = list(sheet.values)
title = datas_list[0]
list_case = []
for case in datas_list[1:]:
tep_dict = dict(zip(title,case))
list_case.append(tep_dict)
return list_case
'''
handle_path.py
'''
import pathlib
cur_path = pathlib.Path(__file__).absolute()
exce_path = cur_path.parent.parent/"data"/"testcase64.xlsx"
if __name__ == '__main__':
print(exce_path)
3、一些擴(kuò)展(如何快速查看excel表格中的數(shù)據(jù)類型)
可以通過(guò)debug的方式,看到我們從excel中讀取的數(shù)據(jù)的類型,舉例如下:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-773037.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-773037.html
到了這里,關(guān)于Python —— excel文件操作(超詳細(xì))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!