浅谈Python+requests+pytest接口自动化测试框架的搭建

框架的设计思路

首先要明确进行接口自动化需要的步骤,如下图所示:

​然后逐步拆解需要完成的工作:

1)了解分析需求:了解接口要实现的功能

2)数据准备:根据开发文档确定接口的基本情况,知晓接口的url、请求方式、入参等信息,然后根据业务逻辑以及入参来预期接口的输出

  • 需要有一个配置文件来存储接口的一些基本信息;
  • 需要有一个方法能读取配置文件;
  • 需要有一个excel或者yaml格式文件来存储测试数据;
  • 需要有一个方法能读取测试数据;
  • 需要有一个方法来把读取到的配置文件和测试数据组装成测试执行时需要的参数化数据;

如果预期结果是需要根据入参查数据库来得到的时候还需要一个能执行sql的方法

3)设计&执行测试:生成一个测试文件,可以来根据入参调用接口获得接口输出然后验证

  • 根据pytest的特性可以把准备参数化的数据的工作放到conftest.py下;
  • 需要有一个调用接口以及断言验证的测试文件,命名规则为xxx_test.py或者test_xxx.py;
  • 为了更好的对输出和预期输出做验证准备封装一下系统自带的断言;
  • 为了能更好执行测试封装一下requests模块,制定统一的输入输出标准;
  • 记录执行错误信息引入日志记录模块;

4)查看结果:根据断言结果来判定接口是否满足需求框架最终的执行顺序如下图所示

框架的基本结构

然后介绍一个每个目录下都有什么,分别完成什么工作

1、这里每一个文件对应一个接口所需要的测试数据,命名规则为nameA.xlsx或者nameA.yaml(nameA泛指待测接口名称),文件里面可以存放调用接口所需的参数name、参数value、所需cookie、预期输出结果

2、assertion.py

--封装的断言方法,用于验证接口返回值和预期结果是否一致

config.py

--封装读取配置文件的方法

get_caseparams.py

--把测试数据加工成接口所需要的格式

log.py

--封装的记录日志的方法

request.py

--封装的https请求方法,主要是post和get

selectDB.py

--查询sql并把结果加工成[dic1,dic2,dic3....]这种格式,每个dic是一条数据

testcasetemplate.py

--这个是根据caseparams文件夹下的测试数据自动在testcase文件夹下生成测试文件的脚本

3、里面存放两个配置文件,base.ini存放数据库连接的配置interface.ini是所有测试接口需要的配置。

4、记录测试的日志文件,没啥可说的,log.log是当天文件,其他的是对应日期下的历史日志。

5、conftest.py固定名称的一个文件,放在被测接口脚本同一个文件夹下,此处的作用是为每个被测脚本提供参数化支持 test_XXX.py这种文件是接口的测试文件,XXX为被测接口的名称。

6、run.py ---测试执行的主入口,如果把该接口自动化测试框架放到jenkins上做持续集成的时候,可以通过配置jenkins来代替这个入口

使用说明

当我们需要有一个接口(假定名称为abc)需要用本框架进行自动化测试的时候,操作步骤如下:

1、interface.ini文件下添加名称为abc的节点,然后在该节点下配置好接口的参数文件格式、http请求方式、接口url、接口wiki。

2、casefparams文件夹下创建名称为abc.xlsx的用例数据文件。

3、执行common文件夹下的testcasetemplate.py,执行的结果是会自动根据前两步配置的内容在casefile文件夹下生成test_abc.py的脚本文件。

4、编辑test_abc.py添加所需要的断言,来验证接口的准确性。

5、执行run.py完成测试。

测试执行详情为run.py指定要执行测试的测试文件的路径testcase目录,根据pytest的运行机制这之前会先调用testcase目录下的conftest.py,这个文件在此处的作用就是通过遍历testcase目录下以test_为开头的测试文件,然后调用读取配置文件config.py、读取并组装参数的get_caseparams.py将测试用例数据参数化传递给test_开头的测试文件,test_开头的测试文件执行的时候会把之前步骤传递过来的参数拆分,然后调用request.py发送http请求,获得接口的json格式的返回结果,然后通过以下方式对接口返回结果做验证。

1)根据产品业务逻辑知道入参的情况下很简单就能得出预期结果的时候,可以直接把预期结果放到和入参一起的excel或者yaml测试数据文件中,在执行测试的时候这些参数也会一并传递给测试文件,直接取出来和接口输出做验证即可。

2)需要查库验证的情况需要把需要把接口的入参作为sql的条件写好sql后调用selectDB.py得到查询结果再拿sql返回的结果和接口输出做验证3)还有一些复杂的场景可能会根据接口入参,根据业务逻辑自己写脚本去获得预期结果,然后和接口输出做验证。

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python + Appium框架原生代码实现App自动化测试

Step1:首先介绍下pythonappium的框架结构 如下截图所示 . (1):apk目录主要放置待测app的apk资源; (2):config目录主要放置配置文件信息,包含:数据库连接配置、UI自动化脚本中所需的页面元素信息及app启…

(C语言)判定一个字符串是否是另一个字符串的子串,若是则返回子串在主串中的位置。

要求: (1)在主函数中输入两个字符串,调用子函数cmpsubstr()判断,并在主函数输出结果。 (2)子函数的返回值为-1表示未找到,否则返回子串的位置(起始下标)。 …

Shell数组函数:数组(一)

一、数组简介: 变量:用一个固定的字符串,代替一个不固定字符串。数组:用一个固定的字符串,代替多个不固定字符串。 二、类型 普通数组:只能使用整数作为数组索引关联数组:可以使用字符串作为…

