隔离的PHP测试环境

时间:2011-04-25 21:02:39

标签: php git testing

我正在将Git repo集成到公司工作流程中,而老板希望能够在部署到生产之前测试php代码。目标是有三个环境:开发,测试和生产。

因此工作流程将类似于:

  • 克隆到本地开发者的回购
  • 将更改推送至repo
  • 将更改从repo拉到测试环境
  • 在测试环境中测试更改,以向管理人员显示网站 将在将更改提取到实时环境后的外观和行为
  • 获得批准后,将更改从回购中提取到生产环境

现在,这里有几个捕获:

  1. 该公司希望使用来自实时环境的实际数据来更好地判断程序在测试环境中是否正常运行。我很乐意保持数据同步,并且实际上每晚都会将实时数据库同步到测试数据库。
  2. 该程序定期向客户发送电子邮件,因此我需要一种方法来拦截对mail()的任何调用,并将该尝试重定向到日志文件或其他电子邮件地址。
  3. 该程序还处理计费,但我相信我可以将支付处理器集成从实时切换到沙盒环境(即paypal,auth.net等)。
  4. 我很感激有关如何做到这一点的任何想法和想法。

    谢谢!

4 个答案:

答案 0 :(得分:3)

在我们的登台服务器上,我已将本地smtp配置为删除除白名单中某些地址之外的所有邮件。这样,客户就不会收到来自暂存环境的任何邮件。

对于其他外部服务,我在测试模式下运行它们,如果它们支持或以其他方式使用存根。后者意味着我们无法测试最后的积分点,但这是可以接受的。

答案 1 :(得分:2)

我之前已经看过类似的方法写入应用程序,并看到以下实现:

  • 用于构建/发送所有出站电子邮件的标准“邮件”类。这样,您可以轻松地修改dev / staging环境中的行为。一个很好的方法是将该系统的所有电子邮件发送到共享邮箱或登录用户的电子邮件地址(执行测试),并在邮件中包含一个标题,说明它来自测试平台如果它正在生产,它本来会被发送给谁。
  • 在其他设置中,我看到MTA配置为黑洞邮件
  • 明确定义了让应用程序检测其运行环境的方法,以便了解如何操作。在Apache配置中设置的环境变量(我猜你正在使用Apache)来检测平台,然后配置功能,允许您从一组常用选项继承并在必要时重载特定选项。 Zend Framework的Zend_Config处理得非常好。
  • 为了方便您的代码测试或更换组件,良好的OO设计和Dependency Injection将真正有助于您测试的能力
  • 考虑使用某种类型的持续集成工具,如Hudson或PHP Under Control
  • 考虑使用Capistrano或Phing以便轻松部署到不同的平台

答案 2 :(得分:1)

  1. 数据需要多准确?它是否需要 生产数据,或只是喜欢它?无论何时进行架构更改,您都可以手动运行导入。

  2. 此处的另一个替代方案是在包含联系人的数据库表上运行更新,这些联系人会在实时电子邮件地址的末尾添加“.invalid”或其他内容,而不需要任何其他配置。

  3. 您的付款授权的沙盒环境必然是您正在使用的网关的功能。

  4. 我喜欢James C提到依赖注入。注入的依赖项将模糊生产和测试环境之间的界限,而无需进行大量配置。这肯定会让你的生活更轻松。

答案 3 :(得分:0)

  1. 如果你有一个大型数据集,这将是乏味的。如果您使用的是MySQL,则可以捕获bin日志并在测试时重新运行它们以保持数据同步。

  2. 这可以使用环境变量或配置来实现,如果使用的环境是测试环境,则使用调试邮件ID。

  3. 与上述配置相同。

  4. 请注意,当使用git推送到远程仓库时,repo需要裸露,否则你将不得不破解它。