Cucumber场景如何根据环境实现不同的数据
How to implement different data for cucumber scenarios based on environment
我在不同环境中执行 cucumber-jvm 方案时遇到问题。包含在场景特征文件中的数据属于一个环境。为了在不同的环境中执行场景,我需要根据要执行的环境更新功能文件中的数据。
例如,在下面的场景中,我将搜索条件包含在特征文件中。搜索条件对假设 QA 环境有效。
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
有没有其他方法可以维护所有环境的场景数据并根据场景执行的环境使用它?请告诉我。
谢谢
您可以通过两种方式做到这一点
把编程往上推,让你顺便传入搜索条件运行 cucumber
下推编程,以便您的步骤定义使用环境来决定从何处获取有效搜索条件
这两个都涉及编写一个更抽象的功能,不指定搜索条件的细节。所以你最终应该得到一个类似于
的功能
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
请注意,我所做的只是将您工作的位置从功能更改为模块中的辅助方法。
这意味着当您使用适当的编程语言(而不是功能)进行编程时,您可以做任何您想做的事情以获得正确的标准。
我明白这个问题,但我不太明白这个例子,所以请允许我提供我自己的例子来说明如何解决这个问题。
假设我们测试了一个图书馆管理软件,并且在我们的开发环境中,我们的测试数据有 3 本 Leo Tolstoy 的书。
我们可以有这样的测试用例:
Scenario: Search by Author
When I search for "Leo Tolstoy" books
Then I should get result "3"
现在假设我们创建了 QA 测试环境,并且在该环境中我们有 5 本书 Leo Tolstoy 的书。问题是我们如何修改我们的测试用例以使其在两种环境中都能正常工作?
一种方法是使用标签。例如:
@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: 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标签。
我很高兴听到其他解决此问题的方法。
这可能在别处得到了回答,但我目前合作的团队倾向于将特定于环境的先决条件下推到步骤定义背后的代码中。
一种方法是在 运行 测试 运行ner [=32] 过程中将环境名称设置为 环境变量 =].例如可以将 $ENV 设置为 'Dev'。然后@Before测试每个场景,可以验证执行场景的环境并加载场景所需的任何环境特定数据:
@Before
public void before(Scenario scenario) throws Throwable {
String scenarioName = scenario.getName();
env = System.getenv("ENV");
if (env == null) {
env = "Dev";
}
envHelper.loadEnvironmentSpecificVariables();
}
这里我们设置一个 'default' 值 'Dev' 以防测试 运行ner 是 运行 而没有设置环境变量。 envHelper 指向一个测试实用程序 class,其方法为 loadEnvironmentSpecificVariables(),可以从 JSON、csv、XML 文件加载数据特定于正在测试的环境。
这种方法的一个优点是它可以帮助消除可能分散注意力的环境 元数据 的功能文件,这可能会影响功能在开发之外的可读性和测试域。
我在不同环境中执行 cucumber-jvm 方案时遇到问题。包含在场景特征文件中的数据属于一个环境。为了在不同的环境中执行场景,我需要根据要执行的环境更新功能文件中的数据。
例如,在下面的场景中,我将搜索条件包含在特征文件中。搜索条件对假设 QA 环境有效。
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
有没有其他方法可以维护所有环境的场景数据并根据场景执行的环境使用它?请告诉我。
谢谢
您可以通过两种方式做到这一点
把编程往上推,让你顺便传入搜索条件运行 cucumber
下推编程,以便您的步骤定义使用环境来决定从何处获取有效搜索条件
这两个都涉及编写一个更抽象的功能,不指定搜索条件的细节。所以你最终应该得到一个类似于
的功能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
请注意,我所做的只是将您工作的位置从功能更改为模块中的辅助方法。
这意味着当您使用适当的编程语言(而不是功能)进行编程时,您可以做任何您想做的事情以获得正确的标准。
我明白这个问题,但我不太明白这个例子,所以请允许我提供我自己的例子来说明如何解决这个问题。
假设我们测试了一个图书馆管理软件,并且在我们的开发环境中,我们的测试数据有 3 本 Leo Tolstoy 的书。
我们可以有这样的测试用例:
Scenario: Search by Author
When I search for "Leo Tolstoy" books
Then I should get result "3"
现在假设我们创建了 QA 测试环境,并且在该环境中我们有 5 本书 Leo Tolstoy 的书。问题是我们如何修改我们的测试用例以使其在两种环境中都能正常工作?
一种方法是使用标签。例如:
@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: 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标签。
我很高兴听到其他解决此问题的方法。
这可能在别处得到了回答,但我目前合作的团队倾向于将特定于环境的先决条件下推到步骤定义背后的代码中。
一种方法是在 运行 测试 运行ner [=32] 过程中将环境名称设置为 环境变量 =].例如可以将 $ENV 设置为 'Dev'。然后@Before测试每个场景,可以验证执行场景的环境并加载场景所需的任何环境特定数据:
@Before
public void before(Scenario scenario) throws Throwable {
String scenarioName = scenario.getName();
env = System.getenv("ENV");
if (env == null) {
env = "Dev";
}
envHelper.loadEnvironmentSpecificVariables();
}
这里我们设置一个 'default' 值 'Dev' 以防测试 运行ner 是 运行 而没有设置环境变量。 envHelper 指向一个测试实用程序 class,其方法为 loadEnvironmentSpecificVariables(),可以从 JSON、csv、XML 文件加载数据特定于正在测试的环境。
这种方法的一个优点是它可以帮助消除可能分散注意力的环境 元数据 的功能文件,这可能会影响功能在开发之外的可读性和测试域。