当前位置: 首页 > news >正文

基于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)

相关文章:

  • sed命令详解及demo
  • Allegro关闭线段显示不连续效果操作指导
  • 【408篇】C语言笔记-第十五章( 考研必会的查找算法考研真题实战)
  • 【排序】详细聊聊归并排序(含非递归)
  • kafka单条消息过大导致线上OOM,运维连夜跑路了!
  • ValidateCode验证码的使用详解(初学看完都会用)
  • 肝了一周总结的SpringBoot常用注解大全,一目了然!
  • 无线电信号密钥WiFi完整版学习教程
  • Linux----paste命令使用详解
  • 【LSTM时序预测】基于灰狼算法优化长短时记忆网络GWO-LSTM实现风电功率预测附Matlab代码
  • 语音识别芯片LD3320介绍
  • Java的List之坑系列--Collections#unmodifiableList仍然可变
  • 我的一周年创作纪念日
  • idea中推送本地仓库和远程仓库后代码回退
  • Ultra-high Resolution Image Segmentation via Locality-aware Context Fusion
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【mysql】环境安装、服务启动、密码设置
  • Create React App 使用
  • CSS 三角实现
  • docker-consul
  • Linux CTF 逆向入门
  • python 学习笔记 - Queue Pipes,进程间通讯
  • tensorflow学习笔记3——MNIST应用篇
  • 关于List、List?、ListObject的区别
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 最近的计划
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • ​iOS实时查看App运行日志
  • #Linux(Source Insight安装及工程建立)
  • #NOIP 2014# day.1 T2 联合权值
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (145)光线追踪距离场柔和阴影
  • (2022 CVPR) Unbiased Teacher v2
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (C)一些题4
  • (六)Hibernate的二级缓存
  • (七)理解angular中的module和injector,即依赖注入
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三十五)大数据实战——Superset可视化平台搭建
  • (实战篇)如何缓存数据
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • *** 2003
  • .describe() python_Python-Win32com-Excel
  • .dwp和.webpart的区别
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .gitignore
  • .htaccess 强制https 单独排除某个目录
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .Net CF下精确的计时器
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .NET Core引入性能分析引导优化
  • .NET Core中的去虚