You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器中pytest执行两次的原因及解决办法

解决Docker中pytest重复执行Lambda测试的问题

1. 调整Lambda handler执行逻辑

Lambda的handler函数仅应在被SAM invoke触发时执行测试,避免容器初始化阶段意外触发。修改测试脚本(如test_lambda.py),添加判断逻辑:

import pytest

def lambda_handler(event, context):
    # 仅在Lambda事件触发时运行测试
    pytest.main(["-v", "/path/to/your/tests"])
    return {"statusCode": 200, "body": "Tests completed"}

# 避免脚本直接运行时执行测试
if __name__ == "__main__":
    pass

2. 修正SAM模板配置

检查template_pytest.yaml中的Runtime和Handler配置,确保指向正确入口:

Resources:
  TestFunction:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: .
      Handler: test_lambda.lambda_handler
      Runtime: python3.11 # 匹配你使用的Python版本

3. 排查容器初始化错误

Init failed错误多因运行时找不到正确handler或脚本初始化阶段抛异常,可通过以下方式排查:

  • 确认sam build生成的.aws-sam目录下代码结构正确,handler路径无误
  • 在handler函数开头添加日志,确认执行时机:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def lambda_handler(event, context):
    logger.info("Lambda handler triggered")
    pytest.main(["-v", "/path/to/your/tests"])
    return {"statusCode": 200, "body": "Tests completed"}

4. 调整SAM invoke执行方式

不要直接将测试脚本作为事件传入,改用空事件或专用触发事件:

sam build -t template_pytest.yaml && sam local invoke TestFunction -e event.json

其中event.json为简单JSON文件:

{}

通过以上调整,可确保pytest仅在Lambda handler被正确触发时执行一次,同时解决容器初始化失败问题。

内容的提问来源于stack exchange,提问作者crushing necessity

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:11