这一部分的内容记述一下对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获取需要数据的更多相关文章

  1. python接口自动化之读取excel表的数据(使用openpyxl模块)

    1.安装openpyxl:pip install openpyxl 2.基础知识,直接上代码 import openpyxl #导入模块 wd2=openpyxl.load_workbook('stu ...

  2. 记录python接口自动化测试--把操作excel文件的方法封装起来(第五目)

    前面补充了如何来操作excel文件,这次把如何获取excel文件的sheet对象.行数.单元格数据的方法进行封装,方便后面调用 handle_excel.py# coding:utf-8 import ...

  3. HTML5操作麦克风获取音频数据(WAV)的一些基础技能

    基于HTML5的新特性,操作其实思路很简单. 首先通过navigator获取设备,然后通过设备监听语音数据,进行原始数据采集. 相关的案例比较多,最典型的就是链接:https://developer. ...

  4. python接口自动化21-下载excel文件(Content-Type:octets/stream)

    前言 Content-Type类型为octets/stream,这种一般是文件类型了,比如有时候需要导出excel数据,下载excel这种场景如何用python来实现呢? 抓下载接口 1.下载的场景如 ...

  5. 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 ...

  6. NPOI操作excel之写入数据到excel表

    在上一篇<NPOI操作excel之读取excel数据>我们把excel数据写入了datatable中,本篇就讲如何把datatable数据写入excel中. using System; u ...

  7. .Net实现微信公众平台开发接口(二) 之 “获取access_token”

    access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/ ...

  8. python操作excel获取内容

    背景:从excel表中获取请求url.请求数据.请求类型.预期结果 因此,需要学会如何使用python从excel获取这些信息 #coding=utf-8 import xlrd #创建对象时,获取对 ...

  9. python接口自动化,从excel取param的内容太多,使用eval转换报错'EOL while scanning string literal

    背景: 做接口自动化时,有个接口的参数内容很多,可以从excel中读取出来,但是在eval()进行转化时,就报错"'EOL while scanning string literal&quo ...

随机推荐

  1. ffmpeg_资料_01

    1. 用ffmpeg制作推流工具,实现推流系统声音和桌面到rtmp服务器-CSDN论坛-CSDN.NET-中国最大的IT技术社区.html http://bbs.csdn.net/topics/392 ...

  2. a href 属性

    两种用法: 页面跳转时使用 url (部分浏览器会阻止新窗口弹出页面),其他情况一律遵循          ‘结构样式行为分离’ 1. url href="#"     文档顶部  ...

  3. vue/webpack的一些小技巧

    都知道我比较懒,今天给大家分享的就是如何让自己省事. 一.vue修改打包后的结构(不知道怎么描述合理,看效果图) /config/index.js 默认的: 修改的:(顺手修改了打包后的文件名) 这样 ...

  4. UVA-12166 Equilibrium Mobile(二叉树)

    题目大意:改变二叉树上的权值,使树平衡,问最少该几个值. 题目分析:不会做,查的题解.有条奇妙的性质:如果将第d层权值为w的节点为基准做改动,则整棵树的总重量为w<<d,即w*2^d.仔细 ...

  5. LeetCode 48

    这种方法首先对原数组取其转置矩阵,然后把每行的数字翻转可得到结果,如下所示(其中蓝色数字表示翻转轴): 1  2  3  1  4  7  7  4  1 4  5  6 -->  2  5   ...

  6. jackson springboot null节点忽略配置

    spring: jackson: date-format: yyyy-MM-dd HH:mm:ss default-property-inclusion: non_null spring.jackso ...

  7. 【hive】cube和rollup函数

    cube 数据立方体(Data Cube),是多维模型的一个形象的说法.(关于多维模型这里不讲述,在数据仓库设计过程中还挺重要的,有兴趣自行查阅) 立方体其本身只有三维,但多维模型不仅限于三维模型,可 ...

  8. 流程设计器jQuery + svg/vml(Demo3 - 添加流程结点)

    经过前面的准备工作,终于把设计器的主要UI界面搭建好了,接下来到添加流程结点,效果如下图 代码:GoFlow_03.zip 演示地址:Demo 微信演示公众号: 另:Silverlight版 Silv ...

  9. 在webView 中使用JS 调用 Android / IOS的函数 Function

    最近做一个项目,混合了NativeCode 和 HTML,为了便于JS 调用App的一些方法,统一封装一个Js方法,记录如下 Android 端首先要再WebView中允许JS的调用 WebView ...

  10. swift 分页视图

    var data:NSArray! var scrollView: UIScrollView! var pageCtrl: UIPageControl! override func viewDidLo ...