python 接口自动化测试中的高阶函数!

news2024/9/19 16:19:28

高阶函数简介

高阶函数是指接受函数作为参数或者返回函数作为结果的函数。在 Python 中,有许多内置的高阶函数,如 map, filter, reduce 等,它们可以极大地简化代码并提高代码的可维护性。

summer camp

map 函数

map 函数接收一个函数和一个序列,将函数应用于序列中的每一个元素,并返回一个新的序列。

 使用 map 处理请求参数

import requestsfrom functools import partialdef send_request(url, params):    response = requests.get(url, params=params)    return response.json()urls = ["https://api.example.com/user/1", "https://api.example.com/user/2"]params = [{"id": 1}, {"id": 2}]responses = map(partial(send_request, params=params), urls)for response in responses:    print("响应内容:", response)# 输出:# 响应内容: {'id': 1, 'name': 'User 1'}# 响应内容: {'id': 2, 'name': 'User 2'}

summer camp

filter 函数

filter 函数接收一个函数和一个序列,将函数应用于序列中的每一个元素,并返回一个迭代器,只包含那些函数返回 True 的元素。

 使用 filter 过滤响应数据​​​​​​​

import requestsdef is_valid_response(response):    return response.status_code == 200responses = [    requests.get("https://api.example.com/valid"),    requests.get("https://api.example.com/invalid"),]valid_responses = filter(is_valid_response, responses)for response in valid_responses:    print("有效响应:", response.json())# 输出:# 有效响应: {'status': 'ok'}

summer camp

图片

reduce 函数

reduce 函数接收一个函数和一个序列,并将序列中的元素累加起来。

 使用 reduce 统计响应时间​​​​​​​

from functools import reducedef sum_response_times(a, b):    return a + b.elapsed.total_seconds()responses = [    requests.get("https://api.example.com/1"),    requests.get("https://api.example.com/2"),]total_time = reduce(sum_response_times, responses, 0)print("总响应时间:", total_time)# 输出:# 总响应时间: 0.123456

summer camp

partial 函数

partial 函数可以固定函数的部分参数,从而创建新的函数。

 使用 partial 创建带默认参数的请求函数​​​​​​​

import requestsfrom functools import partialsend_request = partial(requests.get, timeout=5)response = send_request("https://api.example.com/data")print("响应内容:", response.json())# 输出:# 响应内容: {'key': 'value'}

summer camp

lambda 表达式

lambda 表达式允许我们快速定义简单的匿名函数。

 使用 lambda 和 filter 过滤响应数据​​​​​​​

import requestsresponses = [    requests.get("https://api.example.com/valid"),    requests.get("https://api.example.com/invalid"),]valid_responses = filter(lambda r: r.status_code == 200, responses)for response in valid_responses:    print("有效响应:", response.json())# 输出:# 有效响应: {'status': 'ok'}

summer camp

itertools 模块

itertools 模块提供了多种高效操作迭代器的函数。

 使用 itertools.chain 连接多个请求的结果​​​​​​​

import requestsfrom itertools import chainresponses = [    requests.get("https://api.example.com/users?page=1"),    requests.get("https://api.example.com/users?page=2"),]all_users = chain.from_iterable(response.json()["users"] for response in responses)for user in all_users:    print("用户:", user)# 输出:# 用户: {'id': 1, 'name': 'User 1'}# 用户: {'id': 2, 'name': 'User 2'}# 用户: {'id': 3, 'name': 'User 3'}# 用户: {'id': 4, 'name': 'User 4'}

summer camp

图片

functools 模块

functools 模块提供了许多有用的功能,如缓存、偏函数等。

 使用 lru_cache 缓存请求结果​​​​​​​

import requestsfrom functools import lru_cache@lru_cache(maxsize=32)def get_user(id):    response = requests.get(f"https://api.example.com/user/{id}")    return response.json()user = get_user(1)print("用户:", user)# 输出:# 用户: {'id': 1, 'name': 'User 1'}

summer camp

contextlib 模块

contextlib 模块提供了上下文管理器,可以用来处理资源的自动获取和释放。

 使用 contextlib.closing 管理请求连接​​​​​​​

