我想在功能文件中使用占位符,如下所示:
dev
uat
等的值取决于执行测试的环境(stage
,prod
,Map<String, String>
或{{1} })。因此,情景大纲不适用于这种情况。
有没有标准方法可以做到这一点?理想情况下,会有一些维护@Before
的内容可以在public class MyStepdefs {
@When("^I send GET "(.*)"$)
public void performGET(final String url) {
// …
}
}
左右填充,并在Cucumber和Step Definition之间自动运行,这样在步骤定义中不需要代码。
给出以下步骤定义
performGET()
一个适当的设置,当调用${server1}
时,String uri
中的占位符Map
应该已经替换为-des3
中的值的查找。
Cucumber-Java有这样的标准方法或功能吗?我不介意这是否涉及依赖注入。如果涉及依赖注入,我更喜欢Spring,因为在我的用例中Spring已经被用于其他原因。
答案 0 :(得分:2)
简单的答案是你做不到。
您的问题的解决方案是从您的方案中一起删除附带的详细信息,并在步骤定义中访问特定的服务器信息。
我会通过改写故事来解决这个问题:
Feature: Talk to two services
Scenario: Forward foobar data from Service A to Service B
Given "Service A" has key-value information
When I forward the foobar data from "Service A" to "Service B"
Then "Service B" has received the key-value information
现在我们有两个实体Service A和Service B,您可以创建一个ServiceInformationService来查找有关Service A和B的信息。您可以将此ServiceInformationService注入到步骤定义中。
因此,当您需要有关服务A的某些信息时,您可以
Service a = serviceInformationService.lookup("A");
String apiHost = a.getApiHost():
String dbHost = a.getDatabaseHOst():
在服务的实现中,您查找该服务的属性System.getProperty(serviceName + "_" + apiHostKey)
,并确保您的CI设置A_APIHOST和A_DBHOST,B_APIHOST,B_DBHOST等。
您可以将集合的名称放在您查找的属性文件中,方法与查找系统属性的方式类似。虽然如果可能,我会避免与数据库直接交互。
答案 1 :(得分:1)
gherkin with qaf支持您要查找的功能。它支持使用${prop.key}
使用属性文件中定义的属性。此外,它还提供强大的resource configuration功能,可用于不同的环境。它还支持web-services