最近在做接口测试时,选用了多种方案,由于本人喜欢在测试时随性发挥,jmeter这种方案直接被忽略了,那么就考虑用java或python,发现python代码及其简略,便选用了python进行接口测试,如下展示我的框架简图
下面就开始我们的工作吧
本次测试直接选用天气预报的接口试试手,参考连接https://www.sojson.com/open/api/weather/json.shtml?city=北京
https是请求的方式,www.sojson.com是后台服务器域名,/open/api/weather/json.shtml是路径名,city=北京是请求参数
首先创建好一个excel准备测试用例,excel如下
下面开始我们的python编程,本人选用python2.7
安装好xlrd,configparser,urllib2模块,可通过pip insgtall 的方式安装
我的python目录结构如下
下面附上代码
1.config.ini文件内容如下
[Excel]
filepath = D:\\TestWether.xls
2.FileUtils.py代码如下
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
import xlrd
from xlutils.copy import copy
import configparser
class FileUtil:
cfg = configparser.ConfigParser() # 创建对象
print cfg.read('config.ini') # 读取ini配置文件
filepath = cfg.get("Excel", "filepath")
#获取当前时间
def getTime(self):
return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
#读取指定单元格的内容
def read_excel(self,x, y):
# 打开文件
workbook = xlrd.open_workbook(self.filepath)
# 获取所有sheet
# print workbook.sheet_names() # [u'sheet1', u'sheet2']
# 获取sheet2
sheet_name = workbook.sheet_names()[1]
# 根据sheet索引或者名称获取sheet内容
sheet1 = workbook.sheet_by_name('Sheet1')
aa=sheet1.cell(x, y).value
if type(aa)==float:
return str(aa).encode('utf-8')
return aa
# return str(sheet1.cell(x, y).value).encode('utf-8')
def read_excel_h_w(self):
# 打开文件
workbook = xlrd.open_workbook(self.filepath)
# 获取所有sheet
# print workbook.sheet_names() # [u'sheet1', u'sheet2']
# 获取sheet2
sheet_name = workbook.sheet_names()[1]
# 根据sheet索引或者名称获取sheet内容
sheet1 = workbook.sheet_by_name('Sheet1')
# sheet的名称,行数,列数
return [sheet1.nrows, sheet1.ncols]
#写入excel
def write_excel(self,x,y,str):
workbook = xlrd.open_workbook(self.filepath)
workbooknew = copy(workbook)
ws = workbooknew.get_sheet(0)
ws.write(x, y, str)
workbooknew.save(self.filepath)
3.HttpTestUtils.py代码如下
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from __future__ import division
import json,urllib2
class HttpRequest():
def sendGetRequest(self,url,args1):
#请求网址和请求参数
url1 =url+'?'+args1
# textmod = urllib2.urlencode(textmod)
# print(textmod)
print url
#发送请求
req = urllib2.Request(url1)
#请求响应
res = urllib2.urlopen(req)
#读取响应结果
res = res.read()
#响应结果转化为json格式
s = json.loads(res);
# print json.dumps(s, ensure_ascii=False).decode('utf8').encode('gb2312')
data = json.dumps(s, ensure_ascii=False)
return data
def sendPostRequest(self, url, args,header):
# textmod = args
#请求的参数json转化为str
text = json.dumps(args)
# text= json.dumps(args, ensure_ascii=False).decode('utf8').encode('gb2312')
print(text)
#发送请求
req = urllib2.Request(url=url, data=text, headers=header)
#请求响应
res = urllib2.urlopen(req)
#读取请求响应结果
res = res.read()
return res
# print(res)
4.RunTestCae.py代码如下
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
from HttpTestUtils import HttpRequest
from FileUtils import FileUtil
p=HttpRequest()
f=FileUtil()
h=f.read_excel_h_w()[0]
w=f.read_excel_h_w()[1]
#for循环遍历excel
for a in range(1,h):
testName=f.read_excel(a,0)
host=f.read_excel(a,1)
path=f.read_excel(a,2)
httpMethod=f.read_excel(a,3)
header=f.read_excel(a,4)
args=f.read_excel(a,5)
print args
url=host+path
#执行get请求
if(httpMethod=='get'):
str1=p.sendGetRequest(url, args)
print testName+"========="+str1
starttime=f.getTime()
#写入执行时间到excel
f.write_excel(a, 6, starttime)
#写入响应结果到excel
f.write_excel(a, 7, str1)
if(httpMethod=='post'):
headers = header
str1=p.sendPostRequest(url, args, headers)
print testName+"========="+str1
starttime = f.getTime()
f.write_excel(a, 6, starttime)
f.write_excel(a, 7, str1)
执行RunTestCae.py类后控制台执行结果如下
然后再打开exacel里面会显示用例的执行时间和响应参数