多表操作、其他字段和字段参数、django与ajax(回顾)

多表操作 1 基于对象的跨表查 子查询----》执行了两句sql,没有连表操作 2 基于双下滑线的连表查 一次查询,连表操作 3 正向和反向 放在ForeignKey,OneToOneField,ManyToManyField的-related_namebooks:双下滑线连表查询,反向…

Redis Hash数据类型

Redis Hash数据类型 几乎所有的主流编程语言都提供了哈希(hash)类型,它们的叫法可能是哈希、字典、关联数组、映射。在 Redis 中,哈希类型是指值本身又是一个键值对结构,形如key “key”,value {ffield1, value1 }, … {fieldN…

LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍

目录 一.purelb简介 1.简介 2.purelb的layer2工作模式特点 二.layer2的配置演示 1.首先准备ipvs和arp配置环境 2.purelb部署开始 (1)下载purelb-complete.yaml文件并应用 (2)查看该有的资源是否创建完成并运行 &#xff…

GCN,GraphSAGE 到底在训练什么呢?

根据DGL 来做的,按照DGL 实现来讲述 1. GCN Cora 训练代码: import osos.environ["DGLBACKEND"] "pytorch" import dgl import dgl.data import torch import torch.nn as nn import torch.nn.functional as F from dgl.nn.pytorc…

Linux系统安装Python3环境

1、默认情况下,Linux会自带安装Python,可以运行python --version命令查看,如图: 我们看到Linux中已经自带了Python2.7.5。再次运行python命令后就可以使用python命令窗口了(CtrlD退出python命令窗口)。 2…

数据结构——二叉树(相关术语、性质、遍历过程)

遍历操作 二叉树的层次遍历-CSDN博客 二叉树的基本操作-CSDN博客 二叉树的先序遍历非递归实现-CSDN博客 后序遍历的非递归方式实现-CSDN博客 二叉树:已知先序中序求后序或者其他(秒解)-CSDN博客 因为之前发过一遍,我就不复制…

MES物料的动态批次管理漫谈

在制造企业中,原辅材料占产品制造总成本基本在60%以上,特殊材料加工企业可能达到80%以上,按“2/8管理原则”管理好物料就基本做好制造企业的成本管理,这也许是很多企业向“数字化转型”的一个主要原因,希望借助数字信息…

智能指针与动态内存

动态内存 new placement new 是 C 中的一种内存分配方式,它允许在给定的内存地址上构造对象,而不是在默认的堆上分配新的内存。这对于某些特殊的内存管理场景非常有用,例如在特定的内存池中分配对象。 C11 引入了 "new auto" 语法…

LiveGBS流媒体平台GB/T28181功能-概览中负载信息直播、回放、播放、录像、H265、级联查看负载会话列表

LiveGBS常见问题-概览中负载信息具体表示什么直播、回放、播放、录像、H265、级联等 1、负载信息2、负载信息说明3、会话列表查看3.1、会话列表 4、搭建GB28181视频直播平台 1、负载信息 实时展示直播、回放、播放、录像、H265、级联等使用数目 2、负载信息说明 直播&#x…

4.grid_sample理解与使用

pytorch中的grid_sample 文章目录 pytorch中的grid_samplegrid_samplegrid_sample函数原型实例 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 grid_sample 直译为网格采样,给定一个mask patch,根据在目标图像上的…

Http和WebSocket

客户端发送一次http请求,服务器返回一次http响应。 问题:如何在客户端没有发送请求的情况下,返回服务端的响应,网页可以得服务器数据? 1:http定时轮询 客户端定时发送http请求,eg&#…

2023经典软件测试面试题

1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库里面进行备案。 然后,要获取判断的依据和标准: 根据需求说明书、产品说明、设计…

AI浪潮下,非科班出身还有机会入行程序开发领域么?

前言 随着人工智能技术的快速发展和广泛应用,程序开发领域正迎来前所未有的挑战和机遇。但是对于非科班出身的个人而言,是否还有机会进入这个充满竞争的行业,成为一名程序员?那么本文就来聊聊AI浪潮下,分析当前程序员就…

整数和浮点数在内存中的存储

文章目录 每日一言整数在内存中的存储方式浮点数在内存中的存储结语 每日一言 You just can’t beat the person who never gives up. 你无法打败那位永不放弃的人。 整数在内存中的存储方式 整数在内存中的存储方式通常采用二进制形式,即将整数的数值转化为二进制…

ubuntu16.04升级openssl

Ubuntu16.04 默认带的openssl版本为1.0.2 查看:openssl version 1.下载openssl wget https://www.openssl.org/source/openssl-1.1.1.tar.gz 编译安装 tar xvf openssl-1.1.1.tar.gz cd openssl-1.1.1 ./config make sudo make install sudo ldconfig 删除旧版本 su…

XXL-Job详解(五):动态添加、启动任务

目录 前言XXL-Job API接口添加任务API动态添加任务动态启动任务 前言 看该文章之前,最好看一下之前的文章,比较方便我们理解 XXL-Job详解(一):组件架构 XXL-Job详解(二):安装部署 X…

沐风老师3DMAX随机变换工具RandomTransform插件使用方法详解

3DMAX随机变换工具RandomTransform插件使用方法 3dMax随机变换工具RandomTransform,是一款用MAXScript脚本语言开发的3dsMax小工具,可以随机变换选中的单个或多个对象的位置、角度及大小。 在3dMax中“变换”工具是最常用的工具(移动、旋转和…