接口自動化(二)--操作Excel獲取需要數據
阿新 • • 發佈:2018-02-02
del tro tca request one rownum per src 自動
這一部分的內容記述一下對Excel表格的操作,本實戰中的測試用例是由Excel來管理的,因此操作Excel是重要的一部分。
再次貼出這張圖,所有的測試用例都在這個sheet內,請求數據真實存放在json文件內,表格中的請求數據列放置的是json文件內字典的key值。
操作Excel主要就是取出Excel中的case(即數據),然後執行,重點是怎樣取出數據,因為有些數據是不需要的,所以不能用遍歷Excel的方法來取數據。
思路一:把列數作為常量,行數作為變量來取想要的數據
思路二:把Excel中不需要的列數據剪切掉,留下需要的數據,然後遍歷Excel
這裏使用的思路一
下面是excelColNum.py的源碼(請根據需要靈活使用,模塊作用參考第一篇文章):
1 class ExcelColNum(): 2 case_id = 0 3 model = 1 4 case_name = 2 5 url = 4 6 header = 5 7 run = 6 8 requestMethord = 7 9 caseDepend = 8 10 depReKey = 9 11 depKey = 10 12 requestData = 11 13 respectResult = 12 14 returnData = 13 15 realResult = 14 1617 #獲取用例ID 18 def get_caseID(self): 19 return ExcelColNum.case_id 20 21 #獲取請求的url 22 def get_url(self): 23 return ExcelColNum.url 24 25 #獲取是否運行 26 def get_run(self): 27 return ExcelColNum.run 28 29 #獲取請求方式 30 def get_methord(self): 31 returnExcelColNum.requestMethord 32 33 #獲取請求數據 34 def get_requestData(self): 35 return ExcelColNum.requestData 36 37 #或取是否攜帶header 38 def get_haeder(self): 39 return ExcelColNum.header 40 41 #獲取被依賴的caseID 42 def getDepCaseID(self): 43 return ExcelColNum.caseDepend 44 45 #獲取被依賴的用例的返回數據的key值 46 def getDepReKey(self): 47 return ExcelColNum.depReKey 48 49 #獲取依賴的需要傳入值的key值 50 def getDepKey(self): 51 return ExcelColNum.depKey 52 53 #獲取預期結果 54 def getRespectResult(self): 55 return ExcelColNum.respectResult 56 57 #獲取返回數據 58 def getReturnResult(self): 59 return ExcelColNum.returnData 60 61 #實際結果 62 def getRealResult(self): 63 return ExcelColNum.realResult
然後是operateExcel.py的源碼:
1 import xlrd 2 from xlutils.copy import copy 3 4 class operateExcel(): 5 def __init__(self,excelPath=None,sheetName=None): 6 #容錯處理 7 if excelPath: 8 self.excelPath = excelPath 9 self.sheetName = sheetName 10 else: 11 self.excelPath = "******" #Excel文件的路徑 12 self.sheetName = "******" #sheet的名字 13 self.data = self.openExcel() 14 #打開Excel表格 15 def openExcel(self): 16 file = xlrd.open_workbook(self.excelPath) 17 sheet = file.sheet_by_name(self.sheetName) 18 return sheet 19 20 #獲取sheet的行數 21 def getSheetRow(self): 22 rows = self.data.nrows 23 return rows 24 25 #獲取sheet的列數 26 def getSheetCol(self): 27 cols = self.data.ncols 28 return cols 29 30 #獲取某一個單元格的內容 31 def getCellContent(self,rowNum,colNum): 32 content = self.data.cell_value(rowNum,colNum) 33 return content 34 35 #向excel裏追加寫入數據 36 def writeValue(self,rowNum,colNum,value): 37 file = xlrd.open_workbook(self.excelPath) 38 workbook = copy(file) 39 sheetData = workbook.get_sheet(0) 40 sheetData.write(rowNum,colNum,value) 41 workbook.save(self.excelPath) 42 43 #獲取Excel中某一列的內容 44 def getColData(self,colNum=None): 45 if colNum != None: 46 colData = self.data.col_values(colNum) 47 else: 48 colData = self.data.col_values(0) 49 return colData 50 51 #根據依賴的caseID找到對應的行號 52 def depRowNum(self,caseID): 53 rowNum = 0 54 colDatas = self.getColData() 55 for colData in colDatas: 56 if caseID in colData: 57 return rowNum 58 rowNum += 1 59 60 # 根據行號獲取對應行的整行內容 61 def getRowData(self, rowNum): 62 rowData = self.data.row_values(rowNum) 63 return rowData 64 65 #根據依賴的caseID,獲取依賴case的行號,根據行號取出對應行的內容 66 def dependCaseData(self,caseID): 67 rowNum = self.depRowNum(caseID) 68 rowData = self.getRowData(rowNum) 69 return rowData
下面是get_Case的源碼:
1 from data import operateExcel 2 from data import excelColNum 3 from data import operateJson 4 import json 5 6 class getCaseData(): 7 def __init__(self): 8 self.operateExcel = operateExcel.operateExcel() 9 self.excelColNum = excelColNum.ExcelColNum() 10 self.operateJson = operateJson.operateJson() 11 12 # 獲取測試用例的行數,即case的個數,即表格的行數 13 def getExcelRow(self): 14 excelRows = self.operateExcel.getSheetRow() 15 return excelRows 16 17 #獲取是否執行 18 def getRun_or_not(self,rowNum): 19 flag = None 20 colNum = self.excelColNum.get_run() 21 runOrNot = self.operateExcel.getCellContent(rowNum,colNum) 22 if runOrNot == "yes": 23 flag = True 24 else: 25 flag = False 26 return flag 27 28 #獲取是否攜帶header,header可以放在配置文件內 29 def getHeader(self,rowNum): 30 colNum = self.excelColNum.get_haeder() 31 headers = self.operateExcel.getCellContent(rowNum,colNum) 32 headers = json.loads(headers) 33 return headers 34 35 #獲取請求方式 36 def getRequestMethord(self,rowNum): 37 colNum = self.excelColNum.get_methord() 38 requestmethord = self.operateExcel.getCellContent(rowNum,colNum) 39 return requestmethord 40 41 #獲取請求的url 42 def getUrl(self,rowNum): 43 colNum = self.excelColNum.get_url() 44 url = self.operateExcel.getCellContent(rowNum,colNum) 45 return url 46 47 #獲取請求數據 48 def getRequestData(self,rowNum): 49 colNum = self.excelColNum.get_requestData() 50 reqData = self.operateExcel.getCellContent(rowNum,colNum) 51 if reqData == "": 52 return None 53 else: 54 return reqData 55 56 #獲取json文件內的請求數據 57 def getJsonData(self,rowNum): 58 data = self.operateJson.getJsonData(self.getRequestData(rowNum)) 59 data = json.dumps(data) 60 return data 61 62 #獲取預期結果 63 def getRespectResult(self,rowNum): 64 colNum = self.excelColNum.getRespectResult() 65 resResult = self.operateExcel.getCellContent(rowNum,colNum) 66 if resResult == "": 67 return None 68 return resResult 69 70 #寫入返回數據 71 def wriReturn(self,rowNum,value): 72 colNum = self.excelColNum.getReturnResult() 73 self.operateExcel.writeValue(rowNum,colNum,value) 74 75 #寫入實際結果(pass、fail) 76 def wriRealResult(self,rowNum,value): 77 colNum = self.excelColNum.getRealResult() 78 self.operateExcel.writeValue(rowNum,colNum,value) 79 80 # 判斷是否有case依賴 81 def judgeCaseDep(self, rowNum): 82 colNum = self.excelColNum.getDepCaseID() 83 caseID = self.operateExcel.getCellContent(rowNum, colNum) 84 if caseID != "": 85 return caseID 86 else: 87 return None 88 89 #獲取Excel中被依賴返回數據中的值 90 def getDepReKey(self,rowNum): 91 colNum = self.excelColNum.getDepReKey() 92 reKey = self.operateExcel.getCellContent(rowNum,colNum) 93 if reKey == "": 94 return None 95 else: 96 return reKey 97 98 #獲取Excel中需要傳入的依賴的數據 99 def getDependKey(self,rowNum): 100 colNum = self.excelColNum.getDepKey() 101 depkey = self.operateExcel.getCellContent(rowNum,colNum) 102 if depkey != "": 103 return depkey 104 else: 105 return None
接口自動化(二)--操作Excel獲取需要數據