基于Python接口自动化测试框架(初级篇)附源码

这篇具有很好参考价值的文章主要介绍了基于Python接口自动化测试框架(初级篇)附源码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

引言

框架设计思路

框架结构

运行程序

总结

总结:

 

引言

  很多人都知道,目前市场上很多自动化测试工具,比如:Jmeter,Postman,TestLink等,还有一些自动化测试平台,那为啥还要开发接口自动化测试框架呢?
相同之处就不说了,先说一下工具的局限性:

1.测试数据不可控:

     接口虽然是对业务逻辑、程序代码的测试,而实际上是对数据的测试,调用接口输入一批数据,通过断言代码验证接口返回的数据,整个过程围绕数据测试。
    如果返回的数据不是固定的,是变化的,那么断言失败,就无法知道是接口程序错误引起的,还是数据变化引起的,所以就需要进行测试数据初始化。
    接口工具没有具备数据初始化的功能,从而无法真正做到接口自动化测试。

举个例子来帮助理解:

     比如你要测试一个查询接口,在没有初始化测试数据的情况下,你入参是:id = 1,断言是: assert name = ‘测试’, 这个断言是你预先知道接口会返回什么。调用接口时候,接口返回结果是name = ‘测试’,断言成功,因为你知道数据库有一条id=1的数据。

     哪天这条id=1的数据被人删除,但是你维护的接口测试框架还在跑,并没有更新测试数据,结果断言失败,你上去debug,最后发现是测试数据的问题,这个过程是费时又费劲的,

如果做了测试数据初始化的功能,完全是可以避免的。

     因为入参和出参都是固定的,是按自己需要初始化好的,不用担心数据变化引发断言失败,那么只关心接口程序代码的问题了。

2.无法测试加密接口

    公司项目中,大部分接口是不供外部调用,会使用用户认证、签名、加密等手段,提供接口的安全性。而一般的测试工具无法做到模拟和生成这些加密算法。

3.扩展能力不足

    工具始终是工具,有一定的局限性,无法生成自定义测试报告,无法定制化发送邮件,持续集成和定时任务。

4.对业务的支持程度

    工具对业务支持程序相对比较低,无法根据不同业务定制化开发,而自动化测试框架可以做到这点,对业务支持比较灵活。

框架设计思路

1.大致处理流程:

 

2.接口自动化测试框架处理过程:
  • 首先编写一份测试数据初始化的脚本,维护一批测试数据到数据库,并且每次初始化前,清空原来的数据,这样保证数据是最新和唯一的(避免重复)。
  • 调用被测系统的接口,传入参数,这个请求参数是字典,并且数据与数据库数据(数据是初始化时插入)中一致。
  • 系统接口会根据入参,向测试数据库查询。
  • 查询结果组装成一定格式(dict、json)的数据,返回给测试框架。
  • 测试框架断言接口返回的数据,并生成测试结果(测试报告)。

框架结构  

基于Python接口自动化测试框架(初级篇)附源码

 

框架介绍:

各个目录的作用:

  1. common/: 报告、日志等公共模块存放文件夹
  2. config/: 文件路径、配置信息存放
  3. db_init/: 测试数据初始化处理程序
  4. logs/: 生成日志文件
  5. pies/: 饼图存放
  6. report/: 测试报告存放
  7. testcase/: 用于编写测试用例
  8. run_main.py 执行测试集的主程序

主程序运行文件run_main.py:  

# -*- coding: utf-8 -*-

'''

@author: liudinglong

@software: pycharm

@file:  run_main.py

@time: 2020/2/23 0023 13:46

'''

import time ,sys

# 引用模块路径

sys.path.append('./testcase')

sys.path.append('./db_fixture')

from common.HTMLTestRunner3 import HTMLTestRunner

from unittest import defaultTestLoader

from db_init import data_init

# 指定测试用例为当前文件夹下的 interface 目录

test_dir = './testcase'

# 自动获取interface 目录下的测试用例

testsuit = defaultTestLoader.discover(test_dir,pattern='*test.py')

if __name__ == '__main__':

    # 初始化接口测试数据

    data_init.init_data()

    # 获取当前时间

    now = time.strftime("%Y-%m-%d %H_%M_%S")

    # 定制报告名称

    filename = './report/' + now + '_result.html'

    # 向报告写入测试结果数据

    fp = open(filename, 'wb')

    runner = HTMLTestRunner(stream=fp,

                            title='接口自动化测试报告',

                            description='运行环境:环境:windows 10 浏览器:chrome 语言: Python3')

    # 运行测试集

    runner.run(testsuit)

    # 关闭报告文件

    fp.close()

测试数据初始化data_init.py:

# -*- coding: utf-8 -*-

'''

@author: liudinglong

@software: pycharm

@file:  data_init.py

@time: 2020/2/23 0023 13:37

'''

import sys, time,datetime

sys.path.append('../db_init')

try:

    from mysql_conn import DB

except ImportError:

    from .mysql_conn import DB

# 定义过去时间,time.localtime(time.time())格式化时间戳为本地时间

past_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()-100000))

# 定义将来时间

future_time = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()+10000))

# 获取当前时间

now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')

# create data