import requestsfrom contextlib import closingwith closing(requests.get("https://api.example.com/data")) as response:    print("响应内容:", response.json())# 输出:# 响应内容: {'key': 'value'}

summer camp

concurrent.futures 模块

concurrent.futures 模块提供了异步执行函数的高级接口。

 使用 ThreadPoolExecutor 并发发送请求​​​​​​​

import requestsfrom concurrent.futures import ThreadPoolExecutordef send_request(url):    response = requests.get(url)    return response.json()urls = ["https://api.example.com/user/1", "https://api.example.com/user/2"]with ThreadPoolExecutor(max_workers=2) as executor:    results = list(executor.map(send_request, urls))for result in results:    print("响应内容:", result)# 输出:# 响应内容: {'id': 1, 'name': 'User 1'}# 响应内容: {'id': 2, 'name': 'User 2'}

summer camp

decorator 模块

decorator 模块提供了一个装饰器框架,可以轻松地编写和使用装饰器。

 使用 decorator 模块记录请求日志​​​​​​​

from decorator import decorator@decoratordef log_request(func, *args, **kwargs):    print("发送请求:", args[0])    result = func(*args, **kwargs)    print("响应结果:", result)    return result@log_requestdef send_request(url):    response = requests.get(url)    return response.json()result = send_request("https://api.example.com/data")# 输出:# 发送请求: https://api.example.com/data# 响应结果: {'key': 'value'}

summer camp

总结

通过使用 Python 中的高阶函数,我们可以使接口自动化测试代码更加简洁、高效。希望上述示例能够帮助你更好地理解这些高阶函数,并在实际项目中应用它们。

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

软件测试面试文档

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

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

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

相关文章

Jmeter下载、配置环境变量

Jmeter下载 下载地址:Apache JMeter - Download Apache JMeter 下载后无需安装,解压后即可使用。解压后目录如下 配置环境变量 JMETER_HOME 环境变量Path %JMETER_HOME%\bin 环境变量CLASSPATH %JMETER_HOME%\lib 验证是否配置成功 在cmd命令窗中 输入…

玄机又成国漫首创!IP与AI融合,凭实力火出圈

现在国漫越来越卷了,不仅卷制作质量,还卷各种花式联动。最近玄机科技和百度文库联合举办的AI漫画大赛圆满结束,这还是国内的IP第一次和AI技术融合,而且产出了不少好作品。下面就一起来看看吧! 提到玄机科技&#xff0c…

机器人笛卡尔空间轨迹规划-直线差补和圆弧差补

上一文,我们讨论了三次多项式和五次多项式的差补算法,那么这边文章具体讨论一下笛卡尔空间轨迹规划的直线差补和圆弧差补。 步骤 (1)知道起始点和终止点的位姿,和速度信息。 (2)根据两点能确定一…

湖仓一体大数据平台:开启企业数据管理新时代(附Hudi案例)

湖仓一体大数据平台:开启企业数据管理新时代(附Hudi案例) 前言湖仓一体大数据平台 前言 在当今数字化浪潮汹涌澎湃的时代,数据如同企业发展的珍贵宝藏,而如何高效地挖掘、管理和利用这些宝藏,成为了企业在…

详细的Anaconda安装jupyter notebook与使用

jupyter notebook概念 Jupyter Notebook 是一种交互式计算环境,广泛用于数据分析、机器学习和编程学习等领域。 一、pip安装 打开 Anaconda Prompt 输入:pip install jupyter notebook pip install jupyter notebook 安装成功画面 输入命令&#xff1…

Git实战精粹

一、快速入门 1. 什么是Git Git是一个分布式的版本控制软件。 软件,类似于QQ、office、dota等安装到电脑上才能使用的工具版本控制,类似于毕业论文、写文案、视频剪辑等,需要反复修改和保留原历史数据分布式 文件夹拷贝本地版本控制集中式…

SpringMVC基于注解的使用

SpringMVC基于注解的使用 首先导入spring-mvc的依赖文件 然后配置上篇文章的web.xml文件 在配置上篇文章的spring-mvc.xml文件 创建一个ParamsContrller类写个方法方法里面的参数名可以用到客户端请求,且可以为参数写任意类型 如果想改参数名可以用RequestParam为…

3D模型OBJ格式详解

竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生~ 个人主页: rainInSunny | 个人专栏: C那些事儿、 Qt那些事儿 文章目录 写在前面OBJ格式解析OBJ文件示例MTL文件OBJ渲染简述 写在前面 OBJ格式是一种简单的文本格式,用于描述三维模型的几何形状和材质…

golang本地缓存fastcache高性能实现原理

1. git仓库 https://github.com/abbothzhang/fastcache 2. 整体原理 initCache时不会申请内存,只有第一次set时候才会申请,且会一次性申请64MB,后面不够了又一次性申请1024*64MB大小内存 2.1. 时序图 3. 高性能原因 将cache分为512个buc…

Unity(2022.3.41LTS) - 网格,纹理,材质

目录 零.简介 一、网格(Mesh) 二、材质(Material) 三、纹理(Texture) 四、三者之间的关系 零.简介 在 Unity 中,网格(Mesh)、纹理(Texture)和…

软考评测知识点

常见的存储单位: 1B8bit 1TB1024GB 1GBMBKBB 机器数:将符号数字化的数,是数字在计算机中的二进制表示形式。(最高位0表示正数,1表示负数) 二进制正数的原码、反码、补码不变,移码等于补码符号位…

外包干了两年,快要废了。。。

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 简单的说下,我大学的一个同学,毕业后我自己去了自研的公司,他去了外包,快两年了我薪资、技术各个方面都有了很大的…

Ubuntu下部署Hadoop集群+Hive(三)

Hive部署 准备环境 apache-hive-4.0.0-bin.tar.gz、mysql-connector-j-8.1.0.jar 如果是离线安装的话,使用mysql-8.0.34-1.el7.x86_64.rpm-bundle.tar,在线安装的话则不用; hive下载地址:Index of /hive (apache.org) mysql …

面试中的SEO优化:从基本概念到实用策略

前言 为什么要学习SEO SEO对于Web站点很重要,有助于优化网页在搜索引擎中的排名,提升网站可见性和流量。掌握SEO技术可以确保网页结构和内容对搜索引擎友好,从而提高用户访问量和用户体验。而且SEO被面试问的很多 SEO是什么? …

day02-面向对象-多态抽象类接口

一、⭐多态⭐ 1.1 概述 1.多态是在继承/实现情况下的一种现象, 表现为对象多态和行为多态 ​ 2.⭐对象多态写法: ​继承:父类 变量 new 子类1(); ​父类 变量 new 子类2();实现:接口 变量 new 实现类(); ​ 3.多态…

Comsol 微穿孔板吸声性能优化、提升吸声系数

微穿孔板吸声体是由穿孔直径在1毫米以下的薄板和板后空腔组成的共振吸声结构。与传统的吸声材料及普通穿孔板吸声体相比,微穿孔板吸声体清洁,可收回重复利用,不燃,坚固,重量轻,由于不需另加纤维等多孔性吸声材料即可获得良好的吸声性能,且制造不受材料限制,不污染环境,已成功应…

【Python 千题 —— 基础篇】简易银行

= Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目描述 题目描述 编写一个面向对象的程序,模拟一个简化的银行系统。要求定义一个 BankAccount 类,具有基本的存款、取款和查询余额的功能。然后,创建一个 S…

HPM5301系列--VSCODE开发环境问题修复(一)

一、目的 问题描述:在配置工程和编译工程时出现以下提示,并且无法进入调试。 [cpptools] The build configurations generated do not contain the active build configuration. Using "release" for CMAKE_BUILD_TYPE instead of "Relea…

自定义注解+拦截器+多线程,实现字典值的翻译

上一篇,自定义注解拦截器,实现字段加解密操作,奈何公司的这个项目里没有字典值翻译的功能,正好可以再自定义注解拦截器方式的基础上,扩展一下 第一步,新建一个注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface Dict {//对应数据字典的cod…

IO进程线程8月27日

1&#xff0c;思维导图 2&#xff0c;使用两个线程分别复制文件的上下两部分到同一个文件 #include<myhead.h> sem_t fastsem; //pthread_mutex_t fastmutex; void *capy_up(void *c) { // pthread_mutex_lock(&fastmutex);int len*(int *)c;int fp1open("./1…