接口自动化处理动态参数

news2025/2/3 7:15:20

接口自动化处理动态参数

1、流程说明

某些接口的请求入参数据不能写死,需要动态传参。如用户注册接口,用户名需要动态生成。使用yaml编写测试数据时,在需要动态参数的数据后面添加上特殊字符${生成动态数据的方法名(参数)},后续实际发送请求时,会将这部分特殊字符串替换为实际生成的随机值

2、创建生成随机数据的类

debug_talk.py

import random


class DebugTalk():
    def get_random_number(self,min,max):
        min = int(min)
        max= int(max)
        number = random.randint(min,max)
        #print("--------------热加载生成的randomint为{}".format(number))
        return number


3、yaml测试数据举例

password: mypassword${get_random_number(100,200)}
在实际发送请求时,将上述参数替换为实际生成的随机数
反射,已知类名DebugTalk,方法名,通过getattr调用此方法

getattr(DebugTalk,方法名)(方法入参)
-
 feature: 用户管理
 story: 登录接口
 title: USER-登录
 request:
  method: post
  url: /api/login
  data:
   username: admin@qq.com
   password: mypassword${get_random_number(100,200)}
 extract:
  login_data: $.data
 validate: success

4、在RequestsUtil类中添加处理热加载的方法

    def deal_debug_talk(self,data):
        '''
        :param 待处理含${get_random_number(100,200)}的数据:
        :return: 将${get_random_number(100,200)}替换为动态生成的随机数
        '''
        #1、将数据类型全部处理为string,保存在str变量中
        if data and isinstance(data,dict):
            str_data = json.dumps(data)
        else:
            str_data = data
        # 2、替换
        for i in range(1, str_data.count("${") + 1): #处理字符串中含多个{{}}的情况
            if "${" in str_data and "}" in str_data:
                start_index = str_data.index("${")
                end_index = str_data.index("}")
                before_var =str_data[start_index:end_index + 1]
                print("\n-------------------热加载替换前{}".format(before_var))
                # 处理得到方法名和入参
                kuohao_index = before_var.index("(")
                func_name = before_var[2: kuohao_index]
                params_list = before_var[kuohao_index+1:-2].split(',')
                # 利用反射的方法调用debug_talk类中的方法
                after_var = getattr(DebugTalk(),func_name)(params_list[0],params_list[1])
                print("-------------------热加载替换后{}".format(after_var))
                after_var = str(after_var)
                str_data = str_data.replace(before_var,after_var)
                print("-------------------热加载最终结果{}".format(str_data))
        # 3、数据类型还原
        if  data and isinstance(data,dict):
            data = json.loads(str_data)
        else:
            data = str_data
        return(data)
    def send_request(self,method,url,**kwargs):
        #1、将method处理为小写
        self.method = str(method).lower()
        #2、处理URL 拼接完整
        self.url= RequestUtil.base+url
        #3、将url中类似{{access_token}}的变量,替换为extract.yaml文件中实际的值
        self.url = self.deal_variables(self.url)
        #4、处理{{}}及热加载
        for key,value in kwargs.items(): # data ={"username":"{{}}","password"}  headers={}
            if key in ["headers","params","data","json"]:
                kwargs[key] = self.deal_variables(value) #处理{{}}
                kwargs[key] = self.deal_debug_talk(value)#处理热加载
        #5、发送请求
        res=RequestUtil.session.request(method=self.method,url=self.url, **kwargs)
        print(res.text)
        return res

5、实际结果

在这里插入图片描述

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

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

相关文章

Find My点读笔|苹果Find My技术与点读笔结合,智能防丢,全球定位

点读笔是采用国际最新光学图像识别技术和先进的数码语音技术开发而成的新一代智能阅读和学习工具。它体现了电子产品与教育行业的完美融合,实现了科技以人为本的理念。点读笔能同时实现点读、复读、跟读、录音、娱乐等诸多功能。由于小孩贪玩很容易造成点读笔的丢失…

基于OpenCV灰度图像转GCode的单向扫描实现

基于OpenCV灰度图像转GCode的单向扫描实现 引言单向扫描存在的问题灰度图像单向扫描代码示例结论 基于OpenCV灰度图像转GCode的单向扫描实现 本文将介绍如何使用OpenCV库将灰度图转换为GCode,并通过单向扫描实现对图像的激光雕刻。GCode是一种用于控制数控机床和…

物联网自动虫情测报仪器

TH-CQ3S在农业生产的进程中,病虫害的防治始终是关键的一环。然而,传统的病虫害监测手段往往存在着效率低下、准确度不高等问题,这无疑给农业生产带来了巨大的困扰。好在,随着科技的飞速发展,一款基于物联网技术的自动虫…

Oracle闪回日志管理(flashbackup log)

Oracle闪回日志管理(flashbackup log) 1.开启闪回日志 shutdown immediate startup mount; alter database archivelog; alter database flashback on; alter database open; 2、查看闪回日志保留期限 show parameter flash 默认是1440分钟&#xff0c…

【软件设计师笔记】程序语言设计考点

【考证须知】IT行业高含金量的证书(传送门)💖 【软件设计师笔记】计算机系统基础知识考点(传送门)💖 【软件设计师笔记】操作系统考点(传送门)💖 🐓 编程语言之间的翻译形式 汇编 高级程序不能直接在计算机上执行,…

极狐GitLab 和飞书的集成实践

