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.为文本文件制 ...
随机推荐
- .NET Core下的Socket示例.
About.schtml中的代码 @{ ViewData["Title"] = "About"; } <h2>@ViewData["Tit ...
- 网站性能优化实战——从12.67s到1.06s的故事
文章摘自https://juejin.im/post/5b0b7d74518825158e173a0c 作为互联网项目,最重要的便是用户体验.在举国“互联网+”的热潮中,用户至上也已经被大多数企业所接 ...
- express+gulp+gulp-nodemon+browser-sync自动刷新
express自动生成项目.不在赘述 1.在项目根目录下新建终端,依次运行如下命令 npm install gulp --save-dev npm install gulp-nodemon --sav ...
- 分析java的堆栈信息 内存模型
package com.test.learnJava; public class LineNum { public static void main(String[] args) { System.o ...
- [daily][archlinux][mdadm][RAID] 软RAID
一, 使用mdadm创建RAID 参考:https://wiki.archlinux.org/index.php/RAID 1. 安装 mdadm /home/tong [tong@TStation ...
- iOS开发使用pdf切图
把pdf资源拖到Assets.xcassets里面, 打开最右边的按钮, scales选择single scale就可以像以前一样使用了: [UIImage imageName:@"xxx ...
- 转:response.sendRedirect 使用注意事项
①sendRedirect()之后的代码是否会继续执行 ②response.sendRedirect()使用注意事项 总结: 1. 重定向之后的代码会继续执行 (重定向代码之后加上return,可让之 ...
- java JDBC (七) org.apache.commons.dbutils 查询
package cn.sasa.demo1; import java.sql.Connection; import java.sql.SQLException; import java.util.Li ...
- 【Python全栈-数据库】数据库基础
数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合.数据库中的数据按一定的数学模型组织.描述和存储,具有较小的冗余,较高的数据独立性和易扩展性, ...
- 什么是HDFS
HDFS是什么:HDFS即Hadoop分布式文件系统(Hadoop Distributed Filesystem),以流式数据访问模式来存储超大文件,运行于商用硬件集群上,是管理网络中跨多台计算机存储 ...