电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于Python的接口自動化讀寫excel文件的方法

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

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

一、xlrd、xlwt以及xlutils安裝

1.使用pip安裝

pip install xlrdpip install xlwtpip install xlutils

2.在PyCharm中安裝

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

基于Python的接口自動化讀寫excel文件的方法

二、xlrd操作excel文件的數據讀取

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

sheet1:

基于Python的接口自動化讀寫excel文件的方法

sheet2:

基于Python的接口自動化讀寫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下標獲取,第一個sheet下標為0sheet_name2 = file.sheet_by_index(0).name # 通過sheet索引獲取sheet名print(all_sheet)print(sheet_name1)print(sheet_name2)-----------------------------------------# 返回結果[’員工信息表’, ’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)------------------------------------# 返回結果<xlrd.sheet.Sheet object at 0x0000000002AA09B0><xlrd.sheet.Sheet object at 0x0000000002AA0978>

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

代碼示例:

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

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

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

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

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

讀取單元格日期數據為浮點數的處理方式:

代碼如下:

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) # 獲取第二行數據,返回的是列表ncols_data = sheet.col_values(0) # 獲取第一列數據,返回的是列表cell = sheet.cell(1,2) # 獲取單元格數據,如第二行,第三列數據,返回的是浮點數data_value = xlrd.xldate_as_tuple(sheet.cell_value(1,2) ,file.datemode) # xldate_as_tuple()方法得到日期數據年月日時分秒的值并返回為元組datatime2 = date(*data_value[:3]).strftime(’%Y/%m/%d’) # 截取元組中的前三位,即年月日的值傳給data,并進行時間格式化 print(cell)print(data_value)print(datatime2) -----------------------# 返回結果xldate:32883.0(1990, 1, 10, 0, 0, 0)1990/01/10

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

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文件寫入數據

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

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

 運行完成后會在該py文件的同級目錄下生成一個book.xlsx的excel文件,并新增了api_test的sheet表名,第一行第一列寫入數據:test

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

代碼示例:

import xlwtimport datetimeworkbook = xlwt.Workbook(encoding = ’utf-8’) # 創建工作簿sheet = workbook.add_sheet(’api_test’) # 添加一個sheetdata = sheet.write(4,0,’test’) sheet.col(0).width = 5000 # 設置單元格寬度 style = xlwt.XFStyle() # 初始化表格樣式style.num_format_str = ’M/D/YY’ # 設置時間格式,如:M/D/YYsheet.write(5, 1, datetime.datetime.now(), style) # 寫入時間格式數據 # 合并多列和和并多行# 表示合并的行數是:按行索引,從0行到第0行,按列索引從0列到第3列,合并后并寫入數據:test1sheet.write_merge(0, 0, 0, 3, ’test1’)# 表示合并的行數是:按行索引,從1行到第2行,按列索引從0列到第3列,合并后并寫入數據: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中

 運行后輸出excel效果如下:

基于Python的接口自動化讀寫excel文件的方法

四、xlutils操作excel文件

(1)拷貝excel表格

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

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

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

(2)修改excel文件內容

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

示例:

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

 運行后book.xlsx表會修改更新

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

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

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

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) # 獲取標題行的數據 for i in range(1, sh.nrows): # 跳過標題行,從第二行開始獲取數據 col_datas = dict(zip(header, sh.row_values(i))) # 將每一行的數據,組裝成字典 data_list.append(col_datas) # 將字典添加到列表中 ,列表嵌套字典,每個元素就是一個字典 return data_list if __name__ == ’__main__’: Readexcel()

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

實例化運行:

