高效 BDD 测试要遵循的 Cucumber 最佳实践

高效 BDD 测试要遵循的 Cucumber 最佳实践

该博客最初发布于 https://www.browserstack.com/guide/cucumber-best-practices-for-testing

——凯拉什·帕塔克

什么是黄瓜工具?

黄瓜 是一个支持行为驱动开发(BDD)的测试工具。

  • BDD 通过一个通用平台弥合利益相关者和技术团队之间的差距。
  • 小黄瓜被用作 使用它来编写测试用例。它是一种简单的格式,非技术用户也可以阅读和修改。

在 BDD 中,“ Given-When-And-The-But ”是编写测试用例的建议方法。下面列出的是 BDD 的一个示例。

 特点:我想用有效数据和无效数据登录网站 背景: 鉴于我导航到网站 场景:以具有有效数据的新注册用户身份登录 当我输入用户名时 我输入了密码 然后点击登录按钮 然后验证用户成功登录 但是登录按钮不存在 场景:使用无效数据以新注册用户身份登录 当我输入无效的用户名时 我输入了密码 然后点击登录按钮 然后应该显示错误消息 但重新登录选项可用

有效测试的 Cucumber 最佳实践?

1. 尽早编写测试场景

如果我们准备好在创建测试代码之前编写测试场景,这是一个很好的做法。及早开发场景可帮助您以更好的方式定义软件行为并了解可能出现的问题。一旦场景准备好并由同意它的团队成员审查,我们就可以开始实现该功能。这将节省时间和精力,并消除以后、开发期间或您的团队何时运行验收测试的不确定性。

2. 特点和场景

功能文件:

  1. 功能文件应该特定于页面,例如我们已经登录的登录。功能和登录后,如果我们必须验证主页内容,我们将创建一个 HomePage.feature 文件。
  2. 在单个功能文件中,将有多个场景
  3. 避免混合功能文件
  4. 每个功能都应该准备好单独执行

设想:

为了描述场景,使用 Gherkin 的句子:Given、When、Then、But 和 And 在编写场景时,我们必须确保我们应该在 合适的 方法。

请参阅下面的示例 写得不好的场景

场景:作为现有用户,我想登录成功

给定 用户在主页上

什么时候 用户点击主页上的登录链接

用户可以看到登录屏幕

用户输入他的用户名和密码

用户可以点击登录按钮

然后 用户登录成功

显示成功登录信息

一个 更好的方法 用更少的行编写相同的上述场景如下。

避免影响不大的细节。

场景:作为现有用户,我想成功登录。

给定 用户在主页上

什么时候 用户导航到登录页面

用户输入用户名和密码

然后 显示成功登录信息

3.使用背景

将在每个场景中重复的步骤置于后台始终是最佳实践。后台步骤在每个场景之前运行。

我们必须确保我们不会在其中放置太多步骤,因为您的场景可能会变得难以理解。

下面给出示例

功能:我想用有效和无效的数据登录网站

背景

鉴于我导航到网站

场景:以具有有效数据的新注册用户身份登录

当我输入有效的凭证时

|电子邮件 |有效密码 |

| [email protected] | 12345 |

当用户点击登录按钮时

然后在登录后验证标题

场景:通过输入无效密码使用无效数据登录

当我输入无效凭据时

|电子邮件 |无效密码 |

| [email protected] | 123456 |

当用户点击登录按钮时

然后应该显示错误消息

|错误信息 |

|身份验证失败 |

4.尝试重用步骤定义

最好的做法是重用我们在各种场景中经常使用的那些步骤定义,例如 “给定:用户导航到网站” 这可能是我们在每种情况下都需要的一个常见步骤。所以我们可以重用这一步。

重用这些步骤可以提高可维护性,以防万一发生任何更改,我们需要一步更新。

如果我们想重用该步骤,我们必须确保语言/单词应该是一致的。

在下面的示例中,步骤相同但单词不一致 点击并点击 两者是不同的词。所以我们必须注意区分大小写才能重用该步骤。

5.使用数据表

建议使用数据表来存储数据。我们可以在步骤中将数据作为参数提供,但是一旦我们拥有大量数据,那么放弃所有数据作为参数是不可行的。一旦我们有大量数据,最好使用数据表

数据表用于在步骤级别注入数据。在下面的代码中,我们为步骤“我输入了有效的凭据”提供了数据

功能:我想用有效和无效的数据登录网站

背景:

鉴于我导航到网站

@SmokeTest

场景:以具有有效数据的新注册用户身份登录

当我输入有效凭证时

|电子邮件 |有效密码 |title|

| [email protected] | 12345 |主页 |

| [email protected] | 12345 |主页 |

| [email protected] | 12345 |主页 |

| [email protected] | 12345 |主页 |

当用户点击登录按钮时

然后在登录后验证标题

6.使用场景大纲

场景大纲在场景级别而不是步骤级别注入信息。场景大纲后跟关键字 例子

功能:我想用有效和无效的数据登录网站

场景大纲:登录验证

鉴于我导航到网站

当我输入“ “ 和 ” ” 登录页面

用户点击登录按钮

