- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道 here 中的场景和场景大纲之间的区别。
Scenario states
以更抽象的方式测试的一般点。同时,scenario outline
通过几个示例来帮助执行场景。
所以,我们通常会写feature file
如下。它以 scenario
开头然后完成 scenario outline
.
功能:您的功能的标题 我想将此模板用于我的功能文件
Scenario: Eating
Given I have "N" cucumbers
When I eat "K" ones of them
Then I will have "N-K" ones
Scenario Outline: eating
Given there are <start> cucumbers
When I eat <eat> cucumbers
Then I should have <left> cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
但这对我来说没有多大意义。我认为场景大纲更容易理解,因此不需要用场景来表达测试的总体观点。
你同意我的观点吗?
我的意思是,该场景可以做什么,哪些场景大纲不能做什么?
我建议选择更简单的
Scenario Outline: eating
Given there are <start> cucumbers
When I eat <eat> cucumbers
Then I should have <left> cucumbers
Examples:
| start | eat | left |
| 12 | 5 | 7 |
| 20 | 5 | 15 |
我知道这会导致错误,但我认为如果 Cucumber 团队完全删除场景的概念,而是更多地支持场景大纲,那就更好了。
最佳答案
你大错特错了。
您正在做的是遵循反模式以使您的步骤定义更加简洁。这样做时,您是
1) 大幅减少步骤定义传达的信息量
2) 增加运行时间(示例表鼓励运行许多示例。在表中,有两行执行完全相同的操作)
3) 为场景的所有 future 执行创建维护问题。
将示例表与 Cucumber 结合使用的唯一原因是让您更轻松地与利益相关者进行协作。在这里,我们使用大纲和示例来粗略总结您想要在特定领域实现的目标。一旦掌握了这些,您应该提取各个场景来探索和记录每个示例所代表的特定规则和策略。因此,作为实现过程的一部分,您正在将大纲场景改进为质量更高的单个场景
如果我们采用更好的示例表
user | password | result
not_registered | goodpass | user not found
registered | badpass | bad password
registered | goodpass | logged in
那么我们最好将其分解为单独的场景,而不是出于多种原因将内容保留在表格中。
首先,我们可以更详细地记录每项政策。如果我们以注册的 badpass 错误密码为例,我们可以得到
Scenario: Login with bad password
Given I am registered
When I login with a bad password
Then I should see a bad password error
现在我们可能会认为显示错误密码错误不是一个好主意,因为它可以通过确认注册帐户存在来帮助人们破解帐户。所以我们也会改进这个场景
Scenario: Login with bad password (show login error only to prevent account identification)
Given I am registered
When I login with a bad password
Then I should see a bad login error
各个场景提供了添加文档和使用不同步骤的机会。更新示例表的通信量要少得多(您必须猜测为什么错误的密码会变成错误的登录)
registered | badpass | bad login
不使用示例表的其他原因是
让我们快速浏览一下 5。
假设我们有一个弱密码“12345”和一个强密码 re432uee8l。
如果我们使用示例表,我们最终会在表中得到硬编码的密码,例如
registered | re432uee8l | logged in
现在,如果我们更改业务规则,规定强密码中必须包含符号,则必须更改功能集中的每个强密码示例。
从一开始就使用 Cucumber,我强烈建议
已实现的场景(每次“push|build|deploy”后应该运行的场景应该没有示例,也没有大纲)。如果您正在运行大纲和示例,那么您正在运行尚未完成的场景。
关于cucumber - cucumber 中 "scenario"相对于 "scenario outline"有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44619535/
我有以下代码: String text = "[\"Scenario 1\", \"Scenario 2\"]" 我需要将 "text" 转换为 Array。我知道我可以替换 [ ] "并执行 spl
我知道 here 中的场景和场景大纲之间的区别。 Scenario states 以更抽象的方式测试的一般点。同时,scenario outline通过几个示例来帮助执行场景。 所以,我们通常会写fe
我在 Cucumber 中有我的特征文件,我正在使用 Given, When, Then 语法 (Gherkin) 在其中编写我的场景,并在步骤定义文件中有相应的步骤。我有一个场景,我正在检查特定数据
我正在尝试运行一些测试作为学习 cucumber 的一部分。但我得到的结果是 0 个场景。在这里,我添加了我编写的代码: 登录功能和- Feature: Application Login S S
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我有一个像这样的 XML
我一直在尝试使用 Calabash 来测试一些简单的 iOS 应用程序。我能够在模拟器上运行该应用程序,并且所有步骤都运行良好。现在我想在 iOS 设备上测试它,但我遇到了一些问题。我用所有必要的信息
我有以下 MySQL 实例以及复制设置: S1 -----> (M1 M2),其中: M1 - M2 是一个多主复制设置, S1 - 复制在主 M1 上完成的写入的从站。 现在,我正在尝试使用 ch
我正在使用 Specflow 编写一套模拟月薪的场景,验证每个月的计算付款以及最后的年终数据。 每个月的结果都是累加的,所以后面的每一个场景都依赖于上个月的加减。支付计算通过第三方工具写入数据库,因此
有两个需要的功能:注册时设置密码和更改密码,如果用户忘记了。用户注册时,密码长度必须至少为4个字符;当更改通过时 - 至少 5 个字符。 View 对于注册和更改通行证很常见。显然,还存在 2 个操作
正如主题所述,我很难想象在现实生活中的示例中何时何地使用可恢复异常,以及我们可以通过使用它们获得哪些有效优势。 我能想象的是,一个子系统已连接,比方说通过 RFC 连接到一个 session ,该 s
我正在设计一个游戏,其中一个角色有很多元素,而这些元素可以有多种类型。有一个角色表,以及十二个按类型(例如武器、盔甲和各种其他项目类型)分割的可能项目的不同表。 我想制作一个表来保存这些项目类型的实例
我正在开发一个 Windows 8 Metro 风格的应用程序,在大学的学术项目中使用开发者预览版。我们必须使用 MVVM 模式。 在主页中,我们有一个带有按钮的 Metro 风格主菜单。根据 MVV
目前,我正在使用BDD进行项目,其中涉及一些导入语句,例如 导入 cucumber .api。场景; 但是我找不到合适的依赖项 目前我有依赖 compile 'commons-lang:commons
考虑以下因素: @Given("^this stuff:$") public void this_stuff(List stuffList) throws Throwable { stuffL
我正在寻找如何实现这个场景:我有函数内部的逻辑代码,现在我希望能够在单独的线程中执行此功能。现在我拥有的是这个 .. 的原始实现我简单地初始化线程,在它的启动/运行方法中我保留了函数逻辑。我怎样才能让
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 9 年前。 Improve
我有一个相当流行的场景,其中有一个包含进度条和 ListView 的 fragment 。我想在使用 Retrofit 获取数据后填充 ListView。现在,一旦响应返回,就需要使进度条不可见。 存
回答问题前请引用以下程序。在评论中解释了代码。 所以我的问题是赋值运算符重载如何处理 new() 分配内存失败的情况。 例如 Obj1 持有字符串 "GeeksQuiz"。将 Obj2 分配给 Obj
在下面的代码中,我只是想看看我是否能够从每个线程将一个元素插入到数组中。它按预期工作。但后来我想知道,在什么情况下这里会出现竞争条件。我真的需要 volatile 还是信号量?我尝试删除信号量和 vo
我是一名优秀的程序员,十分优秀!