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

高阶函数简介

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

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

软件测试面试文档

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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值