问题标签 [cucumber-jvm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 在测试应用程序和嵌入式tomcat之间共享spring容器
我们正在使用 cucumber-jvm 在我们的应用程序中编写集成测试层。我们发现的挑战之一是管理测试和 Web 应用程序之间的数据库。
一个典型的场景是,我们希望在场景的给定步骤中持久化一些实体,然后在用户界面上执行一些操作,这些操作反过来可能会持久化更多实体。最后,我们要清理数据库。因为 cucumber-jvm 测试在一个 jvm 中,而 Web 应用程序在另一个 jvm 中运行,所以我们不能共享事务(至少以我知道的方式),所以必须手动清理数据库。
我最初的想法是在与 cucumber-jvm 测试相同的 JVM 中使用嵌入式内存数据库 (HSQLDB) 运行的嵌入式 Tomcat 服务器。通过这种方式,我们可以共享一个 spring 容器,并且通过扩展一个事务,可以从中检索所有对象。
在我的初始测试中,Spring 似乎被加载和配置了两次:一次是在测试开始并读取 cucumber.xml 时,第二次是在嵌入式 tomcat 启动并且 Web 应用程序读取其 applicationContext.xml 时。这些似乎在两个完全独立的容器中,因为如果我尝试在一个容器中解析另一个容器中指定的对象,那么它不会解析。如果我复制我的配置,那么我会收到有关具有相同 ID 的重复 bean 的错误。
有没有一种方法可以告诉 Spring 为我的测试应用程序和嵌入式 tomcat 使用相同的容器?
我正在使用 Spring 3.2.2.GA 和 Embedded Tomcat 7.0.39(两个库的最新版本)。
我疯了吗?我需要提供更多技术细节吗?抱歉,如果我使用了一些不正确的术语。
谢谢
ps 如果您对我的问题很熟悉,并且您可以建议我正在尝试的解决方案的替代解决方案,请告诉我!
cucumber-jvm - 是否可以在运行时跳过 Cucumber-JVM 的场景
我想在场景中添加标签@skiponchrome,这应该在使用 Chrome 浏览器运行 Selenium 测试时跳过该场景。这样做的原因是因为某些场景在某些环境中工作而不在其他环境中工作,这甚至可能不是特定于浏览器测试的,并且可以应用于其他情况,例如操作系统平台。
示例钩子:
我知道可以在黄瓜标签中定义 ~@skiponchrome 来跳过标签,但我想在运行时跳过标签。这样,当我在某个环境中开始测试运行时,我不必提前考虑要跳过哪些步骤。
我想创建一个钩子来捕获标签并跳过场景而不报告失败/错误。这可能吗?
scala - 带有 Guice 和 Cucumber JUnitRunner 的 Scala 的 Cucumber JVM?
我们正在为 Scala 使用 Cucumber JVM,随着应用程序的增长,图片中的 cucumber-guice 也会很好。
问题是我看不到任何有关如何操作的可用示例/教程/文档。
我确实有一个工作的 @RunWith(classOf[Cucumber]) RunCukesTest 类,它启动,找到 .feature 文件和 StepDefinition 类。问题是这个 Cucumber 类在没有 Guice 的情况下实例化了步骤定义,并且我的所有注入都保持为空,导致我的测试失败。
也许有一种方法可以将 Cucumber 配置为使用 GuiceFactory 和 cucumber-guice.properties,就像配置 cucumber-guice一样?
cucumber - 用 Cucumber 截图
我只是学习如何使用黄瓜。你能告诉我如何完成这段代码吗?
您可以使用以下代码片段为未定义的步骤实现步骤定义:
grails - cucumber grails - 具有未实现步骤的功能仍然通过
我最近开始使用 Cucumber 和 grails 尝试 BDD。我正在学习黄瓜食谱书中的教程,并创建了一个功能,但尚未创建步骤定义来实现测试。
当我运行时grails test-app :cucumber
,我希望测试失败表明这些步骤尚未实施,但是测试结果是成功的:
我敢肯定这可能是显而易见的,但我很难过。如果您需要查看我上面未包含的任何内容,请告诉我。
gradle - Getting File permissions error when exploding the cucumber-jvm.jar
I am trying to create an executable jar for functional tests by exploding the dependency jars, using gradle task of type Jar.
Cucumber-1.1.3 is one of the dependencies. I am using gradle 1.1 with JVM 1.6 (company standards)
I get the following error :
org.gradle.api.GradleException: Could not expand ZIP '/dev/shm/263985/transformer/caches/artifacts-14/filestore/info.cukes/cucumber-java/1.1.3/jar/4b389fbe494942b319518d27ae38571f477967f6/cucumber-java-1.1.3.jar'. at org.gradle.api.internal.file.archive.ZipFileTree.visit(ZipFileTree.java:97) at org.gradle.api.internal.file.collections.FileTreeAdapter.visit(FileTreeAdapter.java:96) at org.gradle.api.internal.file.AbstractFileTree$FilteredFileTree.visit(AbstractFileTree.java:136) at org.gradle.api.internal.file.AbstractFileTree.getFiles(AbstractFileTree.java:37) at org.gradle.api.internal.file.CompositeFileCollection.getFiles(CompositeFileCollection.java:39) at org.gradle.api.internal.file.AbstractFileCollection.iterator(AbstractFileCollection.java:60) at org.gradle.api.internal.changedetection.DefaultFileSnapshotter.snapshot(DefaultFileSnapshotter.java:42) at org.gradle.api.internal.changedetection.InputFilesChangedUpToDateRule.create(InputFilesChangedUpToDateRule.java:35) at org.gradle.api.internal.changedetection.CompositeUpToDateRule.create(CompositeUpToDateRule.java:35) at org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository$HistoricExecution.calcCurrentState(DefaultTaskArtifactStateRepository.java:80) at org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository$HistoricExecution.isUpToDate(DefaultTaskArtifactStateRepository.java:88) at org.gradle.api.internal.changedetection.DefaultTaskArtifactStateRepository$TaskArtifactStateImpl.isUpToDate(DefaultTaskArtifactStateRepository.java:128) at org.gradle.api.internal.changedetection.ShortCircuitTaskArtifactStateRepository$ShortCircuitArtifactState.isUpToDate(ShortCircuitTaskArtifactStateRepository.java:77) at org.gradle.api.internal.changedetection.FileCacheBroadcastTaskArtifactStateRepository$1.isUpToDate(FileCacheBroadcastTaskArtifactStateRepository.java:37) at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:44) at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:57) at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:41) at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:51) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:42) at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:247) at org.gradle.execution.DefaultTaskGraphExecuter.executeTask(DefaultTaskGraphExecuter.java:192) at org.gradle.execution.DefaultTaskGraphExecuter.doExecute(DefaultTaskGraphExecuter.java:177) at org.gradle.execution.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:83) at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:36) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67) at org.gradle.api.internal.changedetection.TaskCacheLockHandlingBuildExecuter$1.run(TaskCacheLockHandlingBuildExecuter.java:31) at org.gradle.cache.internal.DefaultCacheAccess$1.create(DefaultCacheAccess.java:111) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:126) at org.gradle.cache.internal.DefaultCacheAccess.useCache(DefaultCacheAccess.java:109) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache(DefaultPersistentDirectoryStore.java:129) at org.gradle.api.internal.changedetection.DefaultTaskArtifactStateCacheAccess.useCache(DefaultTaskArtifactStateCacheAccess.java:79) at org.gradle.api.internal.changedetection.TaskCacheLockHandlingBuildExecuter.execute(TaskCacheLockHandlingBuildExecuter.java:29) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67) at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:155) at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:110) at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:78) at org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:38) at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:39) at org.gradle.launcher.exec.InProcessGradleLauncherActionExecuter.execute(InProcessGradleLauncherActionExecuter.java:25) at org.gradle.launcher.cli.RunBuildAction.run(RunBuildAction.java:50) at org.gradle.launcher.cli.ActionAdapter.execute(ActionAdapter.java:30) at org.gradle.launcher.cli.ActionAdapter.execute(ActionAdapter.java:22) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:200) at org.gradle.launcher.cli.CommandLineActionFactory$ParseAndBuildAction.execute(CommandLineActionFactory.java:173) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:169) at org.gradle.launcher.cli.CommandLineActionFactory$WithLogging.execute(CommandLineActionFactory.java:138) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:33) at org.gradle.launcher.cli.ExceptionReportingAction.execute(ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction(Main.java:48) at org.gradle.launcher.bootstrap.EntryPoint.run(EntryPoint.java:45) at org.gradle.launcher.Main.main(Main.java:39) at org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit(ProcessBootstrap.java:50) at org.gradle.launcher.bootstrap.ProcessBootstrap.run(ProcessBootstrap.java:32) at org.gradle.launcher.GradleMain.main(GradleMain.java:26)
Caused by: org.gradle.api.GradleException: Could not copy zip entry /dev/shm/263985/transformer/caches/artifacts-14/filestore/info.cukes/cucumber-java/1.1.3/jar/4b389fbe494942b319518d27ae38571f477967f6/cucumber-java-1.1.3.jar!cucumber/api/java/ar/??.class to '/dev/shm/263985/transformer/target/tmp/expandedArchives/cucumber-java-1.1.3.jar_6mn6efsv2arssmg9fup79f3fm5/cucumber/api/java/ar/??.class'. at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:68) at org.gradle.api.internal.file.archive.ZipFileTree$DetailsImpl.getFile(ZipFileTree.java:124) at org.gradle.api.internal.file.AbstractFileTree$1.visitFile(AbstractFileTree.java:39) at org.gradle.api.internal.file.AbstractFileTree$FilteredFileTree$1.visitFile(AbstractFileTree.java:145) at org.gradle.api.internal.file.archive.ZipFileTree.visit(ZipFileTree.java:90) ... 61 more
Caused by: java.io.IOException: Failed to set file permissions 420 on file ??.class. errno: 84 at org.gradle.internal.nativeplatform.filesystem.LibcChmod.chmod(LibcChmod.java:39) at org.gradle.internal.nativeplatform.filesystem.GenericFileSystem.chmod(GenericFileSystem.java:67) at org.gradle.api.internal.file.AbstractFileTreeElement.copyTo(AbstractFileTreeElement.java:65) ... 65 more
Note: This works fine when you use gradle 1.1 with JVM 1.7.
Let me know if you guys know why this is happening and is there any fix or alternatives. Thanks in advance!!
json - 有关用于 Cucumber 报告的 Cucuber.json 文件的问题
我试图将我的黄瓜测试与 maven-cucumber-reporting(来自 masterthought.net)集成。我下载了他们的 Jenkins 插件并合并到我的 pom.xml 文件中。我的 eclipse 项目中有 2 个测试,当我运行这些测试时,虽然 maven 成功执行。但是,当我看到我的 HTML 报告和 cucumber.json 时,它只显示一个测试用例的详细信息。我一直在使用 Cucumber-JVM 如果我在某个地方出错了,请告诉我。
谢谢,普拉桑斯
java - 不使用 Maven 执行黄瓜功能文件
嗨,我在 Eclipse 中使用 Maven 设置了一个 Java 项目。
每当我尝试运行脚本时,我都会遇到问题。它是通过不打开我从功能文件中解析的所需网站来执行的。
请查看以下代码和我在 eclipse 中设置的目录的图像
这是我的 PageStepsDefs.java 代码
这是我的 RunCukeTest.java 代码
这是功能文件中的语句
任何帮助都会很棒。
提前致谢。赞恩
android - 集成 Robolectric 和 Cucumber
我想结合 Robolectric 和 Cucumber (JVM)。
目前我有两个类ActivityStepdefs
,其中定义了活动管理的两个步骤定义。
我的第二个类是RoActivity
在哪里,例如从它的类名创建一个活动,以及将在哪里使用 Robolectric。
当我在这个类中RoActivityTest
使用测试运行时通过了,但是当我运行(运行特性作为junit测试的类)时,来自的代码没有作为Robolectric的一部分运行,即在我的项目中搜索特性并将其与内部的方法匹配,并且最后这个类将调用一个方法RobolectricTestRunner
RunCukesTest
RoActivity
RunCukesTest
ActivityStepdefs
RoActivity
是否可以使用两个 junit both* 跑步者进行测试?
我不确定,但也许可以使用 junit 规则来做类似 powermock 的事情。
在那种情况下,我应该为哪一个定义规则?
*黄瓜和Robolectric
cucumber - 在重复的相似ID下定义时如何单击编辑按钮
我有一个页面,其中有许多编辑按钮。每个按钮都有相同的 id 即 enable_edit_content 。如何单击特定按钮。
这是我必须点击的代码
任何帮助将不胜感激。我已经尝试过,但无法得到我的结果:-