在代码开发过程中,通常需要在推送到开发或生产环境之前进行测试。然而,等待GitHub Actions的部署流程,或是通过CDK部署基础设施栈,往往非常耗时。
这类耗时的任务会严重拖慢迭代速度,而迭代速度是高效开发代码的关键因素。这是因为开发者需要充分测试实现方案以确保其正常工作,并且在每次更改后都需要重新测试。
借助最新的智能编码助手,编写完整的本地测试脚本变得极其快速,这已成为许多数据科学家和工程师日常编码工作中的常规操作。
本文将阐述为何需要通过运行Docker镜像和发送测试事件来建立高效的本地测试环境。同时,将展示一种实践方法,以及这种方法如何帮助工程师提升效率。
讨论将主要围绕基础设施即代码(IaC)展开,因为这是日常工作中经常接触的领域。然而,高效本地运行代码的理念适用于所有类型的编程工作。

这张信息图概括了本文的核心内容。文章将阐述缓慢的迭代速度如何限制开发者的能力,以及如何通过创建本地代理生产环境来加速开发。同时,也会介绍如何让编码助手访问本地测试脚本,以实现更高的迭代速度。图片由Gemini生成。
为何需要在本地运行代码
首先,需要明确在本地运行代码的必要性。简单来说,原因在于:
迭代速度是将可运行代码高效推送到生产环境的最重要因素之一
代码的迭代速度越快越好。当开发新功能(或修复旧功能)时,开发者希望快速测试其是否有效,然后迭代修复代码,直到其按预期工作。
如果每次测试前都需要等待5-15分钟的代码部署时间,就会遇到严重问题。每当无法一次性解决问题时,就会浪费5-15分钟仅仅用于等待部署。
相反,应该在本地运行代码。例如,如果使用AWS CDK等IaC工具,可以在本地构建和运行Docker镜像,从而在自己的计算机上基本复制生产环境。这样,迭代循环变得简单,耗时主要在于构建Docker镜像和运行代码本身。
考虑到Docker会缓存之前的构建,构建镜像通常非常快。因此,大部分时间可能花在运行带有测试输入的代码以及验证输出是否符合预期上。
如果开发的是Web应用程序,很可能已经在部署代码之前在本地运行应用了。处理IaC时也应采用同样的思路。
如何在本地模拟生产环境进行开发
本地开发的一个重要方面是能够紧密复制生产环境。如果编写IaC、构建Docker镜像并在本地运行:
那么测试的就是完全相同的代码,具有相同的输入路径。如果将本地的.env文件与生产环境的.env文件镜像同步,也就镜像了所有环境变量。因此,如果条件允许,在本地运行Docker镜像是理想的选择。
使用编码助手创建本地脚本
在Cursor、Claude Code等编码助手出现之前,设置本地运行环境通常是一项繁琐的任务。需要正确构建Docker镜像,设置其使用.env文件运行等等。或者,可能希望将代码作为FastAPI服务器在本地运行,这也会面临类似的挑战。
然而,现在这已不再是问题。要开始在本地运行,通常可以向Cursor提供以下指令:
为我创建一个用于在本地运行此代码的shell脚本。该shell脚本
应运行docker镜像,并包含一个可选的--build标志,用于在运行前构建
docker镜像。docker镜像应从.env文件加载环境变量。
这会创建一个高效可用的shell脚本。可选的–build标志很有用,因为构建Docker镜像有时很耗时,而且并非每次运行前都需要重新构建。
此外,以下因素使得运行脚本变得容易:
- 不在.env文件中存储实际密钥。只存储密钥引用,代码随后从AWS Secrets Manager等位置获取。因此,可以推送.env文件而无需担心泄露密钥。这也使得其他人在从GitHub拉取代码时更容易运行脚本。
- 创建另一个包含测试事件的文件,可以轻松地将事件发送到正在运行的Docker镜像。这样可以方便地检查输入和输出。
- 将测试脚本部署到Git,以便团队其他成员也能访问。这包括前面提到的.env文件,因为它不包含任何密钥。
现在,就拥有了运行和测试本地代码所需的确切设置。每次进行更改时,重新构建Docker镜像并发送测试事件,确保一切按预期工作。
建议为所有代码仓库设置这些本地测试脚本,并将其推送到Git进行共享。访问这些脚本将使整个团队的编程效率得到提升。
本地运行的进阶技巧
在拥有这些本地测试文件的基础上,还有两个额外的技巧可以进一步提升效率:
- 使用预提交钩子(pre-commit hooks)运行和测试Docker镜像
- 让编码助手访问这些脚本
预提交钩子
预提交钩子是在每次提交到git之前运行的代码。典型的预提交钩子包括:
- 运行 black . 进行代码格式化
- 运行 mypy 确保类型安全
- 运行 pytest tests 确保所有测试通过
使用预提交钩子可以保证永远不会忘记在推送代码前运行这些命令。这非常有用,能节省大量时间。很难计数有多少次因为忘记在提交前运行black格式化,导致部署测试在5分钟后失败,浪费了大量时间。
如果构建、运行和测试Docker镜像不是特别耗时,建议也将其添加到预提交钩子中。这样就能保证在推送任何代码之前,已经测试过代码在生产环境中运行,并且对于给定的输入能得到预期的输出。将其实现为预提交钩子,未来可能会节省大量时间。
让编码助手访问测试脚本
第二个技巧是,总是让Cursor和Claude Code等编码助手能够运行测试脚本。然后,指示编码助手在完成更改后、结束当前实现之前,运行测试脚本。
让编码助手运行和测试Docker镜像,将极大提高其一次性成功实现功能的概率
当编码助手实现一个功能后,如果必须手动运行和测试Docker镜像,这会节省大量时间。如果遇到错误,必须将其粘贴到编码助手中,然后循环重复直到代码正常工作。
这是时间的浪费,应该努力避免。让编码助手访问测试脚本,本质上就像是交给它一个工具,这能显著提升软件工程任务的性能。这节省的时间之多,怎么强调都不为过。
结论
本文讨论了如何通过创建在本地构建、运行和测试Docker镜像的脚本,来建立逼真的本地生产环境。这样做降低了迭代周期,而迭代速度是成为高效程序员的关键组成部分。此外,还介绍了实践方法:通过提示Cursor创建测试脚本,以及一些可以在Docker镜像上运行的示例事件。然后,让Cursor和Claude Code能够运行这些脚本,从而极大地提高了编程效率。
快速的迭代速度对于几乎所有软件工程任务都至关重要,是应该努力追求的目标。创建本地测试文件并让编码助手访问它们,能显著提高迭代速度,这正是实践者认为此举极大提升了自身作为程序员的生产力的原因。
免费资源
社交媒体







