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

Windows本地无Docker环境下AWS Glue Spark代码开发测试及报错解决

AWS Glue Spark代码本地单元测试与Sonar覆盖率解决方案

针对你在Windows环境下遇到的核心问题,给出以下实操方案:

一、解决ModuleNotFoundError(找不到dynamicframe模块)

现有第三方模拟库无效时,直接手动构建最小化的Glue模块Mock:

  • 创建本地Mock目录结构:在项目根目录下新建mock_awsglue/awsglue文件夹
  • 在mock_awsglue/awsglue下创建dynamicframe.py,仅模拟业务代码中实际用到的DynamicFrame核心方法,示例如下:
    from pyspark.sql import DataFrame
    
    class DynamicFrame:
        def __init__(self, df: DataFrame, name: str):
            self.df = df
            self.name = name
    
        @staticmethod
        def fromDF(df: DataFrame, glue_ctx, name: str):
            return DynamicFrame(df, name)
    
        def selectFields(self, paths):
            selected_df = self.df.select(paths)
            return DynamicFrame(selected_df, self.name)
    
        def toDF(self):
            return self.df
    
  • 在测试代码最开头添加路径配置,让Python优先加载本地Mock模块:
    import sys
    sys.path.insert(0, './mock_awsglue')
    

二、解决awsglue.utils.GlueArgumentError(缺少--JOB_NAME参数)

通过Mock Glue的参数解析方法绕过必填参数校验:

  • 使用unittest.mock模块替换awsglue.utils.getResolvedOptions方法(以pytest为例):
    from unittest.mock import patch
    import pytest
    from your_glue_job_code import main  # 导入你的业务代码入口
    
    @patch('awsglue.utils.getResolvedOptions')
    def test_glue_job_logic(mock_get_resolved_options):
        # 模拟返回必填的JOB_NAME参数
        mock_get_resolved_options.return_value = {'JOB_NAME': 'local-test-job'}
        # 执行业务代码测试逻辑
        main()
        # 添加断言验证结果
        assert ...
    
  • 若不用pytest,也可在测试代码开头直接设置环境变量(简单场景适用):
    import os
    os.environ['JOB_NAME'] = 'local-test-job'
    

三、生成Sonar覆盖率报告

  • 用coverage.py生成Sonar兼容的覆盖率数据:
    # 安装coverage工具
    pip install coverage
    # 运行测试并收集覆盖率
    coverage run -m pytest tests/
    # 生成Sonar可识别的xml报告
    coverage xml -o coverage.xml
    
  • 将生成的coverage.xml与业务代码一同提交给SonarQube扫描即可,Mock模块不会影响业务代码的覆盖率统计。

内容的提问来源于stack exchange,提问作者srikanth sanapathi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 13:01:09