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

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

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

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

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

解决方法:

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

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

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

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...