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

qaf Cumber-无法在BDD2场景大纲中引用来自CSV数据提供程序的数据

闾丘山
2023-03-14

我想使用qaf-cucumber来利用QAF功能,同时仍然使用JUnit的Cucumber。主要是,我需要QAF的数据提供者功能,允许外部化场景示例。csv,以便在几个场景和功能中使用它们。

Junit:4.12

cucumber:5.0.0-RC2

QAF:2.1.15

qaf-cucumber: 2.1.15-beta-3(最新版本,因为还没有发布)

当使用场景上方的QAF标记@dataFile来指定场景的位置时。csv:

>

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

    场景的执行次数与场景中的示例行数相同。csv,正如所料。

    在步骤中,像这样的引用

    此外(但我不寻求任何解决方案):

    >

  • 关于CSV的QAF留档说@dataFile:资源/数据/logintestdata.csv等同于示例:{"dataFile":"资源/数据/logintestdata.csv"}为BDD2,但第二个没有触发任何场景,就像没有给出例子一样。

    关于BDD2语法的QAF文档说明,当使用QAF标记@dataFile时,应该使用小cucumber关键字场景。尽管如此,这样做会给出下面的堆栈跟踪。相反,必须使用关键字场景大纲

    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)
    

    Cucumber runner位于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>"
    

    testdata.csvsrc/test/Resources/data

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

    步骤在src/test/java/com/步骤

    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>" !
        }
    }
    
  • 共有1个答案

    郝承悦
    2023-03-14

    我尝试了2.1.15,它对我有效。我在qaf Cumber 2.1.15-beta-3上也表现得很好,但当升级到qaf Cumber 2.1.15时,效果很好。

     类似资料:
    • 有没有可能用gherkin写一个场景大纲,其中有一个断言步骤,而不是在所有的例子中都需要? null 有没有更好的写法?

    • 在我们的cucumber特性文件中,我们使用了场景大纲,在运行脚本之前,我们需要在运行时填充数据。 基于数据文件中传递的城市路线,我们使用一个API创建PNR,该API返回给我一个实际的PNR。创建的PNR值需要存储在场景数据表中。 如果我们有场景,我们可以使用DataTable函数访问函数内部的值。我们有任何类与场景大纲数据表交互吗 例如。 请让我知道如果现有的类或替代方案来解决这个问题。

    • 我遇到了一个问题,似乎没有将来自馈线的数据添加到会话中。我正在测试一个系统,其中一个用户有一个角色(即用户或管理员),我需要根据角色执行各种测试。在高级教程之后,我将链拆分为不同的对象(每个对象都在自己的文件中)——其中一个对象包含登录过程,无论用户角色如何,登录过程都是相同的。我不想重复使用这个,但要用不同的喂食器。 我使用csv feeder加载用户名和密码,但看起来它无法将数据添加到会话中,

    • Entity Framework Core 通过一个提供程序模型来允许使用 EF 访问各种不同的数据库。一些概念对于大部分数据库是通用的,这些都包含在主要的 EF Core 组件中,包括 LINQ 的查询表达、事务以及从数据中加载出来后对象的变更跟踪。一些概念则是特定于个别提供程序,比如 SQL Server 提供程序允许你配置内存优化表(一个特定于 SQL Server 的功能),另外一些概念则

    • 我已使用以下方法在应用程序中输入凭据。 其中EnterText定义如下: 在测试类中,我写了下面的代码 我得到以下错误: 失败:loginProxy(“11”,“Priya”)java.lang.NumberFormatException:java.lang.Integer处为空。parseInt(未知源)位于java.lang.Integer。parseInt(未知源) 请帮助解决同样的问题。据