然后验证“ ” 登录后</p> <p><strong>例子</strong> :</p> <p>|电子邮件 |有效密码 |title|</p> <p>| <a href="/cdn-cgi/l/email-protection" target="_blank">[email protected]</a> | 12345 |主页 |</p> <h1 id="7-标签的使用">7. 标签的使用</h1> <p>使用标签可能是 <strong>最佳实践</strong> 一旦我们想运行一堆测试用例。有时我们不想在一次运行中执行所有测试用例,或者我们想执行一组测试用例。所以最佳实践是通过在测试用例上放置标签来配置测试用例。它们标有@,后跟一些文本。</p> <p>例如,我们做了一组冒烟测试用例和健全性测试。我们可以在场景上加一个标签</p> <p>@SmokeTest、@SanityTest、@RegressionTest 等……</p> <blockquote> <p>功能:我想用有效和无效的数据登录网站</p> <p>背景:</p> <p>鉴于我导航到网站</p> <p>@ <strong>烟雾测试</strong></p> <p>场景:以具有有效数据的新注册用户身份登录</p> <p>当我输入有效的凭证时</p> <p>|电子邮件 |有效密码 |</p> <p>| <a href="/cdn-cgi/l/email-protection" target="_blank">[email protected]</a> | 12345 |</p> <p>当用户点击登录按钮时</p> <p>然后在登录后验证标题</p> <p>@ <strong>理智测试</strong></p> <p>场景:通过输入无效密码使用无效数据登录</p> <p>当我输入无效凭据时</p> <p>|电子邮件 |无效密码 |</p> <p>| <a href="/cdn-cgi/l/email-protection" target="_blank">[email protected]</a> | 123456 |</p> <p>当用户点击登录按钮时</p> <p>然后应该显示错误消息</p> <p>|错误信息 |</p> <p>|身份验证失败 |</p> </blockquote> <h1 id="8-根据需求映射您的场景">8. 根据需求映射您的场景</h1> <p>如果我们提供需求编号,这是一个最佳实践 __<strong><em>(#Jira 故事 ID)</em></strong> __ 在功能文件中的场景之后。如果任何场景失败,那么我们可以从执行报告中跟踪哪个需求失败 <em>(见下面的测试用例执行截图)</em></p> <p><img src="https://qanswer-1251273400.cos.ap-hongkong.myqcloud.com/post_images/25befce73ac461a7aca89ec58ceede07.jpg" alt="" loading="lazy"></p> <p>在第 6 行和第 14 行中,我们指定了需求编号</p> <p>功能:我想用有效和无效的数据登录网站</p> <p>背景:</p> <p>鉴于我导航到网站</p> <p>@SmokeTest</p> <p>场景:使用有效数据以新注册用户身份登录:QA-135、QA-156</p> <p>当我输入有效的凭证时</p> <p>|电子邮件 |有效密码 |</p> <p>| <a href="/cdn-cgi/l/email-protection" target="_blank">[email protected]</a> | 123451 |</p> <p>当用户点击登录按钮时</p> <p>然后在登录后验证标题</p> <p>@SanityTest</p> <p>场景:通过输入无效密码使用无效数据登录:QA-569、QA-281</p> <p>当我输入无效凭据时</p> <p>|电子邮件 |无效密码 |</p> <p>| <a href="/cdn-cgi/l/email-protection" target="_blank">[email protected]</a> | 123456 |</p> <p>当用户点击登录按钮时</p> <p>然后应该显示错误消息</p> <p>|错误信息 |</p> <p>|身份验证失败 |</p> <p><img src="https://qanswer-1251273400.cos.ap-hongkong.myqcloud.com/post_images/992c6b30e2aceea6aa2b1cf0f3ff588c.jpg" alt="" loading="lazy"></p> <h1 id="9-避免连接步骤">9. 避免连接步骤</h1> <p>在编写功能时,最佳实践是我们必须避免连接步骤。当你发现一个 Cucumber 步骤包含两个动作和一个“和”时,我们应该总是把它分成两个步骤。它分为两个步骤。每个步骤保持一个动作使步骤更加模块化并增加了可重用性。不过,这不是一般规则。连带步骤也有原因。但是,大多数时候最好避免它们。</p> <h1 id="10-以声明的方式编写而不是命令式">10. 以声明的方式编写,而不是命令式</h1> <p>场景应该写成用户会描述它们的方式。请注意仅描述单击链接和在表单字段中输入数据的场景,或包含代码的步骤。这不是功能描述。声明性特征是现实的、简明的,并且包含高度可维护的步骤。</p> <p><strong>声明性示例:</strong></p> <blockquote> <p>场景:验证登录</p> <p>给定用户导航到网站</p> <p>当用户输入凭据时</p> <p>然后用户点击登录按钮</p> <p>然后在登录后验证标题</p> </blockquote> <p><strong>命令式示例:</strong></p> <blockquote> <p>场景:验证登录</p> <p>鉴于我导航到网站</p> <p>当我输入“用户名”</p> <p>当我输入“密码”</p> <p>当我选中“记住我”复选框时</p> <p>然后用户点击登录按钮</p> <p>然后在登录后验证标题</p> </blockquote> <h1 id="11其他场景编写规则">11.其他场景编写规则</h1> <p>测试场景的编写方式应该对每个团队成员来说都易于理解和清晰</p> <p>以下是一些常见的建议</p> <ul> <li>正确使用正确的语法和拼写</li> <li>步骤定义不应以句点、逗号和其他标点符号结尾。</li> <li>避免行话</li> <li>使用正确的标点符号</li> </ul> <h1 id="️-测试愉快-️">☕️ 测试愉快! ☕️</h1> <p>更多博客请点击以下链接</p> <p><a href="https://qaautomationlabs.com/blogs/" target="_blank"> https://qaautomationlabs.com/blogs/</a></p> <p>版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明</p> <p>本文链接:<a href="https://www.qanswer.top/33088/07411308" target="_blank">https://www.qanswer.top/33088/07411308</a></p>

posted @ 2022-09-13 08:09  哈哈哈来了啊啊啊  阅读(181)  评论(0编辑  收藏  举报