飞书集成和通知 如果您想在飞书的群组中查看极狐GitLab 项目中的事件变更,如创建议题、流水线故障或关闭合并请求等,您可以将飞书与极狐GitLab 进行集成。 飞书集成 配置飞书 在飞书中创建机器人在飞书群组中添加机器人 在飞书中创建机器人&#xff…

【全网最全】2024美赛ABCDEF题思路模型全解(后续会更新)

欲获取更多资料,一定要点击这里并关注文末的公众号!!! 最新更新:我们团队不仅在第一时间更新了24美赛全题目的深度翻译和深入分析,经过爆肝奋战,我们在第一时间给出了ABCDEF全题目的完整建模过程…

OSPF——开放最短路径优先、多区域OSPF

目录 1 内部网关协议 OSPF 1.1 三个主要特点(生成拓扑图) 其他特点 1.2 链路状态数据库 (link-state database) 1.3 链路状态路由过程 1.4 OSPF 的五种分组类型 1.4.1 OSPF 分组用 IP 数据报传送 1.5 OSPF 工作过程 1.6 OSPF 定义五种网络类型 1.7 多路访…

WAF 无法防护的八种风险

一、目录遍历漏洞 测试用例:Apache 目录遍历漏洞 测试环境搭建: apt intsall apache2 && cd /var/www/html/ && rm index.html无法拦截原因: 请求中无明显恶意特征,无法判断为攻击行为 实战数据: 截…

飞腾D2000+X100的UART串口调试方法

一、测试使用主板的串口说明 D2000自带的UART0直接引出9针全功能RS232串口,UART1为CPU调试串口,UART2和UART3接485接口芯片转为RS485,此外,主板还有X100 usb2.0转出8路RS232,详细硬件框图如下: 源芯片串口号串口电平连接器丝印D2000UART0RS232COM0D2000UART1TTL调试串口…

LightDB24.1 存储过程中声明的不带参数的游标,支持open 游标名加括号的调用方式

背景 oracle 存储过程中不带参数声明的游标,可以在open打开时加上括号进行调用。在老的业务中经常能够看到这种用法。虽然觉得不合理,但是oracle人家支持,作为兼容性极强的LightDB不会在这个小水沟翻车的,果断进行支持一波。 L…

【鸿蒙千帆起】高德地图携手 HarmonyOS NEXT,开启智能出行新篇章

2024 年 1 月 18 日下午,华为举办了鸿蒙生态千帆启航仪式,对外宣布 HarmonyOS NEXT 星河预览版现已开放申请,同时,首批 200鸿蒙原生应用加速开发,鸿蒙生态设备数量更是突破了 8 亿大关。这些进展反映了开发者和合作伙伴…

Jmeter+ant+Jenkins 接口自动化框架完整版

接口自动化测试单有脚本是不够的,我们还需要批量跑指定接口,生成接口运行报告,定位报错接口,接口定时任务,邮件通知等功能。批量跑指定接口:我们可以利用ant批量跑指定目录下的Jmeter脚本生成接口运行报告&…

上传upload及显示img图片预览、删除

上传图片文件a-upload html部分 <div className="clearfix"><a-upload:custom-request="customRequest"listType="picture-card":fileList="fileList":onPreview="handlePreview":on-remove="del">&…

【算法与数据结构】300、674、LeetCode最长递增子序列 最长连续递增序列

文章目录 一、300、最长递增子序列二、674、最长连续递增序列三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、300、最长递增子序列 思路分析&#xff1a; 第一步&#xff0c;动态数组的含义。 d p [ i ] dp[i] dp[i…

什么是接口的幂等性,如何保证接口的幂等性?

✅作者简介&#xff1a;大家好&#xff0c;我是Leo哥&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo哥的博客 &#x1f49e;当前专栏&#xff1a; Java ✨特色专栏&#xff1a; MyS…

如何在Windows部署GoLand并通过SSH远程连接Linux服务器

文章目录 1. 安装配置GoLand2. 服务器开启SSH服务3. GoLand本地服务器远程连接测试4. 安装cpolar内网穿透远程访问服务器端4.1 服务器端安装cpolar4.2 创建远程连接公网地址 5. 使用固定TCP地址远程开发 本文主要介绍使用GoLand通过SSH远程连接服务器&#xff0c;并结合cpolar内…

想好新年去哪了吗?合合信息扫描全能王用AI“留住”年味

还有不到十天&#xff0c;除夕就要到了。近几年春节假期中&#xff0c;有人第一次带着孩子直击海面冰风&#xff0c;坐船回老家&#xff1b;也有人选择“漫游”国内外&#xff0c;在旅行中迎接新春的朝气。合合信息旗下扫描全能王APP通过AI扫描技术&#xff0c;提供了一种全新的…

白皮书发布,石油石化数字孪生加速

近日&#xff0c;《数字石化 孪生智造——石油石化数字孪生白皮书》发布。白皮书聚焦石油石化行业发展机遇&#xff0c;剖析数字孪生技术在行业中的案例实践与应用场景&#xff0c;展望石油石化企业未来孪生发展新态势。 当前&#xff0c;国家大力推动减污降碳协同增效&#x…

【机器学习】基于K-近邻的车牌号识别

实验四: 基于K-近邻的车牌号识别 1 案例简介 ​ 图像的智能处理一直是人工智能领域广受关注的一类技术&#xff0c;代表性的如人脸识别与 CT 肿瘤识别&#xff0c;在人工智能落地的进程中发挥着重要作用。其中车牌号识别作为一个早期应用场景&#xff0c;已经融入日常生活中&…