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

1167 篇文章 46 订阅
732 篇文章 11 订阅

高阶函数简介

高阶函数是指接受函数作为参数或者返回函数作为结果的函数。在 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 中的高阶函数,我们可以使接口自动化测试代码更加简洁、高效。希望上述示例能够帮助你更好地理解这些高阶函数,并在实际项目中应用它们。

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

软件测试面试文档

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值