为黄瓜中的每个步骤分配一个 ID

Posted

技术标签:

【中文标题】为黄瓜中的每个步骤分配一个 ID【英文标题】:To assign an Id to every step in cucumber 【发布时间】:2021-06-16 15:09:55 【问题描述】:

我正在寻找在黄瓜中对步骤进行分组的方法,是否可以为每个步骤附加一个 ID?

【问题讨论】:

【参考方案1】:

PickleStepTestStep 在运行时已经附加了一个唯一 ID。一种获取方式是通过如下插件

    import io.cucumber.plugin.EventListener;
    import io.cucumber.plugin.event.*;
    
    import java.net.URI;
    import java.util.Map;
    import java.util.TreeMap;
    import java.util.UUID;
    
    public class    ReportPlugin implements EventListener 
    
     private final Map<String, UUID> startedSteps = new TreeMap<String, UUID>();
     private final Map<String, Status> finishedCases = new TreeMap<String, Status>();
    
       @Override
        public void setEventPublisher(EventPublisher publisher) 
            
            publisher.registerHandlerFor(TestStepStarted.class, this::handleTestStepStarted);
        publisher.registerHandlerFor(TestCaseFinished.class, this::handleTestCaseFinished);

        
    
    private void handleTestStepStarted(TestStepStarted event) 
            startedSteps.put(event.getTestStep().toString(), event.getTestStep().getId());
            for (Map.Entry<String, UUID> entry : startedSteps.entrySet()) 
                    String location = entry.getKey();
                    UUID uuid = entry.getValue();
                    System.out.println(location + " ###fromTestStepStarted### " + uuid);
            
             //above prints
            //io.cucumber.core.runner.PickleStepTestStep@5a5c128 ###fromTestStepStarted### 7f964f1c-9442-43fc-97e9-9ec6717eb47f
           // io.cucumber.core.runner.PickleStepTestStep@77b919a3 ###fromTestStepStarted### a5d57753-aecb-40a0-a0cf-76bef7526dd8

                
        

      //If you would like to get each test step text you do this

    private void handleTestCaseFinished(TestCaseFinished event) 
        
        
        TestCase testCase = event.getTestCase();
        String scenarioName = testCase.getName();

        TestStep testStep = testCase.getTestSteps().get(0);
        if (testStep instanceof PickleStepTestStep) 
            PickleStepTestStep pickleStepTestStep  = (PickleStepTestStep) testStep;
            String text = pickleStepTestStep.getStep().getText();
            System.out.println("****Pickle Step TestStep*****"+  text);

           //above prints
          //****Pickle Step TestStep*****I open the site ""  
            

      
        

   

要运行上述类 - 将类与您的步骤定义或支持类放在一起,然后在 junit-platform.properties(对于 Junit5)中提及这样的插件

cucumber.plugin = com.test.support.ReportPlugin

对于 Junit4,您可能需要将插件添加到您的运行器类

当您运行测试时,您应该会在控制台上看到打印的所有内容

【讨论】:

是的,我想将多个步骤分组到一个 ID。为此,这是行不通的

以上是关于为黄瓜中的每个步骤分配一个 ID的主要内容,如果未能解决你的问题,请参考以下文章

无法为场景步骤创建黄瓜表达式

如何在每个场景之后执行拆除以释放资源在使用黄瓜的宁静BDD中

在大型代码库/团队中重用黄瓜步骤

黄瓜问题:步骤未实施

我如何刻意说黄瓜跳过当前场景中的其余步骤(java)

自动运行黄瓜表