这个自动化框架吧,解决接口间数据依赖

在实际的测试工作中,在做接口自动化测试时往往会遇到接口间数据依赖问题,即API_03的请求参数来源于API_02的响应数据,API_02的请求参数又来源于API_01的响应数据。

因此通过自动化方式测试API_03接口时,需要预先请求API_02接口,获取到API_03的请求参数,而获取API_02的响应又需要预先对API_01发起请求,从响应中提取API_02的请求参数。

而下面的自动化框架设计便解决了这一问题:

用于数据驱动的Excel表格设计

图片

框架代码实现逻辑

当测试 id 为 shop-03 的接口时,首先判断【是否运行】。如果为 ‘yes’ 则判断该接口请求类型, ‘POST’ OR ‘GET’ 走不同的逻辑分支。

POST请求的话判断是否有【case依赖】,【case依赖】为空则无依赖,不为空则获取依赖的case id。

上述表格中,shop-03的case依赖为shop-02,获取到依赖的id后,代码逻辑主动去判断shop-02接口的相关字段参数(【是否运行】/【请求类型】/【case依赖】),如果shop-02也存在依赖接口shop-01,则代码继续判断shop-01接口对应字段参数。

shop-01接口【case依赖】字段为空时,获取【请求数据】根据请求数据这个字段获取单独存储在字典中的完整的请求参数,发起请求,获得shop-01的响应后根据shop-01对应的【被依赖接口的返回数据】提取下游接口。

即shop-02的所需要的依赖参数,存入一个依赖参数列表中,shop-02接口把获取到的参数代入到请求参数中进行请求,获取到shop-02的响应后同样根据【被依赖接口的返回数据】提取下游接口shop-03所需要的依赖参数,存入依赖参数列表,shop-03接口从列表中获取这个参数代入请求参数,进入请求,获取响应,根据【实际结果取值字段】获取要断言的字段,并对比预期结果完成该接口的测试。

# 主逻辑模块部分代码示例
'''判断是否有case依赖,如果有case依赖则执行depend_data.py中的depend_response_data(self,caseid)方法,该方法返回该接口发起请求的依赖参数'''elif method == 'Post':if depend_caseid:params_data_list = self.depend_result.depend_response_data(depend_caseid)log_info('main_logic.requests_api::根据依赖的caseid={},''调用depend_data.depend_response_data获取到的依赖数据为:{}'.format(depend_caseid, params_data_list))for j in range(len(depend_key_list)):params[depend_key_list[j]] = params_data_list[j][0]header = rquests_headers()log_info('main_logic.requests_api::执行的用例{}请求url为:{},入参为:{},请求头为:{}'.format(caseid,url,params,header))response = self.post_requests(url, params, header)# print(response)self.results_list.append(response)else:header = rquests_headers()response =self.post_requests(url, params, header)# print(response)self.results_list.append(response)