datas = {

    'django_web_event':[

        {'id':1,'name':'红米Pro发布会','`limit`':2000,'status':1,'address':'北京会展中心','start_time':future_time},

        {'id':2,'name':'可参加人数为0','`limit`':0,'status':1,'address':'北京会展中心','start_time':future_time},

        {'id':3,'name':'当前状态为0关闭','`limit`':2000,'status':0,'address':'北京会展中心','start_time':future_time},

        {'id':4,'name':'发布会已结束','`limit`':2000,'status':1,'address':'北京会展中心','start_time':past_time},

        {'id':5,'name':'小米5发布会','`limit`':2000,'status':1,'address':'北京国家会议中心','start_time':future_time},

    ],

    'django_web_guest':[

        {'id':1,'realname':'alen','phone':13511001100,'email':'alen@mail.com','sign':0,'event_id':1},

        {'id':2,'realname':'has sign','phone':13511001101,'email':'sign@mail.com','sign':1,'event_id':1},

        {'id':3,'realname':'tom','phone':13511001102,'email':'tom@mail.com','sign':0,'event_id':5},

    ],

}

# Inster table datas

def init_data():

    DB().init_data(datas)

if __name__ == '__main__':

    init_data()

运行程序

运行结果:

基于Python接口自动化测试框架(初级篇)附源码

 

测试日志:

基于Python接口自动化测试框架(初级篇)附源码

测试报告:

基于Python接口自动化测试框架(初级篇)附源码

  有错误不要害怕,看看报错信息,再修改一下,运行后:

基于Python接口自动化测试框架(初级篇)附源码文章来源地址https://www.toymoban.com/news/detail-503217.html

到了这里,关于基于Python接口自动化测试框架(初级篇)附源码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何基于YAML设计接口自动化测试框架?看完秒会

    在设计自动化测试框架的时候,我们会经常将测试数据保存在外部的文件(如Excel、YAML、CSV)或者数据库中,实现脚本与数据解耦,方便后期维护。目前非常多的自动化测试框架采用通过Excel或者YAML文件直接编写测试用例,通过脚本读取出来驱动自动化测试代码执行。 至于采

    2023年04月24日
    浏览(29)
  • 接口自动化框架篇:流程封装与基于加密接口的测试用例设计

    ​接口测试仅仅掌握 Requests 或者其他一些功能强大的库的用法,是远远不够的,还需要具备能根据公司的业务流程以及需求去定制化一个接口自动化测试框架的能力。所以,接下来,我们主要介绍下接口测试用例分析以及通用的流程封装是如何完成的。 首先在做用例分析之

    2024年02月08日
    浏览(28)
  • python pytest 最简单的接口自动化测试框架

    最近由于工作的原因,需要开发一个接口自动化测试框架,使用pytest框架、数据驱动,并展示直观的测试报告。 具体的开发过程如下: 安装必要的库: pytest:用于编写和运行测试用例。 requests:用于发送 HTTP 请求。 pytest-html:用于生成 HTML 格式的测试报告。 可以使用以下命

    2024年03月19日
    浏览(67)
  • Python web自动化测试框架搭建(功能&接口)——通用模块

    1、通用模块: config.conf: 公共配置文件,配置报告、日志、截图路径,以及邮件相关配置 logger: 日志模块 main.py: 执行器,负责执行整体测试任务模块 testrunner.py: 负责测试用例执行和结果收集 utils.py: 公共方法,如创建报告文件夹、生成测试报告、发送邮件 2、日志模块: 3、

    2024年01月16日
    浏览(30)
  • 从零搭建完整 Python 接口自动化测试框架—持续更新

    本接口自动化框架采用 python + unittest + request + openpyxl + myddt + pymysql 来实现接口自动化。  unittest 是 Python 自带的一个单元测试框架 2.1 作用 管理用例 批量执行用例 组织运行结果/报告 让代码更稳健 可拓展 2.2 unittest 框架中,有以下几个组件: TestCase:即测试用例,Unittest提供

    2024年02月09日
    浏览(31)
  • 基于 python 的接口自动化测试,让你轻松掌握接口自动化

    目录 目录 一、简介                ​编辑二、引言 三、环境准备 四、测试接口准备 接口信息 五、编写接口测试 六、优化 封装接口调用   本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势; 然后简单讨论了一下接口测试框架的要点; 最后介绍了一下

    2023年04月19日
    浏览(35)
  • 【Python+requests+unittest+excel】实现接口自动化测试框架

    一、框架结构:  工程目录 二、Case文件设计 三、基础包 base 3.1 封装get/post请求(runmethon.py) 3.2 封装mock(mock.py) 四、数据操作包 operation_data 4.1 获取excel单元格中的内容(get_data.py)   4.2 获取excel中每个列(data_config.py) 4.3 解决数据依赖(dependent.py ) 五、工具类包 to

    2024年02月15日
    浏览(19)
  • 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests

    本文主要介绍如何使用Python语言和Requests库进行接口自动化测试,并提供详细的代码示例和操作步骤。希望能对读者有所启发和帮助。 随着移动互联网的快速发展,越来越多的应用程序采用Web API(也称为RESTful API)作为数据交换的主要方式。针对API进行自动化测试已经变得非

    2024年02月09日
    浏览(26)
  • python接口自动化测试 —— unittest框架suite、runner详细使用

    测试套件,理解成测试用例集 一系列的测试用例,或测试套件,理解成测试用例的集合和测试套件的集合 当运行测试套件时,则运行里面添加的所有测试用例 测试运行器 用于执行和输出结果的组件 使用测试套件时,测试用例的执行顺序可以自定义,按照添加的顺序执行 有

    2024年03月16日
    浏览(47)
  • python+excel的接口自动化测试框架实战教程(视频讲解+源码)

    目录 设计流程图 Excel和结果预览 框架结构 Excel相关 日志封装 正则操作 核心操作 测试操作 测试报告发送邮件类 运行 这张图是我的excel接口测试框架的一些设计思路。 首先读取excel文件,得到测试信息,然后通过封装的requests方法,用unittest进行测试。 其中,接口关联的参数

    2024年02月03日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包