python 读取excel数据并将测试结果填入Excel
python 读取excel数据并将测试结果填入Excel
读取一个Excel中的一条数据用例,请求接口,然后返回结果并反填到excel中。过程中会生成请求回来的文本,当然还会生成一个xml文件。具体的excel文件如下:

代码如下:
# -*- coding: UTF-8 -*-
from xml.dom import minidom
import xlrd
import openpyxl
import requests
import json
import sys
import HTMLParser
import os
import re
import codecs
import time
import datetime reload(sys)
sys.setdefaultencoding('utf-8') class OptionExcelData(object):
"""对Excel进行操作,包括读取请求参数,和填写操作结果"""
def __init__(self, excelFile,excelPath=''):
self.excelFile = excelFile
self.excelPath = excelPath
self.caseList = [] """
传入:传入用例Excel名称
返回:[],其中元素为{},每个{}包含行号、城市、国家和期望结果的键值对
"""
def getCaseList(self,excelFile,excelPath=''):
readExcel = xlrd.open_workbook(fileName) #读取指定的Excel
try:
table = readExcel.sheet_by_index(0) #获取Excel的第一个sheet
trows = table.nrows #获取Excel的行数
for n in range(1,trows):
tmpdict = {} #把一行记录写进一个{}
tmpdict['id'] = n #n是Excel中的第n行
tmpdict['CityName'] = table.cell(n,2).value
tmpdict['CountryName'] = table.cell(n,3).value
tmpdict['Rspect'] = table.cell(n,4).value
self.caseList.append(tmpdict)
except Exception, e:
raise
finally:
pass
return self.caseList """
传入:请求指定字段结果,是否通过,响应时间
返回:
"""
def writeCaseResult(self,resultBody,isSuccess,respTime,\
excelFile,theRow,theCol=5):
writeExcel = openpyxl.load_workbook(excelFile) #加载Excel,后续写操作
try:
wtable = writeExcel.get_sheet_by_name('Sheet1') #获取名为Sheet1的sheet
wtable.cell(row=theRow+1,column=theCol+1).value = resultBody #填写实际值
wtable.cell(row=theRow+1,column=theCol+2).value = isSuccess #填写是否通过
wtable.cell(row=theRow+1,column=theCol+3).value = respTime #填写响应时间
writeExcel.save(excelFile)
except Exception, e:
raise
finally:
pass class GetWeather(object):
"""获取天气的http请求"""
def __init__(self, serviceUrl,requestBody,headers):
self.serviceUrl = serviceUrl
self.requestBody = requestBody
self.headers = headers
self.requestResult = {} """
传入:请求地址,请求体,请求头
返回:返回{},包含响应时间和请求结果的键值对
"""
def getWeath(self,serviceUrl,requestBody,headers):
timebefore = time.time() #获取请求开始的时间,不太严禁
tmp = requests.post(serviceUrl,data=requestBody,\
headers=headers)
timeend = time.time() #获取请求结束的时间
tmptext = tmp.text
self.requestResult['text'] = tmptext #记录响应回来的内容
self.requestResult['time'] = round(timeend - timebefore,2) #计算响应时间
return self.requestResult class XmlReader:
"""操作XML文件"""
def __init__(self,testFile,testFilePath=''):
self.fromXml = testFile
self.xmlFilePath = testFilePath
self.resultList = [] def writeXmlData(self,resultBody,testFile,testFilePath=''):
tmpXmlFile = codecs.open(testFile,'w','utf-16') #新建xml文件
tmpLogFile = codecs.open(testFile+'.log','w','utf-16') #新建log文件 tmp1 = re.compile(r'\<.*?\>') #生成正则表达式:<*?>
tmp2 = tmp1.sub('',resultBody['text']) #替换相应结果中的<*?>
html_parser = HTMLParser.HTMLParser()
xmlText = html_parser.unescape(tmp2) #转换html编码 try:
tmpXmlFile.writelines(xmlText.strip()) #去除空行并写入xml
tmpLogFile.writelines('time: '+\
str(resultBody['time'])+'\r\n') #把响应时间写入log
tmpLogFile.writelines('text: '+resultBody['text'].strip())#把请求回来的文本写入log
except Exception, e:
raise
finally:
tmpXmlFile.close()
tmpLogFile.close() """返回一个list"""
def readXmlData(self,testFile,testFilePath=''):
tmpXmlFile = minidom.parse(testFile)
root = tmpXmlFile.documentElement
tmpValue = root.getElementsByTagName('Status')[0].\
childNodes[0].data
return tmpValue #获取特定字段并返回结果,此处选取Status if __name__ == '__main__': requesturl = 'http://www.webservicex.net/globalweather.asmx/GetWeather'
requestHeadrs = {"Content-Type":"application/x-www-form-urlencoded"}
fileName = u'用例内容.xlsx' ed = OptionExcelData(fileName)
testCaseList = ed.getCaseList(ed.excelFile) for caseDict in testCaseList:
caseId = caseDict['id']
cityName = caseDict['CityName']
countryName = caseDict['CountryName']
rspect = caseDict['Rspect']
requestBody = 'CityName='+cityName+'&CountryName='+countryName getWeather = GetWeather(requesturl,requestBody,requestHeadrs)
#获取请求结果
tmpString = getWeather.getWeath(getWeather.serviceUrl,\
getWeather.requestBody,getWeather.headers) xd = XmlReader(str(caseId) + '.xml')
#把请求内容写入xml和log
xd.writeXmlData(tmpString,xd.fromXml)
response = xd.readXmlData(str(caseId) + '.xml')
respTime = tmpString['time']
if response == rspect:
theResult = 'Pass'
else:
theResult = 'False'
ed.writeCaseResult(response,theResult,respTime,fileName,caseId)
原文地址https://blog.csdn.net/cakushin7433/article/details/52929042
python 读取excel数据并将测试结果填入Excel的更多相关文章
- Windows下Python读取GRIB数据
之前写了一篇<基于Python的GRIB数据可视化>的文章,好多博友在评论里问我Windows系统下如何读取GRIB数据,在这里我做一下说明. 一.在Windows下Python为什么无法 ...
- Python读取JSON数据,并解决字符集不匹配问题
今天来谈一谈Python解析JSON数据,并写入到本地文件的一个小例子. – 思路如下 从一个返回JSON天气数据的网站获取到目标JSON数据串 使用Python解析出需要的部分 写入到本地文件,供其 ...
- 利用Python读取外部数据文件
不论是数据分析,数据可视化,还是数据挖掘,一切的一切全都是以数据作为最基础的元素.利用Python进行数据分析,同样最重要的一步就是如何将数据导入到Python中,然后才可以实现后面的数据分析.数 ...
- python——读取MATLAB数据文件 *.mat
鉴于以后的目标主要是利用现有的Matlab数据(.mat或者.txt),主要考虑python导入Matlab数据的问题.以下代码可以解决python读取.mat文件的问题.主要使用sicpy.io即可 ...
- python 读取二进制数据到可变缓冲区中
想直接读取二进制数据到一个可变缓冲区中,而不需要做任何的中间复制操作.或者你想原地修改数据并将它写回到一个文件中去. 为了读取数据到一个可变数组中,使用文件对象的readinto() 方法.比如 im ...
- Python读取文件数据
1题目要求: 文本文件有这些数据,需要的只有其中的5个属性,如下颜色标记 像以下的数据达到75万组: 1product/productId: B0000UIXZ4 2product/title: Ti ...
- python 读取SQLServer数据插入到MongoDB数据库中
# -*- coding: utf-8 -*-import pyodbcimport osimport csvimport pymongofrom pymongo import ASCENDING, ...
- 利用Python读取json数据并求数据平均值
要做的事情:一共十二个月的json数据(即12个json文件),json数据的一个单元如下所示.读取这些数据,并求取各个(100多个)城市年.季度平均值. { "time_point&quo ...
- python读取文本文件数据
本文要点刚要: (一)读文本文件格式的数据函数:read_csv,read_table 1.读不同分隔符的文本文件,用参数sep 2.读无字段名(表头)的文本文件 ,用参数names 3.为文本文件制 ...
随机推荐
- 转载:mybatis踩坑之——foreach循环嵌套if判断
转载自:作者:超人有点忙链接:https://www.jianshu.com/p/1ee41604b5da來源:简书 今天在修改别人的代码bug时,有一个需求是在做导出excel功能时,mybatis ...
- Missing artifact com.h2database:h2:jar:1.4.197
之前OK的项目再次打开pom上报错: 一起出现的现象: maven库中这个包和H2数据库的包每次项目右键→maven→update project都会产生.lastupdate文件.原来是以前从mav ...
- Java的各种打包方式
JAR (Java Archive file) 包含内容:class.properties文件,是文件封装的最小单元:包含Java类的普通库.资源(resources).辅助文件(auxiliary ...
- ad 层次绘图遇到的元件堆积问题
元器件复用一般我们使用 reapeat 来复用 总线形式引出各个引脚,有时候我们也可以通过简单的复制实现.但是注意上图 原理图作为一个元件使用,他和单个元件一样必须有唯一ID,名字,不然也会出现冲突, ...
- 快速排序中的partition.
经典快速排序中的partition, 将最后一个元素作为划分点. 维护两个区域. <= x 的, >x 的区域. 划分过程中还有个待定的区域. [L,less] 区域小于x, [less+ ...
- [No000010C]Git5/9-远程仓库
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Gi ...
- angular ajax请求 结果显示显示两次的问题
angular 项目中,由于用到ajax 请求,结果显示如下情况 同样的接口,显示两次,其中第一次请求情况为 request method 显示为opttions 第二次的情况是 为啥会出现如此的情况 ...
- Spring Boot引起的“堆外内存泄漏”排查及经验总结
小结: 检索词:C++内存分配器.jvm内存模型.gdb.内存泄露 https://tech.meituan.com/2019/01/03/spring-boot-native-memory-leak ...
- hide server info
<?php /*wamp64\bin\apache\apache2.4.18\confhttpd.conf ServerSignature On ServerTokens Full Serve ...
- [daily][mirror][daemonlogger][tc] 我想把一个网卡(port A)的流量,镜像到虚拟机的一个网卡(port VA)上去
iptables tee 模块 https://blog.gnuers.org/?p=740 http://blog.csdn.net/wesleyflagon/article/details/385 ...