基于Python + Requests 的Web接口自动化测试框架

2024-01-09

之前采用JMeter进行接口测试,每次给带新人进行培训比较麻烦,干脆用Python实现,将代码和用例分离,易于维护。

项目背景

公司的软件采用B/S架构,进行数据存储、分析、管理

工具选择

python开发的速度很快,且容易上手,丰富的第三方库,大大加快了开发速度和难度,自己开发一个简单的框架,优点是足够灵活,可以随时根据需求进行变更

框架思路(unittest)

考虑可重用性和可维护性,针对测试人员编写测试用例的方便性,采用数据驱动的设计方式,将数据分层出来,与业务逻辑剥离,测试人员就可以通过数据文件专注的写测试用例,不用关注代码编写,提高了效率

将测试的结果生成HTML格式的测试报告

模块介绍

# 封装的方法

Package

Base.py             请求(POST、GET)

Unit.py              工具类(断言、获取response数据)

# 测试报告

Report

# 接口场景用到的资源(图片、视频)

Resource

# 测试用例

Test_case

TestCase_**.py

TestCase_**.py

# unittest框架

all_test.py                 (包括生成html格式的测试报告)

# 实现在外部配置文件中配置请求接口URL、参数

pageMessage.py

代码介绍

封装的POST请求,代码如下:

def r_get(url, payload={}):
 
    """ GET 请求 url:接口,payload:参数 """
 
    response = ''
 
    try:
 
        # 根据传入的参数长度判断是否发送参数
 
        if payload.__len__() == 0:
 
            r = s.get(url, headers=heads)
 
        else:
 
            r = s.get(url, params=payload, headers=heads)
 
        response = json.loads(r.text)
 
    except Exception as err:
 
        print err
 
    return response

封装的GET请求,代码如下:

def r_post(url, payload={}, tp=''):
 
    """ POST 请求 url:接口,payload:参数 ,tp:类型"""
 
    try:
 
        # 根据传入的参数长度判断是否发送参数
 
        if payload.__len__() == 0:
 
            r = s.post(url, headers=heads)
 
        else:
 
            # 根据传入的参数类型判断是否发送json格式的
 
            if tp == 'json':  # json数据
 
                r = s.post(url, data=json.dumps(payload), headers=heads)
 
            else:
 
                r = s.post(url, data=payload, headers=heads)
 
        response = json.loads(r.text)
 
    except Exception as err:
 
        print err
 
    return response

获取response响应数据,代码如下:

def get_message(text, key):
 
    """ 获取返回报文的数据 text:报文内容,key: 获取参数关键字 """
 
    value = ''
 
    try:
 
        data = text['data']
 
        # print '报文格式:', type(data)
 
        if type(data) == list:
 
            da = data[0]      # 报文格式
 
            value = da[key]
 
        else:
 
            value = data[key]
 
        value = str(value)
 
        print 'Message: ' + key + '=' + value
 
    except Exception as err:
 
        print "Error:", (err)
 
    return value

断言,代码如下:

def assert_case(url, text, cod, mes):
 
    """ 断言,判断 code 和 message """
 
    code, message = '', ''
 
    try:
 
        code = text['code']
 
        message = text['message']
 
        assert_that(str(cod)).is_equal_to(str(code))
 
        assert_that(str(mes)).is_equal_to(str(message))
 
    except Exception, e:
 
        print url + ' code: ' + str(code) + ' message:' + str(message) + ' ' + str(e)

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【 软件测试 】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 有需要的小伙伴可以点击下方小卡片领取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Python + Requests 的Web接口自动化测试框架 的相关文章

随机推荐