我遇到了在不同环境中执行cucumber-jvm场景的问题。包含在方案的功能文件中的数据属于一个环境。要在不同的环境中执行场景,我需要根据要执行的环境更新功能文件中的数据。
例如,在以下场景中,我有特征文件中包含的搜索条件。搜索条件适用于QA env。
Scenario: search user with valid criteria
Given user navigated to login page
And clicked search link
When searched by providing search criteria
|fname1 |lname1 |address1|address2|city1|state1|58884|
Then verify the results displayed
它在QA环境中运行良好。但是要在其他环境(UAT,stage ..)中执行相同的场景,我需要根据这些环境中的数据修改要素文件中的搜索条件。
我正在考虑维护不同环境的属性文件中的场景数据,并根据执行环境进行读取。
如果数据在属性文件中,则场景如下所示。我会给出propertyName:
而不是搜索条件Scenario: search user with valid criteria
Given user navigated to login page
And clicked search link
When searched by providing search criteria
|validSearchCriteria|
Then verify the results displayed
有没有其他方法可以维护所有环境的场景数据,并根据场景执行的环境使用它?请告诉我。
由于
答案 0 :(得分:3)
你可以用两种方式做到这一点
按下编程,以便按照运行黄瓜的方式传递搜索条件
按下编程,以便您的步骤定义使用环境来决定从哪里获取有效的搜索条件
这两个都涉及编写一个更抽象的功能,但没有指定搜索条件的细节。所以你应该得到一个类似
的功能Scenario: Search with valid criteria
When I search with valid criteria
Then I get valid results
我将使用第二种方法实现它,并按如下方式编写步骤定义:
When "I search with valid criteria" do
search_with_valid_criteria
end
module SearchStepHelper
def search_with_valid_criteria
criteria = retrieve_criteria
search_with criteria
end
def retrieve_criteria
# get the environment you are working in
# use the environment to retrieve the search criteria
# return the criteria
end
end
World SearchStepHelper
请注意,我所做的就是将功能的位置从功能更改为模块中的辅助方法。
这意味着当您使用适当的编程语言(而不是功能)进行编程时,您可以做任何您想要的事情来获得正确的标准。
答案 1 :(得分:3)
我理解这个问题,但我不太了解这个例子,所以请允许我提供我自己的例子来说明如何解决这个问题。
让我们假设我们测试一个图书馆管理软件,在我们的开发环境中,我们的测试数据有Leo Tolstoy的3本书。
我们可以有这样的测试用例:
Scenario: Search by Author
When I search for "Leo Tolstoy" books
Then I should get result "3"
现在让我们假设我们创建了QA测试环境,在那个环境中我们有Leo Tolstoy的5本书。问题是我们如何修改我们的测试用例,以便它在两种环境中都有效?
一种方法是使用标签。例如:
@dev_env
Scenario: Search by Author
When I search for "Leo Tolstoy" books
Then I should get result "3"
@qa_env
Scenario: Search by Author
When I search for "Leo Tolstoy" books
Then I should get result "5"
这里的问题是我们有很多代码重复。我们可以通过使用Scenario Outline来解决这个问题:
Scenario Outline: Search by Author
When I search for "Leo Tolstoy"
Then I should see "<number_of_books>" books
@qa_env
Examples:
| number_of_books |
| 5 |
@dev_env
Examples:
| number_of_books |
| 3 |
现在,当您执行测试时,您应该在开发环境中使用@dev_env标记,在QA环境中使用@qa_env。
我很高兴听到其他一些方法来解决这个问题。
答案 2 :(得分:1)
这可能已在其他地方得到解答,但我目前合作的团队倾向于将环境特定的前提条件推入步骤定义背后的代码中。
执行此操作的一种方法是在运行测试运行器类的过程中将环境名称设置为环境变量。一个例子可能是 $ ENV 设置为&#39; Dev&#39;。然后 @Before 测试每个场景,可以验证场景正在执行的环境,并加载场景所需的任何特定于环境的数据:
@Before
public void before(Scenario scenario) throws Throwable {
String scenarioName = scenario.getName();
env = System.getenv("ENV");
if (env == null) {
env = "Dev";
}
envHelper.loadEnvironmentSpecificVariables();
}
我们在此设置默认&#39; &#39; Dev&#39;的价值如果在没有设置环境变量的情况下运行测试运行器。 envHelper 指向一个测试实用程序类,其方法为loadEnvironmentSpecificVariables(),它可以从JSON,csv,XML文件加载数据,其中包含特定于要测试的环境的数据。
这种方法的一个优点是,它可以帮助将特征文件从可能分散注意力的环境元数据中解除杂乱,这可能会影响开发和测试域之外的功能的可读性。