接口自动化--操作Excel获取需要数据

Posted 卡卡罗纳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口自动化--操作Excel获取需要数据相关的知识,希望对你有一定的参考价值。

这一部分的内容记述一下对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获取需要数据的主要内容,如果未能解决你的问题,请参考以下文章

哈,又是总结内容

Java 使用POI操作EXCEL及测试框架搭建测试开发的一些想法

utp

自动化接口测试平台:从excel读取数据,传递到request请求中获取不到参数问题

python接口自动化学习笔记(封装获取测试数据方法)

python接口自动化—封装获取常量的类