qaf-cucumber-无法在BDD2方案大纲中引用来自CSV数据提供程序的数据

问题描述 投票:0回答:1

上下文

我想使用qaf-cucumber来利用QAF功能,而仍将Cucumber与JUnit一起使用。主要是,我需要QAF的数据提供程序功能,允许将.csv中的方案示例外部化,以便在多个方案和功能中使用它们。

Junit:4.12

黄瓜:5.0.0-RC2

QAF:2.1.15

qaf-cucumber:2.1.15-beta-3(最新版本,因为尚未发布)


问题

在方案上方使用QAF标签@dataFile来指定.csv的位置时:

  • 我得到了INFO跟踪“ c.qmetry.qaf.automation.util.CSVUtil-加载csv数据文件:src / test / resources / data / testdata.csv”,正如预期的那样。

  • 该场景执行的次数与预期的.csv中的示例行一样多。

  • 在步骤中,将像<column1>${column1}之类的引用视为字符串,而不是引用.csv中的列值。

也(但我不寻求这些解决方案):

  1. QAF documentation about CSV表示BDD2的@dataFile:resources/data/logintestdata.csv等效于Examples: {"dataFile":"resources/data/logintestdata.csv"},但是第二个不会触发任何情况,就好像没有给出任何示例。

  2. QAF documentation about BDD2 syntax表示使用QAF标签Scenario时应使用小黄瓜关键字@dataFile。尽管如此,这样做仍会在下面给出堆栈跟踪。而是必须使用关键字Scenario Outline

java.lang.NullPointerException
    at java.util.Collections$UnmodifiableCollection.<init>(Collections.java:1026)
    at java.util.Collections$UnmodifiableList.<init>(Collections.java:1302)
    at java.util.Collections.unmodifiableList(Collections.java:1287)
    at gherkin.ast.ScenarioOutline.<init>(ScenarioOutline.java:13)
    at com.qmetry.qaf.automation.cucumber.Bdd2Compiler.compile(Unknown Source)
    at io.cucumber.core.feature.FeatureParser.compilePickles(FeatureParser.java:59)
    at io.cucumber.core.feature.FeatureParser.parseResource(FeatureParser.java:37)
    at io.cucumber.core.runtime.FeaturePathFeatureSupplier.lambda$new$0(FeaturePathFeatureSupplier.java:39)
    at java.util.function.BiFunction.lambda$andThen$0(BiFunction.java:70)
    at io.cucumber.core.resource.ResourceScanner.lambda$null$2(ResourceScanner.java:128)
    at io.cucumber.core.resource.PathScanner$ResourceFileVisitor.visitFile(PathScanner.java:67)
    at io.cucumber.core.resource.PathScanner$ResourceFileVisitor.visitFile(PathScanner.java:52)
    at java.nio.file.Files.walkFileTree(Files.java:2670)
    at java.nio.file.Files.walkFileTree(Files.java:2742)
    at io.cucumber.core.resource.PathScanner.findResourcesForPath(PathScanner.java:46)
    at io.cucumber.core.resource.PathScanner.findResourcesForUri(PathScanner.java:26)
    at io.cucumber.core.resource.ResourceScanner.findResourcesForUri(ResourceScanner.java:111)
    at io.cucumber.core.resource.ResourceScanner.scanForResourcesUri(ResourceScanner.java:88)
    at io.cucumber.core.runtime.FeaturePathFeatureSupplier.loadFeatures(FeaturePathFeatureSupplier.java:62)
    at io.cucumber.core.runtime.FeaturePathFeatureSupplier.get(FeaturePathFeatureSupplier.java:46)
    at io.cucumber.junit.Cucumber.<init>(Cucumber.java:138)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:33)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:49)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

我很清楚将这两个错误归咎于qaf-cucumber,尤其是考虑到它的发展还很早。


示例

src/java/com处的黄瓜赛跑者>

@RunWith(Cucumber.class)
@CucumberOptions(
        features = "src/test/resources/features",
        glue = "com.steps",
        plugin = {"com.qmetry.qaf.automation.cucumber.QAFCucumberPlugin", "pretty"})
public class RunCucumber {
}

src/test/resources/features的特征

Feature: Cucumber scenario with QAF data provider

  @dataFile:src/test/resources/data/testdata.csv
  Scenario Outline: Test
     Given my scenario works with the examples "<column1>" and "<column2>"

src/test/resources/data处的testdata.csv

#col.seperator=|
column1|column2
example1_column1|example1_column2
example2_column1|example2_column2

进入src/test/java/com/steps的步骤

public class TestSteps {

    @Given("my scenario works with the examples {string} and {string}")
    public void myScenarioWorks(String value1, String value2) {
         // value1 equals "<column1>" and value2 equals "<column2>" !
    }
}

上下文我想使用qaf-cucumber来利用QAF功能,同时仍将Cucumber与JUnit一起使用。主要是,我需要QAF来提供其数据提供程序功能,从而可以将场景示例外部化...

cucumber cucumber-java qaf
1个回答
0
投票

我尝试使用2.1.15,它对我有用。我在使用qaf-黄瓜2.1.15-beta-3时也获得了上述行为,但是当更新到qaf-黄瓜2.1.15时,它的工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.