接口测试 python+requests 实现的自动化接口测试框架。

lileilei · August 03, 2017 · Last by joker replied at December 08, 2017 · 6823 hits

背景

学习一段时间的python3了,自己感觉还算可以吧 虽然代码有些烂,但是感觉还是能够做出来东西的,天天在论坛看东西,学习别人的,决定自己实战一把。决定用python来实现一个简单的接口测试的工具,算是小框架吧,自己感觉有点low。不过还是开源了出来,请大家拍砖。废话不多说上干货。

实现如下

利用python3+requests实现基于http请求json格式的接口。用例管理才用Excel来处理,配置文件通过yaml文件来管理。对requests的库进行简单的封装。然后通过python来组织调用这些文件来处理生成测试报告,测试报告支持html 和excel,这里没有利用unnitest模块。这里的断言才用了自己封装的形式。代码实现分析如下:

def assert_in(asserqiwang,fanhuijson):
if len(asserqiwang.split('=')) > 1:
data = asserqiwang.split('&')
result = dict([(item.split('=')) for item in data])
value1=([(int(fanhuijson[key])) for key in result.keys()])
value2=([(int(value)) for value in result.values()])
if value1==value2:
return 'pass'
else:
return 'fail'
else:
raise ('请填写期望值')

这里主要利用的是字符串的分割,字符串转换字典,字典之间取值比较,可能写的比较low。

针对requests的封装,这里只做简单的封装。

class reques():
def __init__(self):
self.headers = {"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:51.0) Gecko/20100101 Firefox/51.0"}
def get(self, url):#get消息
try:
r = requests.get(url, headers=self.headers)
r.encoding = 'UTF-8'
json_response = json.loads(r.text)
return json_response
except Exception as e:
print('get请求出错,出错原因:%s'%e)
return {}
def post(self, url, params):#post消息
data = json.dumps(params)
try:
r =requests.post(url,params=params,headers=self.headers)
json_response = json.loads(r.text)
return json_response
except Exception as e:
print('post请求出错,原因:%s'%e)
def delfile(self,url,params):#删除的请求
try:
del_word=requests.delete(url,params,headers=self.headers)
json_response=json.loads(del_word.text)
return json_response
except Exception as e:
print('del请求出错,原因:%s' % e)
return {}

def putfile(self,url,params):#put请求
try:
data=json.dumps(params)
me=requests.put(url,data)
json_response=json.loads(me.text)
return json_response
except Exception as e:
print('put请求出错,原因:%s'%e)
return json_response

这里呢 主要是基于requests的模块,然后对其进行简单的封装,形成一个简单的封装模块。

后面呢,我有对这个进行二次封装,是指更加能够符合后面调用的简便化

class TestApi(object):
def __init__(self,url,key,connent,fangshi):
self.url=url
self.key=key
self.connent=connent
self.fangshi=fangshi
def testapi(self):
global response
if self.fangshi=='POST':
self.parem = {'key': self.key, 'info': self.connent}
response=reques.post(self.url,self.parem)
elif self.fangshi=="GET":
self.parem = {'key': self.key, 'info': self.connent}
response = reques.post(self.url, self.parem)
return response
def getcode(self):
code=self.testapi()['code']
return code
def getJson(self):
json_data = self.testapi()
return json_data

到这里里面的主要逻辑就已经完成工了,这里呢 我的测试报告模块,我进行了单独的封装。

给大家展示下最后的效果图

项目目录展示

测试报告展示

开源地址: https://github.com/liwanlei/jiekou-python3

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 18 条回复 时间 点赞

学习了

不管怎么样,自己动手开始做,还是很不错的

问一个问题,楼主为啥要对requests进行封装呢,直接用不可以吗

dabao 回复

用起来方便。顺手,看个人习惯。我一般习惯封装后用

lileilei 回复

OK 感谢回答

感谢楼主

楼主的cookie信息如何处理的呢

self.parem = {'key': self.key, 'info': self.connent}这样写对于参数多的接口不灵活,不如拼接一个dict,可以填各种参数,类似这样:self.parem = dict(zip(key,value)),一点建议😅 😅

mark,感谢分享

依旧 回复

好的,我就是开始写的过程中没有考虑那么多,侯秀优化中可以修改

_Long 回复

目前暂时没有考虑到cookie的信息,第一版 实现功能为主

用一行代码能解决的问题,被你写成了这么多行....

requests.request(method, url, **kwargs).json()
jacexh 回复

感谢建议

好难,看不明白,😳

张全蛋 回复

不难吧

下了源码,在Interface中testFengzhuang里面对接口的封装表示不理解

headers 中的参数是什么意思,能起到什么作用,哪位大神可以回答一下

18Floor has been deleted
cary 回复

http消息传递,包括message-header和message-body两部分。

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 13 Dec 14:44
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up