我有2个功能文件,即userstoryteacher1.feature
和userstoryteacher2.feature
。基本上,userstoryteacher1.feature
包含两个标签@Dev
和@QA
的步骤。
我想通过以下方式运行功能文件:-
如果我在Cucumber类中通过了@Dev
,@tagteacher
,那么它应该选择dev url来打开带凭据的页面。
如果我在黄瓜类中通过了@QA
,@tagteacher
,那么它应该选择qa url来打开带有凭证的页面。
import org.junit.runner.RunWith;
import com.optum.synergy.common.ui.controller.WebController;
import cucumber.api.CucumberOptions;
import cucumber.api.SnippetType;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(
plugin = { "json:target/test_results/cucumber.json"},
features = { "src/main/resources/ui/features" },
tags ={"@Dev,@tagteacher"},
snippets = SnippetType.CAMELCASE
)
public class CucumberRunnerTest {
public static void tearDown(){
WebController.closeDeviceDriver();
}
}
---------------------------------------------------------------------------
userstoryteacher1.feature file :-
@TestStory
Feature: Teachers timesheet need to be filled
I want to use this template for my feature file
Background:
Scenario Outline: Open Webpage
Given User Open teacher application with given <ENDPOINT>
And Login into application with given <USERNAME> and <PASSWORD>
And User clicks on teacher submission link
@DEV
Examples:
| endpoint | USERNAME | PASSWORD |
| http://teachersheetdev.ggn.com | sdrdev| aknewdev|
@QA
Examples:
| endpoint | USERNAME | PASSWORD |
| http://teachersheetqa.ggn.com | sdrqa | aknewdev|
-----------------------------------------------------------------------------
userstoryteacher2.feature file :-
Feature : I'm at the teachers page
@tagteacher
Scenario: Open app home page and click the button
Given I'm at the teachersheet homepage
When User clicks Add Task button
Then User should see the tasks schedule
答案 0 :(得分:1)
黄瓜的设计使您无法将场景或功能文件链接在一起。每个方案都应作为从头开始的独立“测试”来运行。
使用功能文件编程是一种可怕的反模式。而是将编程推入步骤定义层,或者更好地推入步骤定义使用的助手。
如果您想充分利用黄瓜,就需要使用它来表示正在做的事情及其重要性。从您的示例中可以看出,这似乎与教师填写时间表有关,因此您的情况应该是
Scenario: Fill in timesheet
Given I am a teacher
And I am logged in
When I fill in my timesheet
Then I should see my timesheet has been saved.
您可以在Givens中设置状态,并为创建的每个方案构建帮助程序方法,以便将来的方案可以轻松地设置状态。例如Given I am a teacher
可能类似于
def 'Given I am a teacher' do
teacher = create_new_teacher;
register_teacher(teacher)
return teacher
end
这是在以前的方案的基础上进行的,以注册新教师。如果您遵循这种模式,则可以使用一个简单的Given方法来实现简单的方案,只需使用一个方法调用即可进行大量的设置。这比将多个功能文件链接在一起要好得多!