#数据依赖模块部分代码示例
'''通过excel表中【case依赖】字段一层层向上游接口请求,结果储存在一个结果列表中供下游接口调用,最后返回测试接口所需要的依赖数据'''    
def depend_response_data(self,caseid):depend_caseid_t = self.excel_case_data.get_depend_caseid(caseid)depend_caseid_list = []#如果case依赖字段不为空if depend_caseid_t:#获取接口串联依赖caseid列表while depend_caseid_t:depend_caseid_list.append(depend_caseid_t)depend_caseid_t = self.excel_case_data.get_depend_caseid(depend_caseid_t)depend_caseid_list.reverse()depend_caseid_list.append(caseid)march_result_list = []num_caseid = len(depend_caseid_list)#迭代获取列表中的caseidfor i in range(num_caseid):depend_caseid_s = self.excel_case_data.get_depend_caseid(depend_caseid_list[i])depend_key_list = self.excel_case_data.get_depend_key(depend_caseid_list[i]).split(",")params_key = self.excel_case_data.get_request_key(depend_caseid_list[i])params = self.requests_data[params_key]url = self.excel_case_data.get_url(depend_caseid_list[i])#判断该caseid的测试用例中case依赖是否为空if depend_caseid_s:#获取上一个依赖接口返回的依赖参数params_data_list = march_result_list[i-1]#根据该caseid数据依赖字段构造该接口的传参for k in range(len(depend_key_list)):params[depend_key_list[k]] = params_data_list[k][0]#对该接口发起请求header = rquests_headers()result = post_requests(url, params, header)getdata = GetExcelDate()is_depend_response = getdata.get_depend_response(depend_caseid_list[i])#判断该接口是否需要为下一接口返回依赖参数if is_depend_response:depend_response_list = is_depend_response.split(",")results = resultmatchlist = depend_response_listmatchparams = match_params(results, matchlist)march_result_list.append(matchparams)else:print("caseid={}不需要返回被依赖的字段".format(depend_caseid_list[i]))#当该caseid测试用例中case依赖为空时直接请求该接口,返回匹配到的下一关联接口的请求参数else:result = self.depend_response(depend_caseid_list[i])getdata = GetExcelDate()is_depend_response = getdata.get_depend_response(depend_caseid_list[i])if is_depend_response:depend_response_list = is_depend_response.split(",")results = resultmatchlist = depend_response_listmatchparams = match_params(results, matchlist)march_result_list.append(matchparams)else:print("caseid={}不需要返回被依赖的字段".format(depend_caseid_list[i]))return matchparams

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

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

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

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

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

相关文章

JeecgBoot入门

最近在了解低代码平台,其中关注到gitee上开源项目JeecgBoot,JeecgBoot官方也有比较完整的入门教学文档,这里我们将耕者官方教程学习,并将其记录下来。 一、项目简介 JeecgBoot 是一款基于代码生成器的低代码开发平台拥有零代码能力…

修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程

HarmonyOS鸿蒙打包hap 安装应用到桌面没有图标,用hdc安装到真机,打包后应用图标丢失变成透明,名字也还是默认的label的bug,以下是解决方案 以下是修改方案: 1、修改应用名字: 2、修改应用图标&#xff1a…

MYSQL安装(ubuntu系统)

rpm -qa 查询安装软件包 ps axj 查询服务 卸载mysql(万不得已) ps axj | grep mysql 查看是否存在mysql服务 systemctl stop mysqld 关闭该服务 rpm -qa | grep mysql 查安装mysql安装包 rmp -qa | grep mysql | xargs (yum apt) -y remove进行批量…

比ChatGPT更牛!苹果新AI模型刷新交互体验!能看懂你的手机屏幕!平板和安卓机也都行

家人们,苹果一直在悄悄进步! 近期,据小鹿观察,各大科技巨头不仅在提升模型解决复杂问题的能力上竞争激烈,而且还在大语言模型应用于用户界面(UI)交互方面上暗暗发力! 最近&#xf…

InstructIR: High-Quality Image Restoration Following Human Instructions 论文阅读笔记

这是Radu大佬所在的Wrzburg大学的computer vision lab实验室发表在ECCV2024上的一篇论文,代码开源。文章提出了一种文本引导的All-in-One的restoration模型,如下图所示: 这个工作其实跟"InstructPix2Pix: Learning to Follow Image Edit…

解决使用Golang的email库发送qq邮件报错short response,错误类型为textproto.ProtocolError

