生产环境外部资源连通性测试及Github Actions多环境测试配置方案
关于ETL项目数据库测试与多环境CI/CD配置的解答
一、连接真实数据库测试的合理性
对于你的场景是完全合理的:
- 你当前的测试用例是验证数据库连通性,只有真实数据库才能验证账号、网络、权限配置是否正确,mock类工具无法覆盖这类场景
- ETL项目的最终交付结果就是要写入真实数据库,在测试阶段对接真实库做集成验证,可以提前发现驱动兼容、SQL语法差异等问题,避免上线踩坑
- 注意如果是业务逻辑类的单元测试,建议用mock代替真实数据库,执行效率更高,也不会产生数据操作风险
二、多环境分支自动匹配配置方案
要实现master→dev、staging→预发、production→生产的自动匹配,按以下步骤操作:
步骤1:配置Github环境级Secret
不要把所有环境的凭证存在仓库全局Secret中,改为按环境单独存储:
- 进入仓库的Settings → Environments页面
- 依次创建
dev、staging、production三个环境 - 进入每个环境的配置页,在「Environment secrets」下添加对应环境的
SERVER、USERSQL、PWDSQL、DATABASE四个Secret - 可选优化:给
production环境开启「Required reviewers」规则,设置指定的项目管理员作为审批人,生产环境的工作流需要审批后才会执行,避免误操作
步骤2:修改Github Workflow配置
调整后的Workflow配置如下,新增了分支判断、环境匹配、ODBC驱动安装(原Ubuntu镜像默认没有SQL Server驱动,会导致测试执行失败):
name: Tests on: push: # 只在三个核心分支推送时触发测试,其他分支可以根据需求调整 branches: - master - staging - production env: PYTHON_VERSION: '3.8' jobs: Tests: runs-on: ubuntu-latest # 自动根据当前推送的分支匹配对应环境,拉取对应环境的Secret environment: name: ${{ github.ref == 'refs/heads/master' && 'dev' || github.ref == 'refs/heads/staging' && 'staging' || github.ref == 'refs/heads/production' && 'production' }} steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} # 安装SQL Server ODBC 17驱动,解决依赖缺失问题 - name: Install ODBC Driver 17 for SQL Server run: | sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql17 - run: python -m pip install -r my_project/requirements.txt - run: python -m unittest discover my_project "test_*.py" env: SERVER: "${{ secrets.SERVER }}" USERSQL: "${{ secrets.USERSQL }}" PWDSQL: "${{ secrets.PWDSQL }}" PORT: "1433" DATABASE: "${{ secrets.DATABASE }}"
三、多环境测试方案的安全性优化
你提到的删除数据风险确实存在,只要做好以下几层防护,方案就是安全可控的:
- 权限最小化是核心:给每个环境的CI专用数据库账号做最小权限配置:
- dev/staging环境:如果需要跑写入类测试,可以给对应测试库的读写权限,定期重置测试库数据即可
- production环境:只给只读权限,你当前的测试用例只需要查询表列表,SELECT权限完全足够,就算测试代码里包含DELETE/UPDATE等写操作,也会因为权限不足执行失败,不会影响生产数据
- 测试用例分层:给测试用例加标签区分,只有只读类的连通性、兼容性测试允许在生产环境执行,所有修改数据的测试用例仅在dev、staging环境跑
- 临时库隔离:dev、staging环境跑测试时,可以先创建临时测试库,跑完测试自动销毁,完全不影响正常的开发、预发数据
内容的提问来源于stack exchange,提问作者Be Chiller Too
相关产品推荐
相关产品推荐

