zoukankan      html  css  js  c++  java
  • 基于Python + requests 的web接口自动化测试框架

    之前采用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)
  • 相关阅读:
    一段滚动文字的js (jQuery)
    VB ASP 使用 now() 时默认格式调整方法
    解决标题过长的CSS
    javascript Spline代码
    统计学中的几个重要的分布
    网页游戏开发秘笈 PDF扫描版
    网页设计与开发——HTML、CSS、JavaScript (王津涛) pdf扫描版
    网页设计与开发:HTML、CSS、JavaScript实例教程 (郑娅峰) pdf扫描版
    网页DIV+CSS布局和动画美化全程实例 (陈益材) 随书光盘
    实用掌中宝--HTML&CSS常用标签速查手册 PDF扫描版
  • 原文地址:https://www.cnblogs.com/titan5750/p/6878790.html
Copyright © 2011-2022 走看看