问题阐述 使用email库发送QQ邮件,采用587端口: package mainimport ("fmt""net/smtp""github.com/jordan-wright/email" )func SendEmail(sendTo string, subject string, body string) (err error) {e : email.NewEmai…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十二章 Debian文件系统

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

Spring框架的JDBC模板技术

目录 一、JDBC模板类的使用 1.引入依赖 2.测试类 3.运行,查看数据库 二、使用Spring框架来管理模板类 1.配置文件 2.测试类 3.运行,查看数据库 三、Spring框架管理开源的连接池 1.配置开源的连接池 2.将数据库连接的信息配置到属性文件中 3.核…

【万字详文介绍】:迭代扩张卷积神经网络(IDCNN)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

2-Ubuntu/Windows系统启动盘制作

学习目标: 掌握使用Win32DiskImager、Rufus等工具制作系统启动盘的基本步骤。独立将ISO镜像文件写入USB闪存驱动器,确保在需要时顺利安装或修复系统。通过学习如何选择正确的源文件和目标驱动器,理解启动盘的使用场景和注意事项,…

简介Voronoi图Voronoi Diagrams

这是计算机的经典算法。 问题引入 倘若一张大白纸上有很多三角点,掉进去一个五星点,问,哪个三角离着五星最近?简单,算距离呗,这个五星到其他所有三角点的距离,找到最小的那个就行。 若掉进去…

【进阶sql】复杂sql收集及解析【mysql】

开发时会出现,必须写一些较复杂sql的场景 可能是给会sql的客户 提供一些统计sql 或是临时需要统计数据信息但是 开发一个统计功能有来不及的情况 也可能是报表系统组件 只支持 sql统计的情况 特地记录下这些sql 作为积累 substring 截取查询出的字符串&#xff…

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“

SLF4J常见问题 导入依赖&#xff1a; <dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version> </dependency> <dependency><groupId>org.slf4j</groupId><arti…

002-Kotlin界面开发之Kotlin旋风之旅

Kotlin旋风之旅 Compose Desktop中哪些Kotlin知识是必须的&#xff1f; 在学习Compose Desktop中&#xff0c;以下Kotlin知识是必须的&#xff1a; 基础语法&#xff1a;包括变量声明、数据类型、条件语句、循环等。面向对象编程&#xff1a;类与对象、继承、接口、抽象类等。…

RSTP的工作过程

RSTP简介&#xff1a; 生成树协议&#xff08;STP&#xff09;用于在网络中防止环路产生&#xff0c;但 STP 的收敛速度较慢。 RSTP&#xff08;Rapid Spanning Tree Protocol &#xff09;快速生成树协议&#xff1a;RSTP 是对 STP 的改进&#xff0c;它能在网络拓扑发生变化…

【IEEE出版 | EI稳定检索】2024智能机器人与自动控制国际学术会议 (IRAC 2024,11月29-12月1日)

2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09; 2024 International Conference on Intelligent Robotics and Automatic Control 官方信息 会议官网&#xff1a;www.icirac.org 2024 International Conference on Intelligent Robotics and Autom…

nginx 搭建网站

1.查看防火墙状态systemctl status firewalld 2.getenforce 3.安装nginx yum install nginx -y 4.网站信息 echo "welcome to yinchuankejixuanyuan" > /usr/share/nginx/html/index.html 5.查看命令状态 nginx -t 6.重启 systemctl restart nginx

从0开始搭建一个生产级SpringBoot2.0.X项目(八)SpringBoot 使用Redis

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot使用Redis 缓存数据 一、 pom引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>&…

Logstash 安装与部署(无坑版)

下载 版本对照关系&#xff1a;ElasticSearch 7.9.2 和 Logstash 7.9.2 &#xff1b; 官方下载地址 选择ElasticSearch版本一致的Logstash版本 https://www.elastic.co/cn/downloads/logstash 下载链接&#xff1a;https://artifacts.elastic.co/downloads/logstash/logst…

FBX福币交易所A股三大指数小幅低开 稀土永磁板块回调

查查配分析11月5日电 周二,A股三大指数小幅低开。沪指开盘跌0.10%报3306.81点,深证成指开盘跌0.09%报10653.20点,创业板指开盘跌0.05%报2184.90点。 FBX福币凭借用户友好的界面和对透明度的承诺,迅速在加密货币市场中崭露头角,成为广大用户信赖的平台。 来源:同花顺iFinD 盘面…