日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

基于Python的接口自動(dòng)化讀寫excel文件的方法

瀏覽:208日期:2022-06-29 17:26:31
引言

使用python進(jìn)行接口測試時(shí)常常需要接口用例測試數(shù)據(jù)、斷言接口功能、驗(yàn)證接口響應(yīng)狀態(tài)等,如果大量的接口測試用例腳本都將接口測試用例數(shù)據(jù)寫在腳本文件中,這樣寫出來整個(gè)接口測試用例腳本代碼將看起來很冗余和難以清晰的閱讀以及維護(hù),試想如果所有的接口測試數(shù)據(jù)都寫在代碼中,接口參數(shù)或者測試數(shù)據(jù)需要修改,那不得每個(gè)代碼文件都要一一改動(dòng)?。因此,這種不高效的模式不是我們想要的。所以,在自動(dòng)化測試中就有個(gè)重要的思想:測試數(shù)據(jù)和測試腳本分離,也就是測試腳本只有一份,其中需要輸入數(shù)據(jù)的地方會(huì)用變量來代替,然后把測試輸入數(shù)據(jù)單獨(dú)放在一個(gè)文件中,這個(gè)存放測試輸入數(shù)據(jù)的文件,通常是表格的形式或者其他格式文件,如excel文件、json文件、xml文件、txt文本文件等等。在python進(jìn)行接口自動(dòng)化測試時(shí),為了方便管理和存儲(chǔ)測試用例數(shù)據(jù),一般將測試數(shù)據(jù)編寫存儲(chǔ)在excel文件中,測試腳本通過讀取excel文件來實(shí)現(xiàn)測試數(shù)據(jù)加載,并運(yùn)行得出測試用例數(shù)據(jù)執(zhí)行的結(jié)果,并回寫測試結(jié)果到excel文件中,這樣就實(shí)現(xiàn)了測試腳本和數(shù)據(jù)的分離。而python操作excel文件的讀寫,這里需要安裝并引入第三方模塊:xlrd和xlwt以及xlutils,xlrd為讀取excel模塊,xlwt為向excel寫數(shù)據(jù)的模塊,xlutils可以復(fù)制excel并修改excel中的數(shù)據(jù)。下面就具體介紹xlrd和xlwt操作excel文件提供的通用方法和技巧,以及xlutils如何復(fù)制和修改excel,達(dá)到操作excel讀寫的目的。

一、xlrd、xlwt以及xlutils安裝

1.使用pip安裝

pip install xlrdpip install xlwtpip install xlutils

2.在PyCharm中安裝

直接檢索需要安裝的模塊名稱即可,如xlrd:

基于Python的接口自動(dòng)化讀寫excel文件的方法

二、xlrd操作excel文件的數(shù)據(jù)讀取

新建一個(gè)excel文件,文件名稱:excel_test.xlsx,文件編輯有兩個(gè)sheet表,內(nèi)容如下:

sheet1:

基于Python的接口自動(dòng)化讀寫excel文件的方法

sheet2:

基于Python的接口自動(dòng)化讀寫excel文件的方法

(1)打開excel文件,獲取excel的sheet名

編輯如下代碼:

import xlrdfile = xlrd.open_workbook('excel_test.xlsx')all_sheet = file.sheet_names() # 獲取所有的工作簿名sheet_name1 = file.sheet_names()[0] # 通過sheet下標(biāo)獲取,第一個(gè)sheet下標(biāo)為0sheet_name2 = file.sheet_by_index(0).name # 通過sheet索引獲取sheet名print(all_sheet)print(sheet_name1)print(sheet_name2)-----------------------------------------# 返回結(jié)果[’員工信息表’, ’api測試用例’]員工信息表員工信息表

(2)獲取sheet工作表頁的對象

代碼示例:

import xlrdfile = xlrd.open_workbook('excel_test.xlsx')sheet_name1 = file.sheet_names()[0]sheet1_obj = file.sheet_by_name(sheet_name1) # 通過sheet名獲取sheet對象sheet2_obj = file.sheet_by_index(1) # 通過sheet索引獲取sheet對象print(sheet1_obj)print(sheet2_obj)------------------------------------# 返回結(jié)果<xlrd.sheet.Sheet object at 0x0000000002AA09B0><xlrd.sheet.Sheet object at 0x0000000002AA0978>

(3)獲取sheet工作表的行、列數(shù),整行、整列數(shù)據(jù),具體的單元格數(shù)據(jù)

代碼示例:

