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

lileilei · 2017年08月03日 · 最后由 joker 回复于 2017年12月08日 · 550 次阅读

背景

学习一段时间的 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 回复

感谢建议

好难,看不明白,😳

AWSL 回复

不难吧

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

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

18楼 已删除
小哆啦 回复

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

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 06:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 04:08
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册