Cucumber之一Cucumber概述——学习新篇章

Cucumber的中文教程相对较少,小编找了一些英文培训教程,是英文视频,Cucumber+Java+Selenium,因为注重的是实际应用,操作类的,虽然英语尚不能完全听懂,但是听+看基本能懂,而且可以练练英语听力哦
教程视频地址 是百度网盘,后续会放到微信公众号:【软测小生】里面,请关注公号更新相关文章和视频资源。

获取Cucumber英文视频教程

Cucumber(黄瓜)是什么?
你也可以通过这篇博文了解个大概(点击查看) 。

开始使用Cucumber BDD在敏捷团队中进行测试

简介

敏捷软件方法最近在快速变化的市场中越来越受软件开发团队的欢迎。然而,这种不断增长的趋势也迫使测试团队管理和维护他们的测试用例和测试脚本,以满足不断变化的需求。因此,从一开始就应该选择合适的测试方法,以便顺利地实现任何敏捷软件项目。

Cucumber及其突出特点

由于使用Cucumber工具的行为驱动开发(BDD)方法,目前已有许多敏捷软件项目取得了成功。Cucumber是什么?

Cucumber是一个工具,用于运行以BDD格式创建的自动化验收测试。该工具最突出的特性之一是能够将纯文本功能描述(使用Gherkin语言编写)作为自动化测试执行。让我们来看看下面的例子:

Feature: Update password

 Scenario: Admin user can update the user password

Given I am in the HR system with an Admin account
When I update password of another user
Then I receive a message for updating password successfully
And user password is updated to the new password

#以下是中文的描述

Feature: 更新密码

 Scenario: 管理员用户可以更新用户密码

Given 我在人力资源系统中有一个管理帐户
When 我更新了另一个用户的密码
Then 我收到一条更新密码成功的消息
And 将用户密码更新为新密码
image.gif

这种令人难以置信的行为驱动开发(BDD)方法具有以下优点:
——使用无所不在的语言编写BDD测试,这是一种围绕领域模型构建的语言,被开发人员、测试人员、BA人员和客户组成的所有团队成员广泛使用。
——连接软件团队的技术人员和非技术人员。
——允许与开发人员的代码直接交互,但是BDD测试是用一种语言编写的,业务利益相关者也可以使用这种语言编写测试。
——最后但并非最不重要的是,验收测试可以自动执行,同时也可以由业务利益相关者手动执行

Cucumber有助于增进沟通

Cucumber有助于提高同一项目中技术人员和非技术人员之间的沟通。让我们来看看下面的需求及其自动化测试:

As an Admin User,
I would like to change the password of other user's accounts.
Feature: Update password
 Scenario: Admin user can update the user password
   Given I am in the HR system with an Admin account
   When I update password of another user
   Then I receive a message for updating password successfully
   And user's password is updated to the new password

#中文
作为一个管理用户,
我想更改其他用户帐户的密码。
Feature: 更新密码
 Scenario: 管理员用户可以更新用户密码
Given 我在人力资源系统中有一个管理帐户
When 我更新了另一个用户的密码
Then 我收到一条更新密码成功的消息
And 将用户密码更新为新密码

image.gif

使用TestNG,上述测试场景可以实现如下:

@test
public void testAdminUserCanUpdateUserAccountPassword() {
 // create users 创建用户
 User userAdmin = new User(UserRole.ADMIN, username, password);
 User user = new User(UserRole.VIEWER, user_username, user_password);

 // use Admin user to update another user password 使用管理员用户更新其他用户的密码
  String message = userAdmin.updatePassword(user, user_new_password);

// verify password changed  验证更新的密码
  Assert.assertEquals(message, "Password changed successfully");
  Assert.assertEquals(user.getPassword(), user_new_password);
}
image.gif

同样的测试用例可以用Cucumber编写:

Feature: Update password
 Scenario: Admin user can update the user password
   Given I am in the HR system with an Admin account
   When I update password of another user
   Then I receive a message for updating password successfully
   And user's password is updated to the new password
image.gif

上面的两个自动化测试脚本都可以很好地自动完成测试。但是你的团队的所有测试人员都做出了这些测试吗?其他业务分析师和其他利益相关者是否可以在验收测试阶段再次使用这些测试?

对于大多数手工测试人员和BA人员来说,使用TestNG进行自动化测试可能比较困难。而且,验收测试不可能再次使用这个测试。因此,基于上述缺陷,不能认为这是一个合适的方法。

相反,使用Cucumber的自动化测试是用业务领域语言或自然语言创建的,软件项目团队的所有成员都可以轻松地使用这些语言。沟通对于任何开发团队都是至关重要的,尤其是在敏捷团队中。通常在开发人员和测试人员之间会有许多连续的聊天、讨论,甚至争论,以确定某个特性的正确行为是什么。通过使用Cucumber,相同的需求规范现在被开发人员用于开发,被测试人员用于测试。它被认为是一个强大的工具,因为它可以帮助降低误解和沟通障碍的风险。

Cucumber是一个自动化的验收测试工具

验收测试通常由BA人员/客户进行,以确保开发团队已经构建了特定的功能。这个测试阶段的典型活动是使用来自线上环境特定的真实数据,根据原始需求对系统进行验证。Cucumber测试不仅遵循测试场景的需求,还可以帮助BA人员或产品经理轻松调整测试数据。下面是一个稍微调整一下的演示:

As an Admin User,
I would like to change the password of other user's accounts.         
Feature: Update password
 Scenario: Admin user can update the user password
   Given I am in the HR system with an Admin account
   When I update password of another user
   Then I receive a message for updating password successfully
   And user's password is updated to the new password
image.gif

自动化测试用Cucumber框架编写:

