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.为文本文件制 ...
随机推荐
- db2 reorg到底需要多少表空间(转)
脱机reorg需要一定的空间,这个空间与目标所在的数据表空间.索引表空间.以及临时表空间均有关,各空间需求的大小与表和索引所占用的数据页和索引页相关. (1)对表执行reorg操作如:db2 reor ...
- linux使用rz、sz快速上传、下载文件
平时都使用ftp工具进行文件的上传下载操作,针对于小文件的简单传输来说,有下面好的方法: 首先安装rz.sz工具: #yum install lrzsz 上传文件:rz 下载文件:sz 上传文件在sh ...
- int 4 bytes
http://waynewhitty.ie/blog-post.php?id=19 MySQL - INT(11) vs BIGINT(11) vs TINYINT(11) This seems to ...
- 读书笔记-iOS核心动画高级技巧
如果不使用+imageNamed:,那么把整张图片绘制到CGContext可能是最佳的方式了. 这里我们利用了CALayer的KVC来存储和检索任意的值,将图层和索引打标签. 使用KVC打标签
- 2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算
2017-2018-2 20165225『Java程序设计』课程 结对编程练习_四则运算 需求分析: 支持整数,可进行多运算符运算,有优先级. 设计思路: 在有括号的情况下,先计算得出括号中的结果,如 ...
- Python+Flash+NodeJS 接口自动化平台
一.前端安装步骤# manager-web(1)下载项目 git clone https://github.com/t880216t/manager-web.git (2) 安装依赖 cnpm ins ...
- 【PyQt5-Qt Designer】QSpinBox-微调框
QSpinBox-微调框 QSpinBox类提供了一个微调框小部件. QSpinBox被设计为处理整数和离散值集合(例如,月份名称):使用QDoubleSpinBox 可以作为浮点数的调整. QSpi ...
- 浅谈Trie树
Trie树,也叫字典树.顾名思义,它就是一个字典 字典是干什么的?查找单词!(英文字典哦) 个人认为字典树这个名字起得特别好,因为它真的跟字典特别像,一会r你就知道了. 注:trie的中文翻译就是单词 ...
- Loadrunner回放脚本时报错Action.c(41): Error -27979: Requested form not found [MsgId: MERR-27979]
解决方法 打开录制选项配置对话框进行设置,在“Recording Options”的“Internet Protocol”选项里的“Recording”中选择“Recording Level”为“HT ...
- 预见2019吴晓波年终秀演讲PPT整理
在2018年倒数的第二天12月30日晚上7点在广东珠海横琴拉开帷幕,吴晓波以一场“预见2019”的年终盛典,和大家一起回望即将告别的跌宕一年,细数过去的焦虑和改变,瞭望未来的激越和走向.下面我们一起来 ...