在Visual Studio Code中使用pytest进行AWS Lambda函数测试的最佳实践

news2025/1/13 15:57:41

亿牛云.png

背景/引言

在现代软件开发中,自动化测试已经成为保证代码质量的重要一环。对于AWS Lambda函数开发者来说,使用pytest进行单元测试和集成测试是一个高效且可靠的方法。本文将介绍在Visual Studio Code中使用pytest测试AWS Lambda函数的最佳实践,涵盖项目结构、依赖管理、pytest配置以及实际代码示例。

正文
项目结构

一个清晰合理的项目结构有助于代码的维护和测试。建议使用以下项目结构:

project/
├── src/
│   ├── lambda_function.py
│   └── requirements.txt
├── tests/
│   ├── test_lambda_function.py
│   └── requirements.txt
└── .vscode/
    └── settings.json
  • src/ 目录包含您的Lambda函数代码及其依赖。
  • tests/ 目录包含您的测试代码及其依赖。
  • .vscode/ 目录包含Visual Studio Code的配置文件。
依赖管理

src/requirements.txttests/requirements.txt中分别列出源代码和测试代码所需的依赖项。例如:

src/requirements.txt:

boto3
requests

tests/requirements.txt:

pytest
mock
PYTHONPATH设置

为了确保测试代码能够正确引用源代码,需要在Visual Studio Code的设置中配置PYTHONPATH。在.vscode/settings.json中添加以下内容:

{
    "terminal.integrated.env.windows": {
        "PYTHONPATH": "${workspaceFolder}/src;${workspaceFolder}/tests"
    },
    "terminal.integrated.env.linux": {
        "PYTHONPATH": "${workspaceFolder}/src;${workspaceFolder}/tests"
    },
    "terminal.integrated.env.osx": {
        "PYTHONPATH": "${workspaceFolder}/src;${workspaceFolder}/tests"
    },
    "python.testing.pytestArgs": [
        "tests"
    ],
    "python.testing.unittestEnabled": false,
    "python.testing.nosetestsEnabled": false,
    "python.testing.pytestEnabled": true
}
pytest配置

.vscode/settings.json文件中,我们已经配置了pytest参数,指定了测试目录和运行测试的命令。这样,您可以直接在Visual Studio Code中运行pytest测试。

实例

下面是一个简单的AWS Lambda函数及其测试示例。Lambda函数从某个API获取数据并返回。为了模拟API请求,我们使用了爬虫代理IP技术。

src/lambda_function.py:

import requests

def lambda_handler(event, context):
    # 使用亿牛云爬虫代理加强版 设置代理IP
    proxies = {
        "http": "http://username:password@proxy.16yun.cn:1234",
        "https": "http://username:password@proxy.16yun.cn:1234",
    }

    response = requests.get("https://api.example.com/data", proxies=proxies)
    return response.json()

tests/test_lambda_function.py:

import pytest
from unittest.mock import patch
from src.lambda_function import lambda_handler

@patch('src.lambda_function.requests.get')
def test_lambda_handler(mock_get):
    # 模拟API响应
    mock_get.return_value.json.return_value = {"key": "value"}
    
    # 调用lambda_handler函数
    result = lambda_handler(None, None)
    
    # 验证结果
    assert result == {"key": "value"}
    mock_get.assert_called_once_with("https://api.example.com/data", proxies={
        "http": "http://username:password@proxy.16yun.cn:1234",
        "https": "http://username:password@proxy.16yun.cn:1234",
    })
结论

本文介绍了在Visual Studio Code中使用pytest进行AWS Lambda函数测试的最佳实践。通过合理的项目结构、正确的依赖管理和PYTHONPATH设置,可以轻松实现Lambda函数的测试自动化。希望本文能为您的AWS Lambda开发工作提供有益的参考和帮助。
以上实例展示了如何在代码中使用爬虫代理IP技术,并通过mock模块模拟外部API请求,使测试过程更加可靠和可控。

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

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

相关文章

攸信动态丨攸信技术接受厦门电视台《厦视直播室》栏目组采访

近日,厦门攸信信息技术有限公司(简称“攸信技术(UMS)”)荣幸地接受厦门电视台《厦视直播室》栏目组的采访。 智能制造作为当今技术创新的前沿阵地,正日益成为推动工业发展的核心力量。攸信技术,…

门禁系统一套多少钱,门禁系统设备的价格

门禁系统一套多少钱,门禁系统设备的价格 现今门禁系统有诸多品牌,不同品牌的价格亦有所差别;知名的大品牌价格往往更贵,而一些小众品牌又不太了解,价格虽便宜些,却担心质量不佳,售后也不好处理&…

适用于 macOS 的最佳免费数据恢复软件

升级到 macOS 后,它可以帮助您从 HDD、SSD、存储卡、USB 闪存驱动器、数码相机或其他存储介质设备中完全恢复已删除、格式化或无法访问的数据。 当 macOS Monterey 用户寻找数据恢复解决方案时,免费数据恢复软件始终是一个不错的选择。实际上&#xff0…

FuTalk设计周刊-Vol.060

#AI漫谈 热点捕手 1.浙大、蚂蚁集团推出MaPa:文本生成超真实3D模型 与传统纹理方法不同的是,MaPa通过文本能直接生成高分辨率、物理光照、超真实材质的3D模型,可以极大提升游戏、VR、AR、影视等行业的开发效率。 链接https://mp.weixin.qq…

Elasticsearch 为时间序列数据带来存储优势

作者:来自 Elastic Martijn Van Groningen, Kostas Krikellas 背景 Elasticsearch 最近投资了对存储和查询时间序列数据的更好支持。存储效率一直是关注的主要领域,许多项目取得了巨大的成功,与将数据保存在标准索引中相比,可以节…

STM32-CAN

一、CAN总线简介 1.1 CAN简介 CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO 国际标准化的串行通信 协议。异步半双工。 ISO11898:123kbps~1Mbps。 ISO11519:125kbps 特点: 多主控制没…

高考后的家庭移民新选择

随着高考的落幕,您是否在思考未来的更多可能性?移民,作为一种生活选择,为许多家庭提供了一个全新的生活和教育环境。我们理解,每个家庭都希望为自己的孩子提供最好的未来。 移民国家通常拥有多元和包容的教育体系&…

Nginx Location匹配 和 Rewrite重写

前言:Nginx 正则表达式 ^匹配输入字符串的起始位置$匹配输入字符串的结束位置*匹配前面的字符零次或多次匹配前面的字符一次或多次?匹配前面的字符零次或一次.匹配除 “\n” 之外的任何单个字符\将后面接着的字符标记为一个特殊字符或一个原义字符或一个…

AI写作工具:提升工作效率的五大利器

不知道大家有没有发现,随着人工智能技术的快速发展,AI工具正逐渐渗透到我们日常生活的各个方面,极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图,还是AI幻灯片制作,这些工具已成为我们不可或缺的…

【计算机毕业设计】266基于微信小程序的在线点餐

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

49、Flink 的数据源的 SplitReader API 详解

SplitReader API a)概述 核心的 SourceReader API 是完全异步的,但实际上,大多数 Sources 都会使用阻塞的操作,例如客户端(如 KafkaConsumer)的 poll() 阻塞调用,或者分布式文件系统&#xff…

包装机故障排查与修复方法:确保生产线的稳定运行

在现代化的工业生产中,包装机作为生产线上的重要一环,其稳定运行直接关系到产品的质量和生产效率。然而,包装机在使用过程中难免会遇到各种故障,如何快速准确地排查并修复这些故障,确保生产线的稳定运行,成…

【Echarts系列】带图片的饼图

【Echarts系列】带图片的饼图 序前提说明示例数据格式代码动态旋转图片 序 为了节省后续开发学习成本,这个系列将记录我工作所用到的一些echarts图表。 前提说明 因为饼图中间需要添加图片,所以比较特殊,对于饼图中间数据的对齐很容易出现…

【npm】console工具(含胶囊,表格,gif图片)

这是一款控制台花样输出工具 相对丰富的输出方式 文本输出属性值输出胶囊样式输出表格输出图片输出(含动图) 安装 npm install v_aot引用 import v_aot from "v_aot";字段说明 字段类型属性字符串值字符串类型default 、 primary 、 suc…

Centos用自定义java安装包替换系统java版本

一.下载自定义安装java压缩包,比如 jdk-8u191-linux-x64.tar.gz 二.解压到/usr/java/ 下 tar -zxvf jdk-8u191-linux-x64.tar.gz 三.执行命令 update-alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_191/bin/java 300 update-alternatives --i…

【全开源】旅游系统小程序(Uniapp+FastAdmin+ThinkPHP)

🌈暑假到来,旅游系统小程序助你畅游无忧!🎒 旅游系统,包含消费者端(手机端)、机构工作人员(手机端)、机构端(PC)、平台管理端(PC&…

Python基础速成

文件操作 文件读取 with open语法 文件写入 注意事项 文件追加 异常、模块与包 捕获异常 捕获方法 捕获传递 模块的导入与自定义 定义 导入方式 自定义 测试模块 注意事项 python包 定义 操作 第三方包 定义 pip指令安装包

实现思路:Vue 子组件高度不固定下实现瀑布流布局

实现思路:Vue 子组件高度不固定下实现瀑布流布局 一、瀑布流布局基础实现原理 在深入解说不定高度子组件的瀑布流如何实现之前,先大体说一下子组件高度固定已知的这种实现原理: 有一个已知组件高度的数组。定义好这个瀑布流的列数&#xff…

新概念英语视频百度云,新概念英语视频百度网盘,新概念1-4册

在现今数字化时代,英语学习资源丰富多样,其中新概念英语视频因其深入浅出的教学风格和丰富多样的学习内容,备受广大英语学习者的青睐。本文旨在为广大英语学习者提供一份详尽的新概念英语视频下载指南,帮助大家轻松获取优质学习资…

Macbook M芯片Homebrew与git的安装与配置

Macbook M芯片Homebrew与git的安装与配置 Homebrew的安装与配置 搜索Homebrew; 找到如下网址https://brew.sh/ 把以上命令复制到终端 执行后,发现并不能下载; 如果你像我一样也是不通的,可以使用国内源,将如下命令复制到终端:…