我正在我公司的内部网上工作
而我正试图从使用ruby 1.8.7切换到jruby 1.5.1
但是,每当我尝试从jruby运行黄瓜时,我都会收到错误:
% jruby -S cucumber
/usr/local/src/jruby-1.5.1/lib/ruby/site_rub/1.8/rubygems/custom_require.rb:31:in `require': no such file to load -- gherkin (LoadError)
Run Code Online (Sandbox Code Playgroud)
我认为这是b/c gherkin 2.1.5是原生扩展,jruby无法处理它:
% jgem install gherkin-2.1.5.gem
...
ERROR: Error installing gherkin-2.1.5.gem:
ERROR: Failed to build gem native extension.
Run Code Online (Sandbox Code Playgroud)
现在,我想尝试更新版本,但由于这是在受保护的Intranet上,导入新软件是PITA,需要一些时间.
有没有人有任何关于如何制作我工作的软件的建议?我错过了正确的配置设置或其他一些设置吗?
对于我的SpecFlow测试,我想在测试执行期间设置测试进度的单独记录/跟踪.我想写
到Windows事件日志(以便在测试期间将其与其他系统组件生成的事件日志消息同步).
我尝试使用[BeforeFeature],[BeforeScenario],[BeforeStep] Hooks来做这件事,但事实证明我在这个钩子中没有所有必需的信息.例如,我不知道如何获取当前步骤的当前文本行(包括行信息等)或当前步骤的结果(失败/通过).
有没有办法在执行测试期间在这些钩子中或以任何其他方式获取此信息?
如果不是:有没有办法以任何其他方式自定义Specflow创建的跟踪输出?
我有一个有两个模块的maven项目.我将在这里提到一个名为app的模块.使用我的RunCukesTest类,我能够执行我的单个场景,它可以看到第一步已经定义并执行它.但IntelliJ的Gherkin插件认为我的第一步是未定义的,而且IntelliJ没有代码帮助,因为我能够在我的步骤def类中定义一个名为LoginStepdefs的步骤.为什么Gherkin插件不能在LoginStepdefs类中找到我的步骤defs?
注意:login.feature旁边有小黄金图标,当鼠标指针悬停在第一步时,它会显示天桥文本"Undefined step reference ..."
根pom.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>jpro</groupId>
<artifactId>jpro</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>app</module>
</modules>
</project>
Run Code Online (Sandbox Code Playgroud)
在app模块中,pom.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>jpro</artifactId>
<groupId>jpro</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>app</artifactId>
<dependencies>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-java</artifactId>
<version>1.1.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>info.cukes</groupId>
<artifactId>cucumber-junit</artifactId>
<version>1.1.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
我的目录结构是:
jpro
app
pom.xml
src
main
test
java
pro
j
runner
RunCukesTest.java
stepdef
LoginStepdefs.java
resources
feature
login.feature
pom.xml
Run Code Online (Sandbox Code Playgroud)
login.feature文件包含:
@SC_LOGIN …
Run Code Online (Sandbox Code Playgroud) 假设我正在设计一些SaaS服务.我需要一个允许用户创建网站的功能.用户可以在管理面板中为每个站点进行特殊设置(例如,小部件的设计),并获得安装服务的唯一代码到他自己的站点.
用户故事可能是:
作为一个已登录的用户,我想在管理面板中添加新网站,以便我可以单独配置每个小部件实例,并可以为我自己的网站获取安装小部件的唯一代码.
形成
但是,如果我尝试用BDD或GWT(给予时)或小黄瓜风格来描述这个功能,我将面临一些麻烦.我从下一个描述开始:
GIVEN我已登录管理面板而我正在"网站"页面上
当我点击"添加网站"按钮
然后出现弹出窗口"添加站点"
正如您在上面的实现中所见,假设站点添加将在弹出窗口中(例如,它对于UX非常重要).弹出窗口包含站点URL输入字段,带语言的下拉控件以及"添加"和"取消"按钮.
我们得到了一个奇怪的场景,它负责弹出开启.这是对的吗?我如何命名这个场景("添加网站的表格开头"??)?此场景也只有一种情况(当我点击 - 弹出打开).也许根本不需要这种情况?我糊涂了...
在这种情况下,我们需要在描述时创建另一个场景:
GIVEN打开"添加网站"弹出窗体
当我填写"站点URL"字段并单击"添加"按钮
那么新网站将在系统中创建,我将转移到我自己的网站列表
您如何看待,我需要在何处应用业务规则,例如:1)创建新网站时,必须生成唯一代码,并且包含最少8个字符,包括数字和字母符号.2)检查不适用于站点URL输入字段,用户可以输入西里尔符号3)等?
我有很多额外的问题,希望社区帮助!
我正在使用Gherkin语言定义要在BDD工作流程中使用Behat或Cucumber等工具的功能.这是到目前为止的功能定义:
Feature: Save Resource
In order to keep interesting resources that I want to view later
As a user
I need to be able to save new resources
Scenario: Saving a new resource
Given "http://google.com" is a valid link
When I insert "http://google.com" as the new resource link
And I insert "Google Search Engine" as the new resource title
Then I should see a confirmation message with the inserted link and title
When I …
Run Code Online (Sandbox Code Playgroud) 查找有关 Gherkin 的文档似乎非常困难,所以我想知道是否有办法增加步骤定义以使测试人员能够使用正确的语法。显示我的意思的一个例子是:
...Testing...
Then I see there is 1 item
...More testing...
Then I see there are 2 items
Run Code Online (Sandbox Code Playgroud)
显然,这两个步骤将使用相同的代码。我定义了一个几乎可以工作的步骤定义:
Then(/^I see there (is|are) (\d+) item(s)?$/) do |item_count|
...code...
end
Run Code Online (Sandbox Code Playgroud)
除了问题是它将is/are
可选的复数解释s
为参数。有什么方法可以向小黄瓜发出信号,这些只是为了允许正确的语法?
作为一个端到端的自动化测试程序,我一直认为Given,When,Then语句(使用Cucumber时结合在Gherkin语言中)应该只出现在1.给定,2.当,3.然后.
即测试不应该遵循,例如,给定,何时,然后,何时,然后.而应该遵循Given,When,Then only.
这种假设的原因在于仅测试应用程序的一个区域的单个测试.
但是,我注意到网上的一些小黄瓜示例,它们有时会使用以下顺序:给定,何时,何时,然后.
有人知道在写完一篇文章之后回到Whens是否可以接受最佳实践?我很欣赏测试仍然有效,只是想知道这是好事还是坏事.
我正在使用来自 Karate API 框架的path关键字来连接字符串以形成一个 url。但是,我无法通过“?”。这是我在做什么:
Background:
* url 'https://api.cloud.abcde.com/animal/'
Scenario: Verify the get status
Given path 'herbivore?id=25'
When method get
Then status 200
Run Code Online (Sandbox Code Playgroud)
当我运行测试时,我看到“?” 作为 %3F 传递。我试图使用 \ 来逃避它,并尝试了其他一些答案,但没有成功。我需要使用 url 编码吗?任何指示或帮助将不胜感激。谢谢
我正在尝试将Selenium测试转换为Gherkin.有没有办法在Gherkin中实现if语句?
示例:假设代码以下面的格式编写.我只是写下面的描述.双斜杠后的部分是实际的Selenium代码:
// launch the application
// login to application
// navigate to page
String str;
if(str== "XYZ")
{
// verify title
}
//verify text field 1
//verify test field 2
//verify select box
Run Code Online (Sandbox Code Playgroud)
为此,我试图在Gherkin中编写代码如下
Given user launches the application
When user login with valid credentials
and navigate to required page
When String str is "XYZ"
Then verify title
And verify text field 1
And verify test field 2
And verify select box
Run Code Online (Sandbox Code Playgroud)
但是这段代码是不正确的,因为如果str不等于"XYZ",我们希望不应该验证该标题,但是应该验证其他验证,例如text field1,2和select box.
场景大纲对于创建数据驱动的测试非常方便,但场景的数量随着示例的数量而增加。我已经养成了标记场景的习惯,以便更轻松地过滤我们应用程序的主要功能。
我想建立一个适用于所有主要用例的“冒烟测试”。其中一些用例是在对日期或数字执行边界测试的场景大纲中捕获的,但我只想在示例中找到一个原型案例。
例如,假设我们有一个功能允许我们为工作添加职位空缺(基本上是“招聘机会”与“我们有热情的人填补这个职位”)。
在屏幕上,我们有两个用于最低经验的表单字段:年和月。用户不应在月份字段中输入超过 11 个月,否则他们应该在年份字段中输入一些内容(例如 18 个月实际上应该是 1 年零 6 个月)。
@job-openings
Scenario Outline: Adding a job opening with experience
Given a job exists
When I add a job opening requiring <years> years and <months> months experience
Then a job opening should exist requiring <years> years and <months> months experience
Examples:
| years | months |
| 0 | 1 |
| 0 | 11 |
| 1 | 0 |
| 2 | 6 | # …
Run Code Online (Sandbox Code Playgroud)