接口自动化(二)--操作Excel获取需要数据
这一部分的内容记述一下对Excel表格的操作,本实战中的测试用例是由Excel来管理的,因此操作Excel是重要的一部分。
再次贴出这张图,所有的测试用例都在这个sheet内,请求数据真实存放在json文件内,表格中的请求数据列放置的是json文件内字典的key值。

操作Excel主要就是取出Excel中的case(即数据),然后执行,重点是怎样取出数据,因为有些数据是不需要的,所以不能用遍历Excel的方法来取数据。
思路一:把列数作为常量,行数作为变量来取想要的数据
思路二:把Excel中不需要的列数据剪切掉,留下需要的数据,然后遍历Excel
这里使用的思路一
下面是excelColNum.py的源码(请根据需要灵活使用,模块作用参考第一篇文章):
class ExcelColNum():
case_id = 0
model = 1
case_name = 2
url = 4
header = 5
run = 6
requestMethord = 7
caseDepend = 8
depReKey = 9
depKey = 10
requestData = 11
respectResult = 12
returnData = 13
realResult = 14 #获取用例ID
def get_caseID(self):
return ExcelColNum.case_id #获取请求的url
def get_url(self):
return ExcelColNum.url #获取是否运行
def get_run(self):
return ExcelColNum.run #获取请求方式
def get_methord(self):
return ExcelColNum.requestMethord #获取请求数据
def get_requestData(self):
return ExcelColNum.requestData #或取是否携带header
def get_haeder(self):
return ExcelColNum.header #获取被依赖的caseID
def getDepCaseID(self):
return ExcelColNum.caseDepend #获取被依赖的用例的返回数据的key值
def getDepReKey(self):
return ExcelColNum.depReKey #获取依赖的需要传入值的key值
def getDepKey(self):
return ExcelColNum.depKey #获取预期结果
def getRespectResult(self):
return ExcelColNum.respectResult #获取返回数据
def getReturnResult(self):
return ExcelColNum.returnData #实际结果
def getRealResult(self):
return ExcelColNum.realResult
然后是operateExcel.py的源码:
import xlrd
from xlutils.copy import copy class operateExcel():
def __init__(self,excelPath=None,sheetName=None):
#容错处理
if excelPath:
self.excelPath = excelPath
self.sheetName = sheetName
else:
self.excelPath = "******" #Excel文件的路径
self.sheetName = "******" #sheet的名字
self.data = self.openExcel()
#打开Excel表格
def openExcel(self):
file = xlrd.open_workbook(self.excelPath)
sheet = file.sheet_by_name(self.sheetName)
return sheet #获取sheet的行数
def getSheetRow(self):
rows = self.data.nrows
return rows #获取sheet的列数
def getSheetCol(self):
cols = self.data.ncols
return cols #获取某一个单元格的内容
def getCellContent(self,rowNum,colNum):
content = self.data.cell_value(rowNum,colNum)
return content #向excel里追加写入数据
def writeValue(self,rowNum,colNum,value):
file = xlrd.open_workbook(self.excelPath)
workbook = copy(file)
sheetData = workbook.get_sheet(0)
sheetData.write(rowNum,colNum,value)
workbook.save(self.excelPath) #获取Excel中某一列的内容
def getColData(self,colNum=None):
if colNum != None:
colData = self.data.col_values(colNum)
else:
colData = self.data.col_values(0)
return colData #根据依赖的caseID找到对应的行号
def depRowNum(self,caseID):
rowNum = 0
colDatas = self.getColData()
for colData in colDatas:
if caseID in colData:
return rowNum
rowNum += 1 # 根据行号获取对应行的整行内容
def getRowData(self, rowNum):
rowData = self.data.row_values(rowNum)
return rowData #根据依赖的caseID,获取依赖case的行号,根据行号取出对应行的内容
def dependCaseData(self,caseID):
rowNum = self.depRowNum(caseID)
rowData = self.getRowData(rowNum)
return rowData
下面是get_Case的源码:
from data import operateExcel
from data import excelColNum
from data import operateJson
import json class getCaseData():
def __init__(self):
self.operateExcel = operateExcel.operateExcel()
self.excelColNum = excelColNum.ExcelColNum()
self.operateJson = operateJson.operateJson() # 获取测试用例的行数,即case的个数,即表格的行数
def getExcelRow(self):
excelRows = self.operateExcel.getSheetRow()
return excelRows #获取是否执行
def getRun_or_not(self,rowNum):
flag = None
colNum = self.excelColNum.get_run()
runOrNot = self.operateExcel.getCellContent(rowNum,colNum)
if runOrNot == "yes":
flag = True
else:
flag = False
return flag #获取是否携带header,header可以放在配置文件内
def getHeader(self,rowNum):
colNum = self.excelColNum.get_haeder()
headers = self.operateExcel.getCellContent(rowNum,colNum)
headers = json.loads(headers)
return headers #获取请求方式
def getRequestMethord(self,rowNum):
colNum = self.excelColNum.get_methord()
requestmethord = self.operateExcel.getCellContent(rowNum,colNum)
return requestmethord #获取请求的url
def getUrl(self,rowNum):
colNum = self.excelColNum.get_url()
url = self.operateExcel.getCellContent(rowNum,colNum)
return url #获取请求数据
def getRequestData(self,rowNum):
colNum = self.excelColNum.get_requestData()
reqData = self.operateExcel.getCellContent(rowNum,colNum)
if reqData == "":
return None
else:
return reqData #获取json文件内的请求数据
def getJsonData(self,rowNum):
data = self.operateJson.getJsonData(self.getRequestData(rowNum))
data = json.dumps(data)
return data #获取预期结果
def getRespectResult(self,rowNum):
colNum = self.excelColNum.getRespectResult()
resResult = self.operateExcel.getCellContent(rowNum,colNum)
if resResult == "":
return None
return resResult #写入返回数据
def wriReturn(self,rowNum,value):
colNum = self.excelColNum.getReturnResult()
self.operateExcel.writeValue(rowNum,colNum,value) #写入实际结果(pass、fail)
def wriRealResult(self,rowNum,value):
colNum = self.excelColNum.getRealResult()
self.operateExcel.writeValue(rowNum,colNum,value) # 判断是否有case依赖
def judgeCaseDep(self, rowNum):
colNum = self.excelColNum.getDepCaseID()
caseID = self.operateExcel.getCellContent(rowNum, colNum)
if caseID != "":
return caseID
else:
return None #获取Excel中被依赖返回数据中的值
def getDepReKey(self,rowNum):
colNum = self.excelColNum.getDepReKey()
reKey = self.operateExcel.getCellContent(rowNum,colNum)
if reKey == "":
return None
else:
return reKey #获取Excel中需要传入的依赖的数据
def getDependKey(self,rowNum):
colNum = self.excelColNum.getDepKey()
depkey = self.operateExcel.getCellContent(rowNum,colNum)
if depkey != "":
return depkey
else:
return None
接口自动化(二)--操作Excel获取需要数据的更多相关文章
- python接口自动化之读取excel表的数据(使用openpyxl模块)
1.安装openpyxl:pip install openpyxl 2.基础知识,直接上代码 import openpyxl #导入模块 wd2=openpyxl.load_workbook('stu ...
- 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)
前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...
- HTML5操作麦克风获取音频数据(WAV)的一些基础技能
基于HTML5的新特性,操作其实思路很简单. 首先通过navigator获取设备,然后通过设备监听语音数据,进行原始数据采集. 相关的案例比较多,最典型的就是链接:https://developer. ...
- python接口自动化21-下载excel文件(Content-Type:octets/stream)
前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-xlrd操作excel(11)
xlrd操作excel # -*- coding: utf-8 -*- # @Time : 2020/2/12 9:14 # @File : do_excel_xlrd_11.py # @Author ...
- NPOI操作excel之写入数据到excel表
在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...
- .Net实现微信公众平台开发接口(二) 之 “获取access_token”
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/ ...
- python操作excel获取内容
背景:从excel表中获取请求url.请求数据.请求类型.预期结果 因此,需要学会如何使用python从excel获取这些信息 #coding=utf-8 import xlrd #创建对象时,获取对 ...
- python接口自动化,从excel取param的内容太多,使用eval转换报错'EOL while scanning string literal
背景: 做接口自动化时,有个接口的参数内容很多,可以从excel中读取出来,但是在eval()进行转化时,就报错"'EOL while scanning string literal&quo ...
随机推荐
- 教你上传代码到码云(与github一样)
以下所有操作都在命令行进行 1 git 配置 git config --global user.name “用户名” git config --global user.email “邮箱”2 生成公钥 ...
- Model/ModelMap 和 ModelAndView 的区别使用
Model/ModelMap 和 ModelAndView 的区别使用 Model/ModelMap controller: package springmvc.controller; import ...
- 偶数求1/2+1/4+...+1/n奇数1/1+1/3+...+1/n
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n Scanner scanner = new Scanner(Sy ...
- myeclipse6.5使用tomcat7报java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory错
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFact ...
- 过滤器系列(一)—— Bloom filter
因为要做过滤器相关内容,最近读了一些过滤器方面的文章,准备从中提取主要思想写几篇博客. 作为这系列的第一篇文章,首先得讲一下过滤器是干什么用的.从历史发展来看,过滤器最早出现是作为散列表的替代品,那么 ...
- PHP:第五章——字符串的概念
<?php header("Content-Type:text/html;charset=utf-8"); //字符串概念: //1.单引号.//里面的变量不会被解释 //例 ...
- java的初始化(编程思想)
6.成员初始化 java尽量保证:所有变量在使用前都能得到恰当的初始化.对于方法的局部变量,java以编译错误的形式来贯彻这种保证. 如果类的成员变量时基本类型,那么没有初始化给默认值 在类里定义一个 ...
- 分析公司shareaholic报告:Chrome浏览器使用量居首
社交分析公司Shareaholic周四发布研究报告称,今年9月份,Chrome浏览器的使用量已经跃居行业榜首. 根据Shareaholic的数据,Chrome今年9月的使用量超过了火狐.IE和Oper ...
- Thunder7.2.13.3884 JayXon
更新日志: 更新迅雷7. 更新VipService 2.7 更新SQLite 更新zlib 不再精简msvcr71.dll.msvcp71.dll 不再精简64位BHO 破解了本地离线重命名30个字符 ...
- 本地代码同步到github
1 设置 ssh 公钥信息 首先你要确保 github 账号设置了ssh 公钥信息.如果没有的话可以按照下面的方式设置: 前往 github 网站的 account settings, 依次点击 Se ...