我想使用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中的列值。
也(但我不寻求这些解决方案):
QAF documentation about CSV表示BDD2的@dataFile:resources/data/logintestdata.csv
等效于Examples: {"dataFile":"resources/data/logintestdata.csv"}
,但是第二个不会触发任何情况,就好像没有给出任何示例。
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来提供其数据提供程序功能,从而可以将场景示例外部化...
我尝试使用2.1.15,它对我有用。我在使用qaf-黄瓜2.1.15-beta-3时也获得了上述行为,但是当更新到qaf-黄瓜2.1.15时,它的工作正常。