import xlrdfile = xlrd.open_workbook('excel_test.xlsx')sheet = file.sheet_by_index(0) # 通過sheet索引獲取sheet對象nrows = sheet.nrows # 獲取行數(shù)ncols = sheet.ncols # 獲取列數(shù)nrows_data = sheet.row_values(1) # 獲取第二行數(shù)據(jù),返回的是列表ncols_data = sheet.col_values(0) # 獲取第一列數(shù)據(jù),返回的是列表cell = sheet.cell(1,2) # 獲取單元格數(shù)據(jù),如第二行,第三列數(shù)據(jù)print(nrows)print(ncols)print(nrows_data)print(ncols_data)print(cell)-------------------------------# 返回結(jié)果65[’王五’, ’男’, 32883.0, ’java開發(fā)工程師’, 233.0][’姓名’, ’王五’, ’李四’, ’張三’, ’小紅’, ’小明’]xldate:32883.0 # 這里日期數(shù)據(jù)直接返回成浮點(diǎn)數(shù)了

 常見讀取excel不同數(shù)據(jù)類型的返回問題,如讀取日期格式的數(shù)據(jù)

一般使用sheet.cell(rowx,colx)方法獲取單元格數(shù)據(jù),單元格數(shù)據(jù)類型判斷可以使用如下代碼:

print(sheet.cell(1,2).ctype)------------# 返回日期數(shù)據(jù)的結(jié)果3

注:ctype : 0 empty,1 string, 2 number,3 date, 4 boolean, 5 error

讀取單元格日期數(shù)據(jù)為浮點(diǎn)數(shù)的處理方式:

代碼如下:

import xlrdfrom datetime import datefile = xlrd.open_workbook('excel_test.xlsx')sheet = file.sheet_by_index(0) # 通過sheet索引獲取sheet對象nrows_data = sheet.row_values(1) # 獲取第二行數(shù)據(jù),返回的是列表ncols_data = sheet.col_values(0) # 獲取第一列數(shù)據(jù),返回的是列表cell = sheet.cell(1,2) # 獲取單元格數(shù)據(jù),如第二行,第三列數(shù)據(jù),返回的是浮點(diǎn)數(shù)data_value = xlrd.xldate_as_tuple(sheet.cell_value(1,2) ,file.datemode) # xldate_as_tuple()方法得到日期數(shù)據(jù)年月日時(shí)分秒的值并返回為元組datatime2 = date(*data_value[:3]).strftime(’%Y/%m/%d’) # 截取元組中的前三位,即年月日的值傳給data,并進(jìn)行時(shí)間格式化 print(cell)print(data_value)print(datatime2) -----------------------# 返回結(jié)果xldate:32883.0(1990, 1, 10, 0, 0, 0)1990/01/10

因此在讀取excel單元格數(shù)據(jù),如遇到是日期格式的數(shù)據(jù),可以加上如下代碼判斷并處理:

if (sheet.cell(row,col).ctype == 3): date_value = xlrd.xldate_as_tuple(sheet.cell_value(row,col),file.datemode) date_tmp = date(*date_value[:3]).strftime(’%Y/%m/%d’)三、xlwt向excel文件寫入數(shù)據(jù)

xlwt一般用于向excel文件寫入數(shù)據(jù),簡單示例如下:

import xlwt workbook = xlwt.Workbook(encoding = ’utf-8’) # 創(chuàng)建工作簿sheet = workbook.add_sheet(’api_test’) # 添加一個(gè)sheetdata = sheet.write(0,0,’test’) # 向第一行第一列寫入數(shù)據(jù):testworkbook.save(’book.xlsx’) # 保存到book.xlsx中

 運(yùn)行完成后會(huì)在該py文件的同級目錄下生成一個(gè)book.xlsx的excel文件,并新增了api_test的sheet表名,第一行第一列寫入數(shù)據(jù):test

 向excel寫入數(shù)據(jù)時(shí),可以設(shè)置單元格長寬、單元格合并、寫入時(shí)間格式數(shù)據(jù)以及添加超鏈接等

代碼示例:

import xlwtimport datetimeworkbook = xlwt.Workbook(encoding = ’utf-8’) # 創(chuàng)建工作簿sheet = workbook.add_sheet(’api_test’) # 添加一個(gè)sheetdata = sheet.write(4,0,’test’) sheet.col(0).width = 5000 # 設(shè)置單元格寬度 style = xlwt.XFStyle() # 初始化表格樣式style.num_format_str = ’M/D/YY’ # 設(shè)置時(shí)間格式,如:M/D/YYsheet.write(5, 1, datetime.datetime.now(), style) # 寫入時(shí)間格式數(shù)據(jù) # 合并多列和和并多行# 表示合并的行數(shù)是:按行索引,從0行到第0行,按列索引從0列到第3列,合并后并寫入數(shù)據(jù):test1sheet.write_merge(0, 0, 0, 3, ’test1’)# 表示合并的行數(shù)是:按行索引,從1行到第2行,按列索引從0列到第3列,合并后并寫入數(shù)據(jù):test2sheet.write_merge(1, 2, 0, 3, ’test2’) # 向單元格添加超鏈接sheet.write(6, 0, xlwt.Formula(’HYPERLINK('https://www.baidu.com/';'baidu')’)) workbook.save(’book.xlsx’) # 保存到book.xlsx中

 運(yùn)行后輸出excel效果如下:

基于Python的接口自動(dòng)化讀寫excel文件的方法

四、xlutils操作excel文件

(1)拷貝excel表格

xlutils模塊下的copy可以復(fù)制拷貝excel文件,代碼示例:

import xlrdfrom xlutils.copy import copyexcel_file = xlrd.open_workbook('book.xlsx')new_file = copy(excel_file) # 拷貝文件對象new_file.save('book1.xlsx') # 保存為excel文件

 運(yùn)行以上代碼會(huì)在同級目錄下生成一個(gè)book1.xlsx的excel文件,該文件和book.xlsx一樣,只是文件名稱不一樣而已,也就是復(fù)制excel文件了

(2)修改excel文件內(nèi)容

除了copy為其他excel文件外,也可以直接copy文件修改后,保存為同名的文件,那修改的內(nèi)容將直接覆蓋原excel文件,達(dá)到修改的目的

示例:

import xlrdfrom xlutils.copy import copyexcel_file = xlrd.open_workbook('book.xlsx')new_file = copy(excel_file)sheet = new_file.get_sheet(0) # 獲取表格的第一個(gè)sheetsheet.write(0,1,'測試') # 第一行第二列寫入:測試sheet.write(1,1,'測試1') # 第二行第二列寫入:測試1new_file.save('book.xlsx')

 運(yùn)行后book.xlsx表會(huì)修改更新

五、封裝操作excel讀和寫的類

通過上面介紹,基本具備使用xlrd、xlwt、xlutils模塊進(jìn)行excel文件數(shù)據(jù)讀取和向excel文件中寫入數(shù)據(jù),在進(jìn)行接口測試時(shí),我們說到需要:測試數(shù)據(jù)和測試腳本分離,后續(xù)的接口測試用例數(shù)據(jù),我們統(tǒng)一寫入excel表格中,然后通過操作excel來讀取測試數(shù)據(jù)并將測試結(jié)果回填到excel中。因此,咱們需要對向excel讀取數(shù)據(jù)和向excel寫入數(shù)據(jù)的操作進(jìn)行封裝。

我們操作上面的api測試用例這個(gè)sheet,封裝讀取excel數(shù)據(jù)的類,代碼示例:

from xlrd import open_workbookclass Readexcel(): def excel_data_list(self, filename, sheetname): ’’’ :param filename: excel文件名稱 :param sheetname: excel中表格sheet名稱 :return: data_list ’’’ data_list = [] wb = open_workbook(filename) # 打開excel sh = wb.sheet_by_name(sheetname) # 定位工作表 header = sh.row_values(0) # 獲取標(biāo)題行的數(shù)據(jù) for i in range(1, sh.nrows): # 跳過標(biāo)題行,從第二行開始獲取數(shù)據(jù) col_datas = dict(zip(header, sh.row_values(i))) # 將每一行的數(shù)據(jù),組裝成字典 data_list.append(col_datas) # 將字典添加到列表中 ,列表嵌套字典,每個(gè)元素就是一個(gè)字典 return data_list if __name__ == ’__main__’: Readexcel()

 上面代碼封裝了讀取excel數(shù)據(jù)的類,將每一行數(shù)據(jù)讀取出來組裝成字典并添加到列表中

實(shí)例化運(yùn)行:

