最简单的一个接口自动化框架

这个代码是干什么的呢?
读取一个Excel中的一条数据用例,请求接口,然后返回结果并反填到excel中。过程中会生成请求回来的文本,当然还会生成一个xml文件。具体的excel文件如下:
ID  测试要点  CityName   CountryName  期望值  实际值  结果    响应时间
1  北京天气  beijing          china             Success      
2  上海天气  shanghai       china             Success      
# -*- coding: UTF-8 -*-
002from xml.dom import minidom
003import xlrd
004import openpyxl
005import requests
006import json
007import sys
008import HTMLParser
009import os
010import re
011import codecs
012import time
013import datetime
014   
015reload(sys)
016sys.setdefaultencoding('utf-8')
017   
018class OptionExcelData(object):
019    """对Excel进行操作,包括读取请求参数,和填写操作结果"""
020    def __init__(self, excelFile,excelPath=''):
021        self.excelFile = excelFile
022        self.excelPath = excelPath
023        self.caseList = []
024       
025    """
026    传入:传入用例Excel名称
027    返回:[],其中元素为{},每个{}包含行号、城市、国家和期望结果的键值对
028    """
029    def getCaseList(self,excelFile,excelPath=''):
030        readExcel = xlrd.open_workbook(fileName)                            #读取指定的Excel
031        try:
032            table = readExcel.sheet_by_index(0)                             #获取Excel的第一个sheet
033            trows = table.nrows                                             #获取Excel的行数
034            for in range(1,trows):
035                tmpdict = {}                                                #把一行记录写进一个{}
036                tmpdict['id'= n                                           #n是Excel中的第n行
037                tmpdict['CityName'= table.cell(n,2).value
038                tmpdict['CountryName'= table.cell(n,3).value
039                tmpdict['Rspect'= table.cell(n,4).value
040                self.caseList.append(tmpdict)
041        except Exception, e:
042            raise
043        finally:
044            pass
045        return self.caseList
046   
047    """
048    传入:请求指定字段结果,是否通过,响应时间
049    返回:
050    """
051    def writeCaseResult(self,resultBody,isSuccess,respTime,\\
052        excelFile,theRow,theCol=5):
053        writeExcel = openpyxl.load_workbook(excelFile)                      #加载Excel,后续写操作
054        try:
055            wtable = writeExcel.get_sheet_by_name('Sheet1')                 #获取名为Sheet1的sheet
056            wtable.cell(row=theRow+1,column=theCol+1).value = resultBody    #填写实际值
057            wtable.cell(row=theRow+1,column=theCol+2).value = isSuccess     #填写是否通过
058            wtable.cell(row=theRow+1,column=theCol+3).value = respTime      #填写响应时间
059            writeExcel.save(excelFile)
060        except Exception, e:
061            raise
062        finally:
063            pass
064           
065   
066class GetWeather(object):
067    """获取天气的http请求"""
068    def __init__(self, serviceUrl,requestBody,headers):
069        self.serviceUrl = serviceUrl
070        self.requestBody = requestBody
071        self.headers = headers
072        self.requestResult = {}
073   
074    """
075    传入:请求地址,请求体,请求头
076    返回:返回{},包含响应时间和请求结果的键值对
077    """
078    def getWeath(self,serviceUrl,requestBody,headers):
079        timebefore = time.time()                                            #获取请求开始的时间,不太严禁
080        tmp = requests.post(serviceUrl,data=requestBody,\\
081            headers=headers)
082        timeend = time.time()                                               #获取请求结束的时间
083        tmptext = tmp.text
084        self.requestResult['text'= tmptext                                #记录响应回来的内容
085        self.requestResult['time'= round(timeend - timebefore,2)          #计算响应时间
086        return self.requestResult
087   
088class XmlReader:
089    """操作XML文件"""
090    def __init__(self,testFile,testFilePath=''):
091        self.fromXml = testFile
092        self.xmlFilePath = testFilePath
093        self.resultList = []
094   
095    def writeXmlData(self,resultBody,testFile,testFilePath=''):
096        tmpXmlFile = codecs.open(testFile,'w','utf-16')                     #新建xml文件
097        tmpLogFile = codecs.open(testFile+'.log','w','utf-16')              #新建log文件
098   
099        tmp1 = re.compile(r'\\<.*?\\>')                                     #生成正则表达式:<*?>
100        tmp2 = tmp1.sub('',resultBody['text'])                              #替换相应结果中的<*?>
101        html_parser = HTMLParser.HTMLParser()
102        xmlText = html_parser.unescape(tmp2)                                #转换html编码
103   
104        try:
105            tmpXmlFile.writelines(xmlText.strip())                          #去除空行并写入xml
106            tmpLogFile.writelines('time: '+\\
107                str(resultBody['time'])+'\\r\\n')                             #把响应时间写入log
108            tmpLogFile.writelines('text: '+resultBody['text'].strip())      #把请求回来的文本写入log
109        except Exception, e:
110            raise
111        finally:
112            tmpXmlFile.close()
113            tmpLogFile.close()
114           
115    """返回一个list"""
116    def readXmlData(self,testFile,testFilePath=''):
117        tmpXmlFile = minidom.parse(testFile)
118        root = tmpXmlFile.documentElement
119        tmpValue = root.getElementsByTagName('Status')[0].\\
120        childNodes[0].data
121        return tmpValue                                                     #获取特定字段并返回结果,此处选取Status
122   
123   
124if __name__ == '__main__':
125   
126    requesturl = 'http://www.webservicex.net/globalweather.asmx/GetWeather'
127    requestHeadrs = {"Content-Type":"application/x-www-form-urlencoded"}
128    fileName = u'用例内容.xlsx'
129   
130    ed = OptionExcelData(fileName) 
131    testCaseList = ed.getCaseList(ed.excelFile)
132   
133    for caseDict in testCaseList:
134        caseId = caseDict['id']
135        cityName = caseDict['CityName']
136        countryName = caseDict['CountryName']
137        rspect = caseDict['Rspect']
138        requestBody = 'CityName='+cityName+'&CountryName='+countryName
139   
140        getWeather = GetWeather(requesturl,requestBody,requestHeadrs)
141        #获取请求结果
142        tmpString = getWeather.getWeath(getWeather.serviceUrl,\\
143            getWeather.requestBody,getWeather.headers)
144   
145        xd = XmlReader(str(caseId) + '.xml')
146        #把请求内容写入xml和log
147        xd.writeXmlData(tmpString,xd.fromXml)
148        response = xd.readXmlData(str(caseId) + '.xml')
149        respTime = tmpString['time']
150        if response == rspect:
151            theResult = 'Pass'
152        else:
153            theResult = 'False'
154   
155        ed.writeCaseResult(response,theResult,respTime,fileName,caseId)

文章来源:学什么网

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值