接口自动化处理动态参数

接口自动化处理动态参数

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、实际结果

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 港企、合资公司,厂商认证优先,五险一金

01 九龙仓(长沙)置业有限公司 招聘岗位:IT网络工程师 职责描述: 1.负责公司网络架构规划设计、设备选型、远程组网方案的规划和设计; 2.负责公司网络IP地址规划管理,根据业务需求和公司状况,对…

推荐收藏!算法工程师面试常考的手撕面试题!

今天给大家分享一些算法工程师技术面试中常手撕的代码。 不管是秋招还是社招,互联网大厂的技术面试中的手撕代码这一部分总是绕不过去的一关。 如果你对这些感兴趣,可以文末找我们交流 手撕 numpy写线性回归的随机梯度下降(stochastic gra…

微信小程序 安卓/IOS兼容问题

一、背景 在开发微信小程序时,不同的手机型号会出现兼容问题,特此记录一下 二、安卓/IOS兼容问题总结 2.1、new Date()时间转换格式时,IOS不兼容 问题:在安卓中时间格式2024-1-31 10:10:10,但是在iOS中是不支持 &q…

模板讲解之进阶

在之前的C入门的博客中我们就学习到了模板初阶,今天我们来学习模板的进阶,以便于更好地将模板运用到代码中 非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的…

Java基础 集合(五)Set详解

目录 简介 set种类 AbstractSet 抽象类 SortedSet 接口 HashSet LinkedHashSet TreeSet 前言-与正文无关 生活远不止眼前的苦劳与奔波,它还充满了无数值得我们去体验和珍惜的美好事物。在这个快节奏的世界中,我们往往容易陷入工作的漩涡&#xff…

【2024.2.2练习】方格取数

题目描述 题目思路 如果从A到B只走一次的话可以用动态规划轻松解决。问题在于会走两次,第二次显然要走获取数字最多的路径,但第一次走哪条路径需要抉择。 错误的思路是以为这道题适合贪心,两次都选择最优路线。可以举出反例。 A2112112B …

Vim编辑器

1.文件复制 拷贝/etc/profile 数据到/root 目录下 cp /etc/profile /root如果root文件夹在上一目录下 cp /etc/profile ../root 2.打开文件 vim etc/profile 打开ect文件夹中的profile文件 3.文件编辑 文件编辑分为一般模式 与编辑模式。打开文件为一般模式,按…

【c语言】strcpy()和strncpy():字符串复制详解

🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:c语言 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步&a…

C++ copy()函数详细介绍

copy() 是一个标准库函数,位于 头文件中。它用于将一个容器中的元素复制到另一个容器中,或者将一个范围内的元素复制到另一个范围中。 函数参数介绍 copy( first, last, d_first );first 和 last:表示输入范围的迭代器。 first 指向要复制的…

操作系统基础:内存管理概述【中】

🌈个人主页:godspeed_lucip 🔥 系列专栏:OS从基础到进阶 🏝️1 基本分页存储管理🏖️1.1 总览🏖️1.2 什么是分页存储🏰1.2.1 将物理空间分页🏰1.2.2 将逻辑空间分页&…

Android搭建python环境

通过wifi连接adb: 首先下载无线abd工具: https://www.downkuai.com/android/170494.html 运行效果图: 然后开启后根据自身ip即可连接: adb connect ip:5555 安装busybox: 首先执行如下命令查看手机架构: adb sh…

分布式ID介绍实现方案总结

分布式 ID 介绍 什么是 ID? 日常开发中,我们需要对系统中的各种数据使用 ID 唯一表示,比如用户 ID 对应且仅对应一个人,商品 ID 对应且仅对应一件商品,订单 ID 对应且仅对应一个订单。 我们现实生活中也有各种 ID&…

[C++]继承(续)

一、基类和派生类对象赋值转换 在public继承时,父类和子类是一个“is - a”的关系。 子类对象赋值给父类对象/父类指针/父类引用,我们认为是天然的,中间不产生临时对象,也叫作父子类赋值兼容规则(切割/切片&#xff…

Spring-mybatis

怎样通过Spring整合Mybatis来实现业务 目录 1.导入依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency>&l…

化工企业能源在线监测管理系统,能源管理新利器

化工企业在开展化工生产活动时&#xff0c;能源消耗量较大&#xff0c;其节能潜力空间也较大&#xff0c;因此必须控制能耗强度&#xff0c;促进能效水平的稳步提升。化工企业通过能源现状的分析&#xff0c;能够实现能源使用情况的实时反馈与监管&#xff0c;从而达到节能减排…

MobPush:Android SDK 集成指南

开发工具&#xff1a;Android Studio 集成方式&#xff1a;Gradle在线集成 安卓版本支持&#xff1a;minSdkVersion 19 集成前准备 注册账号 使用PushSDK之前&#xff0c;需要先在MobTech官网注册开发者账号&#xff0c;并获取MobTech提供的AppKey和AppSecret&#xff0c;…

搜狗开源框架Workflow网络模型分析

workflow是一个比较轻量化的后端服务框架&#xff0c;支持Linux/Mac/Windows主流平台&#xff0c;其网络模块是框架的核心。在workflow-windows分支上可以看到对windows的IOCP的封装&#xff0c;对于学习windows IOCP网络编程有很好的启发意义。因此&#xff0c;有必要对该网络…

第二十一回 阎婆大闹郓城县 朱仝义释宋公明-FreeBSD Linux 使用Rsync备份

阎婆状告宋江杀死她女儿阎婆惜&#xff0c;知县有意偏袒宋江&#xff0c;只是一味的拷打唐牛儿&#xff0c;但无奈张三张文远说刀子是宋江的&#xff0c;知县不得已差人拿宋江来审问。第一次没见到人&#xff0c;第二次派朱仝雷横两个人去。 朱仝到地窖里找到了躲藏的宋江&…

数字电源环路补偿(2)

上一篇数字电源环路补偿&#xff08;1&#xff09;-CSDN博客介绍了数字电源的环路设计的基本原理&#xff0c;并用了一个一型补偿器作为例子把LLC控得还行。 那么问题来了&#xff0c;一型补偿器好是好&#xff0c;它设计方便&#xff0c;结构简单&#xff0c;高效粗暴&#x…

2024美赛数学建模E题思路源码

赛题目的 可以将其拆解为以下主要问题&#xff0c;并为每个问题提出解决方案&#xff1a; 如何在极端天气事件越来越多的地区部署财产保险&#xff1f; 保险公司应在何时何地承保保单&#xff1f; 业主如何影响保险公司的承保决定&#xff1f; 如何建立能够评估未来房地产决…