Java 如何在Cucumber步骤中将Cucumber功能文件中的场景名称作为参数传递?

Java 如何在Cucumber步骤中将Cucumber功能文件中的场景名称作为参数传递?,java,cucumber,gherkin,Java,Cucumber,Gherkin,我需要一些帮助,如果有人能帮忙,我会很感激的 我需要将Cucumber功能文件中的场景名称作为步骤中的参数传递 在后台步骤中-我启动浏览器并登录到应用程序,这样我就不必在每个场景中重复相同的步骤。有一种JAVA方法可以为后台测试中使用的GUI启动视频录制-视频录制将用于各个场景-因此,如果功能文件中有10个场景-视频录制需要提供10个输出,显示这10个场景的自动运行。视频录制捕获方法根据将要传递的参数保存文件名 例如,我在功能文件中的场景是: Feature: Do Something Bac

我需要一些帮助,如果有人能帮忙,我会很感激的

我需要将Cucumber功能文件中的场景名称作为步骤中的参数传递


在后台步骤中-我启动浏览器并登录到应用程序,这样我就不必在每个场景中重复相同的步骤。有一种JAVA方法可以为后台测试中使用的GUI启动视频录制-视频录制将用于各个场景-因此,如果功能文件中有10个场景-视频录制需要提供10个输出,显示这10个场景的自动运行。视频录制捕获方法根据将要传递的参数保存文件名

例如,我在功能文件中的场景是:

Feature: Do Something

Background:
    Given I start the recording for the scenario "Pass the scenario name here"
    And I navigate to the login page
    When I submit username and password
    Then I should be logged in 

Scenario: Scenario Name
    Given I start the test for "Scenario Name"
    Then it should do something
    And stop the recording

Scenario: Scenario Name 2
    Given I start the test for "Scenario Name 2"
    Then it should do something
    And stop the recording

如何在步骤中将场景名称作为参数传递?

开始记录测试执行不属于您的测试。正如你所发现的,实现你想要的是非常困难的

这是我们可以提供帮助的地方:

@Binding
public class TestRecorder {
    private final VideoRecorder videoRecorder;

    public TestRecorder() {
        this(new VideoRecorder(...));
    }

    public TestRecorder(VideoRecorder videoRecorder) {
        this.videoRecorder = videoRecorder;
    }

    @Before
    public void BeginRecording(Scenario scenario) {
        String scenarioName = scenario.getName();

        // do something with scenarioName and start recording...
        videoRecorder.start();
    }

    @After
    public void StopRecording(Scenario scenario) {
        String scenarioName = scenario.getName();

        // Stop recording, and use scenarioName to save to a file
        videoRecorder.stop();
    }
}
在场景开始之前,开始录像。TestRecorder类可以声明私有字段来保存对录像机的引用。传递给前后场景挂钩(BeginRecording和StopRecording)的
Scenario
对象提供了有关场景的信息,包括名称。这应该足以将视频录制保存到使用场景名称作为文件名的文件中

由于这只是一个POJO,您也可以为视频录制功能编写一些单元测试(如果您真的需要)

现在,您的cucumber测试可以专注于被测系统,而不是监视测试的系统:

Feature: Do Something

Background:
    Given I navigate to the login page
    When I submit username and password
    Then I should be logged in 

Scenario: Scenario Name
    When I do the thing
    Then it should do something

Scenario: Scenario Name 2
    When I do the thing
    Then it should do something

无需从功能文件传递方案名称。这一切都是在cucumber钩子中“幕后”完成的。

开始记录测试执行并不属于cucumber测试。正如你所发现的,实现你想要的是非常困难的

这是我们可以提供帮助的地方:

@Binding
public class TestRecorder {
    private final VideoRecorder videoRecorder;

    public TestRecorder() {
        this(new VideoRecorder(...));
    }

    public TestRecorder(VideoRecorder videoRecorder) {
        this.videoRecorder = videoRecorder;
    }

    @Before
    public void BeginRecording(Scenario scenario) {
        String scenarioName = scenario.getName();

        // do something with scenarioName and start recording...
        videoRecorder.start();
    }

    @After
    public void StopRecording(Scenario scenario) {
        String scenarioName = scenario.getName();

        // Stop recording, and use scenarioName to save to a file
        videoRecorder.stop();
    }
}
在场景开始之前,开始录像。TestRecorder类可以声明私有字段来保存对录像机的引用。传递给前后场景挂钩(BeginRecording和StopRecording)的
Scenario
对象提供了有关场景的信息,包括名称。这应该足以将视频录制保存到使用场景名称作为文件名的文件中

由于这只是一个POJO,您也可以为视频录制功能编写一些单元测试(如果您真的需要)

现在,您的cucumber测试可以专注于被测系统,而不是监视测试的系统:

Feature: Do Something

Background:
    Given I navigate to the login page
    When I submit username and password
    Then I should be logged in 

Scenario: Scenario Name
    When I do the thing
    Then it should do something

Scenario: Scenario Name 2
    When I do the thing
    Then it should do something

无需从功能文件传递方案名称。在cucumber hooks中“幕后”完成了所有操作。

您用什么语言编写步骤定义?步骤定义代码在后台是Java:我想将场景名称作为参数传递-我的后台步骤是-如果我开始录制“这就是我想将场景名称作为参数传递的地方”。。。在各自的场景中-我想添加最后一步作为-我停止录制“这是我想再次传递场景名称的地方”。。。参数是两个方法应使用的场景名称。。现在有意义了吗?对不起,黄瓜本来就不是这样用的。这背后有一种哲学。我强烈推荐阅读和。在后台步骤中,我启动浏览器并登录到应用程序,这样我就不必在每个场景中重复相同的步骤。有一种JAVA方法可以为正在测试的GUI启动视频录制—视频录制将针对各个场景进行—因此,如果功能文件中有10个场景—视频录制需要提供10个输出,显示这10个场景的自动运行。视频录制捕获的方法根据将要传递的arugument保存文件名。您使用什么语言编写步骤定义?步骤定义代码在后台使用Java:我想将场景名称作为参数传递-我的后台步骤是-给定我开始录制“这是我想传递场景名称作为参数的地方”…在各自的场景中-我想添加最后一步作为-我停止录制“这是我想传递场景名称的地方"... 参数是两个方法应使用的场景名称。。现在有意义了吗?对不起,黄瓜本来就不是这样用的。背后有一种哲学。我强烈推荐阅读和。在后台步骤中,我启动浏览器并登录到应用程序,这样我就不必在每个场景中重复相同的步骤。有一种JAVA方法可以为正在测试的GUI启动视频录制—视频录制将针对各个场景进行—因此,如果功能文件中有10个场景—视频录制需要提供10个输出,显示这10个场景的自动运行。视频录制捕获的方法根据将要传递的文件名保存文件名。非常感谢,这是非常好的反馈!:)非常感谢,这是非常好的反馈!:)