data_list = Readexcel().excel_data_list(’excel_test.xlsx’,’api測試用例’) print(data_list)-----------------------# 返回結(jié)果[ {’module’: ’視頻安防’, ’url’: ’http://imp-t.tfgreenroad.com:18092/console_api/recep/tv/list’, ’id’: 1.0, ’params’: ’{ 'queryMsg':'','regionCode':'','devtypeCode':'','online':'','offset':'','limit':1,'type':''}’, ’method’: ’get’, ’actual_res’: ’’, ’data’: ’’, ’expect_res’: ’’, ’test_res’: ’’, ’case_name’: ’分頁查詢視頻安防設(shè)備列表’, ’files’: ’’}, {’module’: ’平臺(tái)管理’, ’url’: ’http://imp-t.tfgreenroad.com:18092/console_api/manage/appsys/info’, ’id’: 2.0, ’params’: ’’, ’method’: ’post’, ’actual_res’: ’’, ’data’: ’{'appName': 'hahh','appId': '34434343','appUrl': 'http://12306.com','appCode': '89','remark':''}’, ’expect_res’: ’{'code': 200,'errMsg': ''}’, ’test_res’: ’’, ’case_name’: ’應(yīng)用管理-單個(gè)應(yīng)用系統(tǒng)添加’, ’files’: ’’}, {’module’: ’平臺(tái)管理’, ’url’: ’http://imp-t.tfgreenroad.com:18092/console_api/manage/appsys/info/upappid/89’, ’id’: 3.0, ’params’: ’’, ’method’: ’put’, ’actual_res’: ’’, ’data’: ’{'appId': '3232327676888'}’, ’expect_res’: ’{'code': 200,'errMsg': ''}’, ’test_res’: ’’, ’case_name’: ’應(yīng)用管理-修改應(yīng)用appId’, ’files’: ’’}, {’module’: ’平臺(tái)管理’, ’url’: ’http://imp-t.tfgreenroad.com:18092/console_api/manage/devtype/list’, ’id’: 4.0, ’params’: ’{ 'queryMsg':'15002','offset':'','limit':''}’, ’method’: ’get’, ’actual_res’: ’’, ’data’: ’’, ’expect_res’: ’’, ’test_res’: ’’, ’case_name’: ’設(shè)備分類-分頁獲取設(shè)備類型’, ’files’: ’’}]

 封裝向excel寫入數(shù)據(jù)的類,代碼示例:

from xlutils.copy import copyfrom xlrd import open_workbook class Write_excel(): def write_result(self, filename, row, col1,col2,actual_res, test_res,sheet_name): ’’’ :param filename: 文件名 :param row: 要寫回的行 :param col1: 要寫回的列 :param col2: 要寫回的列 :param actual_res: 實(shí)際結(jié)果 :param test_res: 測試結(jié)果 :pass/failed :param sheet_name:指定的sheet表索引 :return: ’’’ old_workbook = open_workbook(filename) # 將已存在的excel拷貝進(jìn)新的excel new_workbook = copy(old_workbook) # 獲取sheet new_worksheet = new_workbook.get_sheet(sheet_name) # 第n個(gè)sheet,0表示第一個(gè)sheet # 寫入數(shù)據(jù) new_worksheet.write(row, col1, actual_res) new_worksheet.write(row, col2, test_res) # 保存 new_workbook.save('book.xlsx') if __name__ == ’__main__’: Write_excel()

這樣我們就完成了讀寫excel操作的封裝,后續(xù)接口測試數(shù)據(jù)的讀取和寫入就依靠這兩個(gè)類了。