data_list = Readexcel().excel_data_list(’excel_test.xlsx’,’api測試用例’) print(data_list)-----------------------# 返回結果[ {’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’: ’分頁查詢視頻安防設備列表’, ’files’: ’’}, {’module’: ’平臺管理’, ’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’: ’應用管理-單個應用系統添加’, ’files’: ’’}, {’module’: ’平臺管理’, ’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’: ’應用管理-修改應用appId’, ’files’: ’’}, {’module’: ’平臺管理’, ’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’: ’設備分類-分頁獲取設備類型’, ’files’: ’’}]

 封裝向excel寫入數據的類,代碼示例:

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: 實際結果 :param test_res: 測試結果 :pass/failed :param sheet_name:指定的sheet表索引 :return: ’’’ old_workbook = open_workbook(filename) # 將已存在的excel拷貝進新的excel new_workbook = copy(old_workbook) # 獲取sheet new_worksheet = new_workbook.get_sheet(sheet_name) # 第n個sheet,0表示第一個sheet # 寫入數據 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操作的封裝,后續接口測試數據的讀取和寫入就依靠這兩個類了。

到此這篇關于基于Python的接口自動化讀寫excel文件的文章就介紹到這了,更多相關Python接口自動化內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: python
相關文章:
主站蜘蛛池模板: 杰恒蠕动泵-蠕动泵专业厂家-19年专注蠕动泵 | 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | 济南品牌设计-济南品牌策划-即合品牌策划设计-山东即合官网 | 天津力值检测-天津管道检测-天津天诚工程检测技术有限公司 | 连续油炸机,全自动油炸机,花生米油炸机-烟台茂源食品机械制造有限公司 | 圆窗水平仪|伊莉莎冈特elesa+ganter | 天津次氯酸钠酸钙溶液-天津氢氧化钠厂家-天津市辅仁化工有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 华中线缆有限公司-电缆厂|电缆厂家|电线电缆厂家 | 卸料器-卸灰阀-卸料阀-瑞安市天蓝环保设备有限公司 | 空气弹簧|橡胶气囊|橡胶空气弹簧-上海松夏减震器有限公司 | 济南玻璃安装_济南玻璃门_济南感应门_济南玻璃隔断_济南玻璃门维修_济南镜片安装_济南肯德基门_济南高隔间-济南凯轩鹏宇玻璃有限公司 | 欧景装饰设计工程有限公司-无锡欧景装饰官网| 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 高空重型升降平台_高空液压举升平台_高空作业平台_移动式升降机-河南华鹰机械设备有限公司 | 齿轮减速机电机一体机_齿轮减速箱加电机一体化-德国BOSERL蜗轮蜗杆减速机电机生产厂家 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 郑州大巴车出租|中巴车租赁|旅游大巴租车|包车|郑州旅游大巴车租赁有限公司 | 披萨石_披萨盘_电器家电隔热绵加工定制_佛山市南海区西樵南方综合保温材料厂 | 河南生物显微镜,全自动冰冻切片机-河南荣程联合科技有限公司 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 百度关键词优化_网站优化_SEO价格 - 云无限好排名 | 成都顶呱呱信息技术有限公司-贷款_个人贷款_银行贷款在线申请 - 成都贷款公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 北京公司注册_代理记账_代办商标注册工商执照-企力宝 | 河北中仪伟创试验仪器有限公司是专业生产沥青,土工,水泥,混凝土等试验仪器的厂家,咨询电话:13373070969 | 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 台湾Apex减速机_APEX行星减速机_台湾精锐减速机厂家代理【现货】-杭州摩森机电 | 北京律师事务所_房屋拆迁律师_24小时免费法律咨询_云合专业律师网 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂| 深圳活动策划公司|庆典策划|专业公关活动策划|深圳艺典文化传媒 重庆中专|职高|技校招生-重庆中专招生网 | 打包箱房_集成房屋-山东佳一集成房屋有限公司 | 宜兴紫砂壶知识分享 - 宜兴壶人 医用空气消毒机-医用管路消毒机-工作服消毒柜-成都三康王 | 污泥烘干机-低温干化机-工业污泥烘干设备厂家-焦作市真节能环保设备科技有限公司 | 生产加气砖设备厂家很多,杜甫机械加气砖设备价格公道 | loft装修,上海嘉定酒店式公寓装修公司—曼城装饰 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 智能垃圾箱|垃圾房|垃圾分类亭|垃圾分类箱专业生产厂家定做-宿迁市传宇环保设备有限公司 | 北京网站建设-企业网站建设-建站公司-做网站-北京良言多米网络公司 |