这一部分的内容记述一下对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. TTL的具体含义

    TTL(Time To Live)生存时间值,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去.如果在I ...

  2. 第105天:Ajax 客户端与服务器基本知识

    一.服务器 前言:通俗的讲,能够提供某种服务的机器(计算机)称为服务器 1.服务器类型 - 按服务类型可分为:文件服务器.数据库服务器.邮件服务器.Web服务器等 - 按操作系统可分为:Linux服务 ...

  3. springboot 用mybatis-generator自动生成bean和dao

    1.在pom.xml里添加maven插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifac ...

  4. fatal error: openssl/evp.h: 没有那个文件或目录

    在陆佳华<嵌入式系统软硬件协同设计实战指南 第2版>一书的第13章节 编译U-boot时会遇到2个错误.原因很简单,就从一开始的错误提示着手: fatal error: openssl/e ...

  5. idea如何热部署(转)

    IntelliJ IDEA 怎么热部署,每次修改java文件就得重启tomcat  原文链接:http://blog.csdn.net/dandandeshangni/article/details/ ...

  6. 第2本MATLAB书

    前面看的<DSP using MATLAB>后面还有两章,其内容太难了,看不下去,暂时放放: 因为工作中需要MATLAB和电磁场的相关知识,从网上找了本 初步翻了翻,里面有代码有图片,英文 ...

  7. LeetCode OJ - Best Time to Buy and Sell Stock

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/xiezhihua120/article/details/32939749 Say you have ...

  8. C#.NET股票历史数据采集,【附18年历史数据和源代码】

    阅读目录 1.数据采集需求 2.股市数据接口 3.数据库设计 4.关键信息采集 5.源代码和数据库 如果用知乎,可以关注专栏:.NET开源项目和PowerBI社区 重点重点:我没有买股票,没有买股票, ...

  9. NET简单的一个画图程序

    using System; using System.Drawing; //HttpUtility.UrlEncode /// <summary> ///Curve 的摘要说明 /// & ...

  10. CentOS 6.5系统安装编译安装MySQL 5.6详细过程

    点评:CentOS 6.5下通过yum安装的MySQL是5.1版的,比较老,那我们就通过源代码安装高版本的MySQL5.6.14.一:卸载旧版本使用下面的命令检查是否安装有MySQL Server r ...