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

news2024/11/26 1:55:24

框架的设计思路

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

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

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)还有一些复杂的场景可能会根据接口入参,根据业务逻辑自己写脚本去获得预期结果,然后和接口输出做验证。

最后: 为了回馈铁杆粉丝们,我给大家整理了完整的软件测试视频学习教程,朋友们如果需要可以自行免费领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作

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

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

相关文章

SuperMap iClient3D for Cesium最短路径分析

作者:Mei 目录 前言实现思路实现步骤1、构建二维网络数据集1.1拓扑检查1.2线拓扑数据集处理1.3构建二维网络数据集 2、发布网络分析服务3、实现代码 前言 在交通、消防业务场景中,如果某地发生火灾或者交通事故,需要快速规划出最短抢救路线&a…

河南元宇宙创造者大赛成果展示空间“元豫宙”斩获TopDigital创新营销奖金奖

6月29日,在上海举行的TopDigital营销盛典上,河南文旅元宇宙空间“元豫宙”,凭借其匠心独具的创新性场景设计、美轮美奂的超写实场景呈现、新潮炫酷的沉浸式虚拟体验,斩获TopDigital创新营销奖虚拟场景设计组金奖。元豫宙&#xff…

2023年31个最适合博主的WordPress主题

自从我最初开始写博客以来,在近十年的经验中,我已经出于各种目的在多个博客中测试和使用了数十种不同的 WordPress 主题。 以下是我挑选的绝对最佳WordPress主题,专门针对不想编写一行代码的博主。 无论您是想创建个人理财博客、撰写时尚、…

项目范围管理中8个常见错误,千万别大意!

管理项目范围就像驾驶汽车,如果不注视前方,汽车就会偏离道路。同样,如果不控制项目范围,项目就会偏离正轨。管理者在尝试管理项目范围时可能会遇到很多问题,下面来了解一下范围管理的常见错误,看看如何通过…

服务器数据库中了360后缀勒索病毒怎么办,如何预防勒索病毒攻击?

随着网络技术的不断发展,企业的计算机服务器也受到了网络安全威胁,近日,很多企业的服务器被360后缀勒索病毒攻击,导致企业的数据库中的许多重要数据被加密,无法正常读取打开。360后缀勒索病毒数据BeijingCrypt勒索病毒…

JVM 中的垃圾回收策略

文章目录 JVM 中的垃圾回收策略死亡对象的判断算法引用计数可达性分析 垃圾回收算法标记-清除算法复制算法标记-整理算法分代算法 JVM 中的垃圾回收策略 C 语言中,malloc 的内存必须 手动 free,否则容易出现内存泄漏(光申请内存,…

Prometheus监控Tongweb容器

🏅概述 JMX Exporter主要是利用Java的JMX机制来读取JVM运行时的一些数据,然后转化为Prometheus可读取的metrics格式的数据。 JMX Exporter有两种用法: 启动独立进程。通过RMI读取JVM数据,但是单独进程监控也存在问题。JVM进程内启…

WSL 更新NVIDIA 驱动 安装CUDA

WSL 一定要使用WSL2,我选择的linux系统是ubuntu22.04,在微软应用商店安装的。 安装完成之后可以通过 wsl -l -v查看 NVIDIA 驱动 WSL 中不要直接安装linux版的显卡驱动,而是需要在windows中安装驱动。可以参考这篇文章NVIDIA官网文章 得保…

Spring Cache (基础知识+瑞吉外卖项目)

Spring Cache 基本介绍 Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache提供了一层抽象,底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓…

机器学习实践(2.1)LightGBM分类任务

前言 LightGBM也属于Boosting集成学习模型(还有前面文章的XGBoost),LightGBM和XGBoost同为机器学习的集大成者。相比越来越流行的深度神经网络,LightGBM和XGBoost能更好的处理表格数据,并具有更强的可解释性,还具有易于调参、输入…

Java 多线程编程在 JMeter 中应用

目录 前言: 首先新建一个简单的线程组和一个简单的请求: 添加 JSR223 预处理程序(后置处理程序需要下一次次请求) 可以通过复制私有变量来控制所有线程获取公共变量时的线程安全问题。 日志输出: 前言&#xff1a…

Excel VLOOKUP使用详解

VLOOKUP语法格式: VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) VLOOKUP(要查找的值,查找区域,要返回的结果在查找区域的第几列,精确匹配或近似匹配) 一、精确查找 根据姓名查找对应…

Jmeter之数据参数化方法汇总

一、什么是参数化 Jmeter参数化是指将脚本中的某些需要输入数据使用参数来代替,在脚本运行时指定参数的取值范围和规则。脚本在运行时就可以根据需要选取不同的参数值作为输入。 常用的Jmeter的参数化请求,包括以下几种方式: 用户参数用户…

Seata分布式事务失效场景

场景: Feign熔断降级;被调用服务全局异常捕获了; 解决方案: 将需要分布式事务的调用链异常一直往上抛出去; 参考:https://blog.csdn.net/qq_16468489/article/details/121798016手动开启全局事务并进行回…

观察者(Observer)模式

目录 使用场景参与者协作效果实现类图 观察者(Observer)又被称为 发布-订阅模式,是一种对象行为模式,定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时所有依赖于它的对象都得到通知并自动更新。通知的发布者(目标&a…

校园跑腿小程序都包括哪些业务呢?

校园创业,大家都知道,一直以来是个非常火热的话题,每位步入大学校园的学子们都有过在校创业的想法,包括我们一些有着学校资源的社会创业者们,早已经看好了中国高校这块巨大的市场。 在这里,我要跟大家分享…

面向对象进阶二(包、final、权限修饰符、代码块、abstract、接口、内部类)

面向对象进阶二 一、包、final、权限修饰符、代码块1.1 包1.2 final关键字1.3 权限修饰符1.4 代码块1.4.1 局部代码块(已淘汰,了解)1.4.2 构造代码块(了解内容)1.4.3 静态代码块 二、抽象方法和抽象类三、接口3.1 接口…

解释 void 类型转换: (void)++y

谢谢大师们的指导,保存,分享

【LeetCode】HOT 100(23)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

JS语法学习实战系列

JS学习实战系列 一、数据类型二、运算符三、流程控制四、let 、var、 const 声明变量的区别 JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它…