1. 程式人生 > >接口自動化(二)--操作Excel獲取需要數據

接口自動化(二)--操作Excel獲取需要數據

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
16
17 #獲取用例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 return
ExcelColNum.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獲取需要數據