是否可以根据Behat的当前环境使用不同的步骤数据?

时间:2013-07-03 20:47:28

标签: php continuous-integration integration-testing functional-testing behat

我遇到了一个难题。我们有一个过时的系统,我正在编写Behat测试。它在大多数情况下都很有效。但是我注意到如果我针对当前环境测试的数据是针对/从不同环境中提取的,那么Behat测试将失败的问题。

例如,如果我在QA中通过电话功能测试搜索并期望它返回特定的实体ID,我就不能使用相同的电话号码和实体ID来在RC或Live中进行测试。所以我想要一种可管理的方法来维护Behat中每个环境的测试数据。

这里有一些想法,例如将数据放入配置文件(非常不受欢迎)或为每个功能创建CSV文件。我还在考虑使用表或场景大纲构建所有特定于数据的场景,并且具有一个环境列,用于检查当前环境,并在行不适用于当前环境时跳过。也许使用背景或其他一些钩子来帮助解决这个问题。

有没有人知道使用Behat处理具有不同数据集的多个环境的好方法或最佳实践?

1 个答案:

答案 0 :(得分:5)

根据KNP实验室的一次培训,最佳实践是为场景创建必要的数据,以便成为“给定”或“背景”的一部分,这样您最终会得到一个步骤:“我有7个电话号码“和步骤定义插入七个电话号码,可以依赖于该场景的其余部分。

当然,如果您希望针对生产站点运行测试,这通常是不可行的,而我所看到的策略实际上取决于所涉及的特定数据量以及数据在生产中的易变性。

由于最佳实践还要求功能文件应以功能受益人可合理预期理解的方式描述应用程序行为,因此在功能文件中暴露环境条件数据的任何事情都不太可能是最佳方法。目标功能用户可能不了解不同的环境。

如果生产的数据足够稳定以编写测试,我会考虑在behat.yml中设置一个参数或配置文件,该参数或配置文件可用于在运行时指示环境并编写自定义步骤定义。自定义步骤定义可以在一种情况下提供已知的生产值,并在其他情况下插入这些值。并且Gherkin仍然看起来像“鉴于我有7个电话号码”,因此该功能将关注业务价值和对用户的好处,而不是测试环境。