記錄python接口自動化測試--把測試結果寫進excel文件(第九目)


python中一般使用xlrd(excel read)來讀取Excel文件,使用xlwt(excel write)來生成Excel文件(可以控制Excel中單元格的格式),需要注意的是,用xlrd讀取excel是不能對其進行操作的:xlrd.open_workbook()方法返回xlrd.Book類型,是只讀的,不能對其進行操作。而xlwt.Workbook()返回的xlwt.Workbook類型的save(filepath)方法可以保存excel文件。(參考博客:https://www.cnblogs.com/liuyang92/p/7492336.html)

因為是對已經存在的excel文件(也就是接口測試用例)進行寫操作,所以要把測試結果寫進excel文件,需要用到xlutils(依賴於xlrd和xlwt)提供復制excel文件內容和修改文件的功能。

1.先看一個demo:

# coding:utf-8

import xlrd
from xlutils.copy import copy   # 導入xlutils的copy方法

file = 'E:\InterfaceTest_Framework\excel_json_demo\demo3.xlsx'  # 文件路徑
data = xlrd.open_workbook(file)  # 定義一個excel文件的workbook對象
print('data的類型為:', type(data))
data_copy = copy(data)  # 獲取data的copy對象
print('data的copy對象類型為:', type(data_copy))
sheet_copy = data_copy.get_sheet(0)  # 從data_copy對象中獲取第一個sheet對象

sheet_copy.write(1, 11, '測試寫入內容')  # 向sheet的某個單元格寫入值
data_copy.save(file)  # 寫入完成后保存data的copy對象

下面是excel文件運行前后對比圖,可以看到在保留原文件內容不變的情況下,寫入了新的值

2.接下來,把向excel中寫入數據的操作封裝起來

在之前的操作excel文件的類中(handle_excel.py)加一個寫入數據的方法:

    # 向某個單元格寫入數據
    def write_value(self, row, col, value):
        data = xlrd.open_workbook(self.file)  # 打開文件
        data_copy = copy(data)  # 復制原文件
        sheet = data_copy.get_sheet(0)  # 取得復制文件的sheet對象
        sheet.write(row, col, value)  # 在某一單元格寫入value
        data_copy.save(self.file)  # 保存文件

 主函數調整:

# coding:utf-8

from base.run_method import RunMain
from util.handle_excel import *
from util.common import CommonUtil
import json


class RunTestCase:
    def __init__(self):
        self.Runmain = RunMain()  # 實例化調用get/post請求對象
        self.data = HandleExcel()  # 實例化操作excel文件對象
        self.common = CommonUtil() # 實例化判斷實際結果是否與預期結果一致

    def go_run(self):
        rows_count = self.data.get_rows()   # 獲取excel行數
        for i in range(1,rows_count):      # 利用行數進行迭代處理每個接口
            url = self.data.get_value(i, get_url())  # 循環獲取url的值
            # print(url)
            method = self.data.get_value(i, get_method())  # 循環獲取method的值
            data = json.loads(self.data.get_value(i, get_params()))   # 循環獲取請求參數,並將得到的數據反序列化
            expect = self.data.get_value(i, get_expectvalue())  # 循環獲取期望輸出
            # print(data)
            is_run = self.data.get_value(i, get_priority())  # 獲取是否運行,即判斷excel中priority是不是"H"
            if is_run == 'H':
                res = self.Runmain.run_main(url, method, data)  # 調用get/post主函數
                if expect in res:
                    print('測試通過')
                    self.data.write_value(i, get_resultvalue(), 'pass')  # 調用寫入數據方法,將實際結果寫進excel
                else:
                    print('測試失敗')
                    self.data.write_value(i, get_resultvalue(), 'fail')


if __name__ == '__main__':
    run = RunTestCase()
    run.go_run()

運行結果對比:

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM