之前采用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)

基于Python + requests 的web接口自动化测试框架的更多相关文章

  1. Python 基于python实现的http接口自动化测试框架(含源码)

    基于python实现的http+json协议接口自动化测试框架(含源码) by:授客 QQ:1033553122      欢迎加入软件性能测试交流 QQ群:7156436  由于篇幅问题,采用百度网 ...

  2. 转载:python + requests实现的接口自动化框架详细教程

    转自https://my.oschina.net/u/3041656/blog/820023 摘要: python + requests实现的接口自动化框架详细教程 前段时间由于公司测试方向的转型,由 ...

  3. python + requests实现的接口自动化框架详细教程

    前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行的接口测试,后来,组内有人讲原先web自动化的测试框架移驾成接口的自 ...

  4. python+request+HTMLTestRunner+unittest接口自动化测试框架

    转自https://my.oschina.net/u/3041656/blog/820023 正在调研使用python进行自动化测试,在网上发现一篇比较好的博文,作者使用的是python3,但目前自己 ...

  5. 使用python requests库写接口自动化测试--记录学习过程中遇到的坑(1)

    一直听说python requests库对于接口自动化测试特别合适,但由于自身代码基础薄弱,一直没有实践: 这次赶上公司项目需要,同事小伙伴们一起学习写接口自动化脚本,听起来特别给力,赶紧实践一把: ...

  6. 使用python+requests+unittest实现接口自动化测试

    这两天一直在找直接用python做接口自动化的方法,在网上也搜了一些博客参考,今天自己动手试了一下. 一.整体结构 上图是项目的目录结构,下面主要介绍下每个目录的作用. Common:公共方法:主要放 ...

  7. 基于Java+HttpClient+TestNG的接口自动化测试框架(四)-------参数存取处理

    在真正开始接口测试之前,我们需要对参数的处理进行梳理.这里所说的“参数”,既包含之前在xml中的配置(我们称之为全局参数),也包含在每一条用例中书写的param.全局参数为固定不变的,而根据接口相应获 ...

  8. 基于Java+HttpClient+TestNG的接口自动化测试框架(八)------ 针对文件的处理

    在实际的接口测试中,有时需要根据情况进行文件的上传和下载.在文件数量比较小的时候,我们当然可以直接处理(比如若干个接口都用一个文件).但是,如果我们上传的文件需要使用不同文件夹里不同的文件,而且数量又 ...

  9. 接口自动化 基于python实现的http+json协议接口自动化测试框架源码(实用改进版)

    基于python实现的http+json协议接口自动化测试框架(实用改进版)   by:授客 QQ:1033553122 欢迎加入软件性能测试交流QQ群:7156436     目录 1.      ...

随机推荐

  1. angular 自定义filter

    用modul.filter .filter("fiilterCity",function(){ return function(obj){ var newObj = []; ang ...

  2. 尚学堂Java第一课

    今天是北京尚学堂郑州分校开课的第一天,小班面授教学. 我很兴奋,是一个小白对IT大神渴求传道授业解惑的兴奋. 杨老师还是一贯耐心详细的手敲了第一堂课的完整大纲,必须给杨老师赞赞赞!!! 从幽默的制定班 ...

  3. 由CODEVS笨小猴1053引发的一些思考

    #include<cstdio> #include<cstring> ]; ]; int check(int n) { ||n==) ; ;m*m<=n;++m) ) ; ...

  4. 请为main函数提供返回值

    很多人甚至市面上的一些书籍,都使用了void main( ) ,其实这是错误的.C/C++ 中从来没有定义过void main( ).C++ 之父 Bjarne Stroustrup 在他的主页上的 ...

  5. 为linux系统实现回收站

    在linux系统中,经常采用"rm *"或"rm -r *"操作删除一下文件,但是有时某些文件并不是我们想要删除的,但是已经被删除.很多时候都是悲剧的,数据是难 ...

  6. Jenkins + Maven + Ansible + Tomcat 实现JAVA代码自动部署

    自动部署过程: jenkins从svn拉取代码,调用maven去打war包,用ansible去解压war包,最后重启tomcat. 前情回顾:在前面的文章我的环境已经有Jenkins+ansible ...

  7. TP5常用命令符操作

    ThinkPHP5常用命令符操作   1. 模块自动生成指令:   默认会读取应用目录application下面的build.php作为自动   生成的定义文件,如果你的定义文件位置不同,则需要使用 ...

  8. springmvc 导出excel

    1.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www ...

  9. Linux下Hadoop2.7.1集群环境的搭建(超详细版)

                                本文旨在提供最基本的,可以用于在生产环境进行Hadoop.HDFS分布式环境的搭建,对自己是个总结和整理,也能方便新人学习使用. 一.基础环境 ...

  10. 更快的理解js中循环嵌套

    [循环控制语句] break语句:终止本层循环,继续执行循环后面的语句:(当循环有多层时,break只会跳出一层循环) continue语句:跳过本次循环,继续执行下次循环: (对于for循环,con ...