Scenario Outline: Verify Updating user password feature
 Given I am in the HR system with "<account_type>" account
 And there is another user with "<old_password>" password
 When I update password of the user to "<new_password>"
 Then I got the message "<message>"
 And the user password should be "<final_password>"
Examples:
|account_type  |old_password |new_password |message               |final_password |
|Admin         |$Test123     |@Test123     |Password changed..    |@Test123       |
|Viewer        |$Test123     |@Test123     |Invalid right access..|$Test123       |
image.gif

所有测试人员都可以参与Cucumber BDD的自动化测试

除了改善测试团队成员之间的沟通,Cucumber还帮助有效地利用测试人员的技能。每个组织中都存在着专业知识差距。换句话说,一些测试人员在利用自动化测试进行编程方面具有很高的技术专长,而另一些测试人员在同一个团队中执行手工测试,他们的编程技能有限。多亏了Cucumber,所有的测试人员,无论他们的技术水平如何,都可以参与到执行自动化测试的过程中。

让我们来看看上面的例子:
-任何了解业务逻辑和工作流的测试人员都可以编写功能文件、添加更多场景和测试数据集。
-任何具有基本编程知识并知道如何创建对象、访问属性、调用方法的测试人员都可以生成步骤定义(
step definitions)。
-任何具有较高编程水平的测试人员都可以参与构建框架、定义数据源连接等过程。

在实施Cucumber时仍然存在一些潜在的问题:
Cucumber使用业务领域知识帮助运行纯文本文件中指定的测试场景。因此,语言的使用和创建测试的人的看法可能直接影响测试场景,从而导致误解的风险。应该清楚地展示测试场景,并且它们的实现应该对每个步骤都执行准确。
例如,当你想验证谷歌的搜索功能时,测试应该是:

Scenario: performing a search on google
Given I am on "www.google.com" site
When I search for "Cucumber and BDD"
Then ...
image.gif

这些步骤可纳入以下测试:

Scenario: performing a search on google
When I search for "Cucumber and BDD"
Then ...
image.gif

Cucumber工具的各个阶段用一种普通语言执行。它们可以在各种测试场景中再次使用。这有助于减少创建测试的工作。然而,保持测试可读性和可重用性是一个很大的挑战。
如果测试是在一个非常高的水平上编写的,供任何参与人员理解;
可以重用的步骤很少(粗体):上面的脚本都是正确的;
然而,第二个并不明显,因为它的作用比预期的要大得多:打开谷歌的网站并使用指定的文本进行搜索。 想象一下,如果您想扩展测试来搜索更多的文本,您可以重复上面的步骤,因此谷歌站点会打开两次。如果您没有严格遵守要求,Cucumber测试工具迟早会引起误解,并且在扩展时很难维护。

Feature: Update password

 Scenario: Admin user can update the user password
   Given I am in the HR system with an Admin account
   When I update password of another user
   Then I receive a message for updating password successfully
   And user's password is updated to the new password

 Scenario: Viewer user cannot update the user password
   Given I am in the HR system with a Viewer account
    When I update password of another user
    Then I receive a message for not able to update the user password
    And user's password remains the same
image.gif

相反,如果测试是通用的并且可以重用,例如:核实更新用户的姓氏,非技术人员将难以跟进及进行验收测试:

Scenario: Admin user can update user password:
 Given I am in the "$System.HR_Page" with "admin@test.com" username
and "$Test123" password
 And there is another user in "$System.HR_Page" with "user@test.com" 
username and "$Test123" password
 When I update "$UserTemplate.Password" of "user@test.com" user to"@Test123"
 And I save the response message as "response_message"
 Then "$response_message" should be "Password changed successfully"
 And the  "user@test.com" user's "$UserTemplate.Password" should be"@Test123"
image.gif

在测试过程中,您必须定期调整测试场景,直到它们完全达到所有成员都能理解和重用的可接受的平衡。

Scenario: Verify Updating user password feature
 Given I am in the HR system with "Admin" account
 And there is another user with "$Test123" password
 When I update password of the user to "@Test123"
 Then I got the message "Password changed successfully."
 And the user password should be "@Test123"
image.gif

或者使用更多的测试数据:

Scenario Outline: Verify Updating user password feature
 Given I am in the HR system with "<account_type>" account
 And there is another user with "<old_password>" password
 When I update password of the user to "<new_password>"
 Then I got the message "<message>"
 And the user password should be "<final_password>"

Examples:
|account_type |old_password |new_password |message           |final_password |
|Admin        |$Test123 |@Test123     |Password changed.. |@Test123  |
|Viewer       |$Test123 |@Test123     |Invalid right access.. |$Test123  |
image.gif

对于想要开始使用Cucumber的测试团队来说,这是非常重要的注意事项

-将自动化测试视为与实际项目同等重要的测试。代码应该遵循编码实践、惯例等。
-应考虑使用适当的编辑器工具。这个编辑器应该帮助调试和编辑标准文本格式的特性文件。Aptana(免费编辑器)、RubyMine(商业编辑器)和Katalon Studio是完全支持基于bdd的Cucumber的合适选项。
-最后但并非最不重要的,使feature文件成为一个实际的“通信(communication)”层,在那里您可以存储接收到的测试数据和格式化测试数据。不包含域业务逻辑。

综上所述,Cucumber是在健壮的测试框架之上为我们提供真实通信层的最强大工具之一。该工具可以帮助在从后端到前端的广泛测试需求上运行自动化测试。此外,Cucumber在测试团队成员之间建立了深厚的联系,这在其他测试框架中很难找到。基于多年的自动化测试经验,我建议应该实现用于Web UI和Web服务测试的Cucumber,以帮助成功运行敏捷软件项目。

后续会更新更多文章,上文种可能有些许错误,若有请指正,谢谢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345