到此這篇關(guān)于基于Python的接口自動(dòng)化讀寫excel文件的文章就介紹到這了,更多相關(guān)Python接口自動(dòng)化內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: python
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产 日韩 欧美 综合 一区| 日本少妇一区二区| 国产一区国产二区国产三区 | 亚州av日韩av| 国产字幕视频一区二区| 日韩在线中文| 深夜视频一区二区| 国产一区日韩欧美| 亚洲成人二区| 香蕉精品视频在线观看| 在线视频免费在线观看一区二区| 欧美91视频| 婷婷成人基地| 久久99伊人| 亚洲免费专区| 国产精品天天看天天狠| 国产一区二区三区不卡视频网站 | 97国产精品| 成人羞羞在线观看网站| 一区二区视频欧美| 中文字幕亚洲精品乱码| 欧美精品国产| 国精品产品一区| 亚洲www免费| 一区二区视频欧美| 日韩一区二区三免费高清在线观看 | 久久久精品区| 久久午夜影院| 日韩大片在线观看| 国产亚洲亚洲| 日本一区免费网站| 欧美精品91| 日韩伦理在线一区| 午夜久久99| 日本欧美韩国一区三区| 乱一区二区av| 亚洲一级黄色| 亚洲精品激情| 免费视频一区二区三区在线观看| 黄色欧美在线| 欧美日韩国产高清| 一区二区日韩免费看| 美女视频黄免费的久久| 成人在线网站| 亚洲三级观看| 成人精品动漫一区二区三区| 精品一区在线| 日韩动漫一区| 国产99在线| 美国三级日本三级久久99| 国产欧美日韩精品高清二区综合区 | 亚洲一区二区小说| 免费日韩成人| 日韩视频免费| 欧美精品1区| 91精品电影| 国产欧美一区二区三区精品观看 | 日韩在线观看一区二区| 麻豆一区二区在线| 日韩在线看片| 亚洲精品成人一区| 色在线中文字幕| 国产精品蜜月aⅴ在线| 天堂√中文最新版在线| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品分类| 国产视频亚洲| 精品国产99| 亚洲欧洲国产精品一区| 亚洲天堂免费电影| 久久国产三级精品| 国产精品日韩欧美一区| 高清精品久久| 欧美亚洲国产日韩| 99热精品在线观看| 日产午夜精品一线二线三线| 视频一区二区欧美| 日韩网站中文字幕| 欧美aa在线视频| 日韩影院在线观看| 久久久久久久久久久妇女| 国产精品久久久久久久久久白浆 | 久久久久中文| 麻豆国产精品视频| 日本中文字幕一区二区| 女人av一区| 伊人网在线播放| 国产精品欧美一区二区三区不卡| 国产在线不卡| 精品一区二区三区亚洲| 亚洲日韩视频| 欧美另类综合| 日韩欧美二区| 美女在线视频一区| 日本在线成人| 视频一区欧美日韩| 国产二区精品| 在线人成日本视频| 免费日韩一区二区三区| 欧美中文一区| 亚洲一区激情| 亚洲二区精品| 在线看片福利| 欧美黄色一区二区| 日本视频一区二区| 亚洲精品免费观看| 免费日韩视频| 亚洲国产不卡| 国产精品91一区二区三区| 日韩理论视频| 日韩av自拍| 91亚洲人成网污www| 精品91福利视频| 欧美激情福利| 国产精品久久久久9999高清| 日韩福利视频导航| 婷婷五月色综合香五月| 日韩精品一区第一页| 99久久婷婷这里只有精品| 日韩亚洲一区在线| 日韩免费看片| 亚洲精品成人图区| 97在线精品| 日韩欧美另类一区二区| 久久国产毛片| 99精品在线观看| 成人av二区| 日韩精品一二三区| 亚洲一区二区三区四区电影| 国产精品日韩| 蜜桃视频在线观看一区| 噜噜噜躁狠狠躁狠狠精品视频| 久久婷婷亚洲| 亚洲女同中文字幕| 免费亚洲婷婷| 成人亚洲欧美| 国产精品一二| 欧美日韩国产精品一区二区亚洲| 国产精品亚洲产品| 天堂va在线高清一区| 欧美午夜不卡影院在线观看完整版免费| 日韩免费小视频| 高清av不卡| 91tv亚洲精品香蕉国产一区| а√天堂8资源在线| 免费在线小视频| 久久美女精品| 亚洲激情国产| 久久一区二区三区电影| 午夜久久99| 亚洲一级淫片| 日韩av不卡一区二区| 国产精品亚洲片在线播放| 美腿丝袜亚洲一区| 日韩国产欧美一区二区| 91成人精品| 蜜桃久久久久久久| 国产日产高清欧美一区二区三区| 国产精品99久久免费| 91亚洲国产成人久久精品| 999久久久亚洲| 中文不卡在线| 国产精品极品| 国产精品成人a在线观看| 国产精品字幕| 亚洲一级淫片| 麻豆视频观看网址久久| 亚洲www啪成人一区二区| 美女被久久久| 国产精品调教视频| 久久国产中文字幕| 老司机久久99久久精品播放免费| 日韩av三区| 国产一区二区三区精品在线观看| 欧美日韩一二三四| 四虎精品一区二区免费| 韩国一区二区三区视频| 久久精品播放| 亚洲日本三级| 9999国产精品| 综合亚洲自拍| 国产精品久久久久蜜臀| 蜜臀久久99精品久久久久久9| 国产欧美一区二区三区国产幕精品 | 日韩国产在线观看| 桃色av一区二区| 在线观看一区| 久久男人天堂| 日本va欧美va瓶| 久久国产亚洲精品| 精品国产欧美日韩一区二区三区| 久久激五月天综合精品| 久久精品午夜| 久久影院一区二区三区| 国产精品色婷婷在线观看| 日韩精品视频中文字幕| 日韩精选在线| 日韩1区2区日韩1区2区| 欧美日韩一区二区国产| 国产不卡一区|