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

GitHub Actions CI/CD中Python断言错误排查(AWS SAM部署场景)

问题原因分析

核心矛盾:返回体格式与测试断言预期不匹配

  • app.py中Lambda函数返回的body是纯字符串格式的访问计数(例如"39"),直接返回了visit_count变量的原始值。
  • 但test_handler.py的测试逻辑要求body是包含visit_count键的JSON字符串,执行assert "visit_count" in ret["body"]时,实际是检查字符串"39"中是否包含子串"visit_count",显然不成立,触发AssertionError。

代码细节对比

当前app.py的返回格式(不符合测试预期)

return {
    'statusCode': 200,
    'headers': {
        'Access-Control-Allow-Headers': '*',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': '*'
    },
    'body': visit_count  # 直接返回数字字符串
}

测试用例的预期格式

测试后续执行json.loads(ret["body"])["visit_count"],说明期望body是JSON序列化后的对象,格式应为:

{"visit_count": "39"}
修复方案(二选一即可)

方案1:修改app.py,返回符合测试预期的JSON格式

将返回的body封装为包含visit_count键的JSON对象并序列化:

return {
    'statusCode': 200,
    'headers': {
        'Access-Control-Allow-Headers': '*',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': '*'
    },
    'body': json.dumps({"visit_count": visit_count})  # 转为JSON格式字符串
}

方案2:修改test_handler.py,适配当前app.py的返回格式

如果不需要调整Lambda的返回逻辑,直接修改测试断言:

# 替换原有的statusCode分支判断代码
if ret["statusCode"] == 200:
    assert ret["body"].isnumeric()  # 直接验证body是合法数字字符串
else:
    assert ret["body"] == "-1"

额外优化建议

当前app.py硬编码了表名'resume-website-app-tbl',但测试用例尝试从环境变量TABLENAME读取表名,二者不统一,后续可能出现环境不一致问题,建议将表名改为从环境变量获取:

import os
table = dynamodb.Table(os.environ['TABLENAME'])

内容的提问来源于stack exchange,提问作者Justin Henson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:35:51