要在步骤之间传递变量,我现在做的事情如下:
Feature: Demo
Scenario: Create user
Given User creation form management
When Create user with name "TEST"
Then User is created successfully
Run Code Online (Sandbox Code Playgroud)
带有步骤定义的Java类:
public class CreateUserSteps {
private String userName;
@Given("^User creation form management$")
public void User_creation_form_management() throws Throwable {
// ...
}
@When("^Create user with name \"([^\"]*)\"$")
public void Create_user_with_name(String userName) throws Throwable {
//...
this.userName = userName;
}
@Then("^User is created successfully$")
public void User_is_created_successfully() throws Throwable {
// Assert if exists an user with name equals to …Run Code Online (Sandbox Code Playgroud) 我想为每个特定的功能文件指定某些设置和拆除步骤.我已经看到了允许代码在每个场景之前执行的钩子,并且钩子在每个功能之前执行代码,但我想指定在一个特定功能运行所有场景之前和之后运行一次的代码.
这可能吗?
有谁知道我在哪里可以找到一个示例应用程序,其中Cucumber用于通过Gradle测试Spring Boot应用程序?我可以在cmd行上启动服务器并使用我的IDE运行测试,但我需要能够在CI服务器上以编程方式运行它们.我在这里看到了答案,但该解决方案对我不起作用,很可能是因为我有多个步骤def文件.
这是我的设置
build.grade(在另一个问题中提到)
testCompile ("org.springframework.boot:spring-boot-starter-test",
...
"info.cukes:cucumber-spring:${cucumberVersion}")
Run Code Online (Sandbox Code Playgroud)
CucumberTest.java
@RunWith(Cucumber.class)
@CucumberOptions(format = "pretty", features = "src/test/resources")
public class CucumberTest{
}
Run Code Online (Sandbox Code Playgroud)
AbstractSpringTest.java(由所有StepDef文件扩展)
@SpringApplicationConfiguration(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
@Ignore
public abstract class AbstractSpringTest
{ ... }
Run Code Online (Sandbox Code Playgroud)
它在启动时没有做正确的事情,因为它1.尝试初始化我的步骤def文件和2.我的应用程序没有启动,黄瓜测试无法建立连接.
谢谢.
编辑:或者,如果有人可以告诉我如何使用gradle启动和停止应用程序,那也是可以接受的.
我想得到方案的名称,以获得有意义的日志,并在java中的运行时生成自定义报告.场景类只有getStatus()和getSourceTagNames()方法.我找不到获取方案名称的方法.
有人可以帮我解决这个问题吗?
我尝试使用Java和Maven构建我的第一个可执行规范.我用这个结构创建了一个简单的项目:
specification
|-src
|-test
|-java
|-mypackage
|-MyFeatureTest.java
|-resources
|-MyFeature.feature
Run Code Online (Sandbox Code Playgroud)
在junit测试中MyFeatureTest.java我有这个:
import org.junit.runner.RunWith;
import cucumber.junit.Cucumber;
@RunWith(Cucumber.class)
public class HomepageTest {
}
Run Code Online (Sandbox Code Playgroud)
现在https://github.com/cucumber/cucumber-jvm/wiki/IDE-support说我应该添加以下行:
@Cucumber.Options(paths={"my/super.feature:34"})
Run Code Online (Sandbox Code Playgroud)
我试着修改它
@Cucumber.Options(paths={"src/test/resources/"})
Run Code Online (Sandbox Code Playgroud)
但注释@Cucumber.Options根本不可用.我pom.xml有这种依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.0.0.RC20</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.0.0.RC20</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
更新我遗漏了一些东西:黄瓜特征文件必须在子目录中src/test/resources/mypackage/.否则,junit测试不会接收它.
当我将它们放在同一目录中时src/main/test/,我可以运行我的功能测试,所以它对我来说不是一个阻止器.但我想了解整个设置.
cucumber-jvm javadocs指出glue元素的目的是指定stepdefinitions和hooks的位置.但是,这对我来说似乎不起作用.假设我在目录a中有我的功能,在目录b中有我的步骤定义.然后,
@Cucumber.Options(
features= "directory_a",
glue="directory_b"
)
Run Code Online (Sandbox Code Playgroud)
将从directory_a加载我的功能文件,但是,它不会从direct_b加载我的步骤定义.但是,如果我使用
@Cucumber.Options(
features= {"directory_a", "directory_b"}
)
Run Code Online (Sandbox Code Playgroud)
然后加载来自directory_a的我的功能,并且还会拾取来自directory_b的步骤定义.这正是我想要的,但是,我不明白为什么前者不起作用?我猜它与它有关,期望URI的格式不同(也许我需要在类路径前面添加//或类似的东西),但我在文档中找不到任何关于此的信息.
我正在使用Eclipse中的黄瓜和Gradle进行集成测试.
现在我的工作流程是
这适用于新功能等,但如果你有一个大功能并在中间或结束时实现新的步骤,那将变得非常麻烦.为了获得新的步骤骨架,我需要运行整个功能.
即使有了
dryRun = true
Run Code Online (Sandbox Code Playgroud)
选项需要很长时间.
我听说IntellyJ可以直接生成这些步骤骨架,我想知道在Eclipse中这样的东西是否可行?
如何在使用Cucumber JVM时测试是否抛出了正确的异常?使用JUnit时,我会做这样的事情:
@Test(expected = NullPointerException.class)
public void testExceptionThrown(){
taskCreater.createTask(null);
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这非常优雅.但是,当使用黄瓜JVM时,我怎样才能达到同样的优雅?我的测试现在看起来像这样:
@Then("the user gets a Null pointer exception$")
public void null_exception_thrown() {
boolean result = false;
try {
taskCreater.createTask(null);
} catch (NullPointerException e) {
result = true;
}
assertTrue(result);
}
Run Code Online (Sandbox Code Playgroud)
注意需要一个try.. catch后跟assertTrue一个标志.
如何使用maven 命令行中的黄瓜功能选项.
在一个充满功能(测试)的树中,我试图只运行单个功能.就我而言 - 所选文件夹中的所有要素文件.
我试过使用以下语法:
mvn install -Dcucumber.options="classpath:com/company/regression/features/administration/"
Run Code Online (Sandbox Code Playgroud)
它运行所有测试.没有错误也没有评论.
我尝试了其他几个选项,没有一个工作!
任何帮助将非常感谢.
显然,当检测到的应用程序发生异常时,将停止检测测试运行:
测试未能完成.原因:'由于'异常'导致仪表运行失败.检查设备logcat以获取详细信息
这是自定义仪器运行器中的所需行为还是错误配置?
我正在使用自定义MonitorinInstrumentation[1]来自动化验收测试.
不幸的是,当在一个测试中发生异常时,测试执行被取消.我希望测试套件完成并只标记失败的测试,就像在JUnit中一样.
在一次测试中发生异常的情况下,是否存在执行(连接)测试而不退出整个测试的一般方法?
cucumber-jvm ×10
cucumber ×7
java ×5
android ×1
eclipse ×1
gherkin ×1
maven ×1
spring ×1
spring-boot ×1