当前位置: 首页 > 知识库问答 >
问题:

在运行时提取Cucumber步骤名

井誉
2023-03-14

我试图找出是否有一个选项来找出当前正在执行的cucumber步骤,我试图根据步骤名称执行某些操作。

我可以看到StepDefinitionMatch类获得了这些步骤,但我不确定如何在运行时访问这些步骤。有人帮忙吗?如果有帮助,添加调用堆栈的快照。

public StepDefinitionMatch(List<Argument> arguments, StepDefinition stepDefinition, String featurePath, Step step, LocalizedXStreams localizedXStreams) {
    super(arguments, stepDefinition.getLocation(false));
    this.stepDefinition = stepDefinition;
    this.featurePath = featurePath;
    this.step = step;
    this.localizedXStreams = localizedXStreams;
}

共有1个答案

孔琪
2023-03-14

您可以实现一个ConcurrentEventListener,在插件部分中设置它:

@RunWith(Cucumber.class)
@CucumberOptions(
...
plugin = {
   ...,
   "com.mycompany.myproduct.AcceptanceStepNameLogger"
}...

AcceptanceStepNameLogger示例(在本例中,我只需要记录PickleStepTestStep步骤,而不是钩子):

import cucumber.api.*;
import cucumber.api.event.*;

public class AcceptanceStepNameLogger implements ConcurrentEventListener {

    @Override
    public void setEventPublisher(EventPublisher publisher) {

        publisher.registerHandlerFor(TestStepStarted.class, new EventHandler<TestStepStarted>() {
            @Override
            public void receive(TestStepStarted event) {
                if (event.testStep instanceof PickleStepTestStep) {
                    final PickleStepTestStep ev = (PickleStepTestStep) event.testStep;
                    final String args = StringUtils.join(ev.getDefinitionArgument().stream().map(Argument::getValue).toArray(), ",");
                    String testDescription = ev.getStepText() + " : " + ev.getStepLocation();
                    if (StringUtils.isNotBlank(args)) {
                        testDescription += (" : args = (" + args + ")");
                    }
                    System.out.println("STARTING STEP: " + testDescription);
                }
            }
        });

        publisher.registerHandlerFor(TestStepFinished.class, new EventHandler<TestStepFinished>() {
            @Override
            public void receive(TestStepFinished event) {
                if (event.testStep instanceof PickleStepTestStep) {
                    PickleStepTestStep ev = (PickleStepTestStep) event.testStep;
                    final String testDescription = ev.getStepText() + " : " + ev.getStepLocation();
                    System.out.println("FINISHED STEP: " + testDescription);
                }
            }
        });

    }

}
 类似资料:
  • 我需要编写一个类来强制执行关于物品的规则,这些物品可以添加到仓库中的同一个容器中,也可以不添加到仓库中的同一个容器中,我想在实现之前将这些要求转化为Cucumber。 每个项目都有几个属性,例如“项目系列”(例如:电子产品、书籍)、“项目状态”(例如:主要库存、故障库存)和“批次”(例如:10501051)。 我可以想出几种写cucumber测试的策略,我想知道哪一种是推荐的: 首先,您可以列举每

  • 测试步骤: 我试过“abc”,“^abc”,“give abc”...在@gived上 我用下面的bat文件和步骤定义来驱动它,并且类文件就在那里。在-g(glue)选项中,我意识到包名是参数值,所以我尽可能简单地实现了这一点,但我只找到了0个场景。bat文件很简单: 如果*.feature文件是cucumber运行的必要条件,并且即使junit被挂到cucumber.class测试运行程序中,它

  • 步骤1和步骤2是需要在安装网站上运行的安装步骤,并且只需要在chrome上运行一次来为场景创建安装。一旦完成,那么步骤3和步骤4需要在客户端网站上的不同浏览器/设备(即Chrome,Firefox,Safari,Mobile)上进行检查。 我的框架是用Cucumber和JavaScript编写的。我如何在cucumber中实现这一点,场景的一些步骤只在chrome上运行一次,其余的步骤应该在不同的

  • TL:DR控制台不显示缺少步骤的步骤正则表达式 编辑:添加功能文件

  • 这里对Javascript/Cypress比较陌生。我正在使用Cypress Cucumber.js插件运行一些测试。问题是,由于JS的异步特性,我无法使步骤按顺序运行--“then”步骤在“gived etc”之前运行。显然,这成为一个问题,因为测试将失败! 我的问题: 1)如何使用异步代码使黄瓜步骤始终按顺序运行?我在这里看到了一个类似的问题:如何等待JavaScript Promise在恢复

  • 我目前正在尝试创建我的第一个cucumber测试。在Java Eclipse中,我创建了一个包含以下内容的“功能文件”: 我还创建了以下testrunner文件: 我还创建了我的步骤定义: 公共类LoginStepDefinitions{ } 当我将脚本作为Junit测试运行时,控制台会成功执行测试并显示结果: 但是当打开JUnit选项卡时,会发生两件事: 1)测试步骤似乎没有显示: 2)当我双击