演练:创建简单的Cucumber测试脚本
本章旨在实现以下目标:
- 使用CukeTest创建一个简单的行为驱动测试脚本。
- 创建剧本文件并实现测试代码。
- 运行测试并生成测试报告。
以下是操作步骤.
1. 新建项目
点击工具栏上的 新建项目 按钮,弹出创建项目对话框。
在对话框中,输入BasicTest
作为项目名,选择 Basic 作为项目模板,选择一个项目路径,然后点击 确定 。CukeTest将为您创建一个新的项目。
2. 编辑剧本
添加剧本名称和描述
在上一节完成项目创建后,会自动打开feature1.feature
文件。点击可视化按钮 ,您可以在可视化界面中进行修改。默认的feature
文件可视化界面如下:
要添加剧本的名称和描述,请按照以下步骤操作:
双击
<剧本名称>
使其变为可编辑状态,然后输入“加法”。按下键盘上的
Enter
键,CukeTest会自动跳转到<剧本描述>
框,将内容更改为:
为了避免一些愚蠢的错误
作为一个数学白痴
我希望有人告诉我数字相加的结果
完成上述步骤后,我们的feature
文件内容应该如下图所示:
编辑场景
按照以下步骤填充一个场景:
- 在场景标题上,双击鼠标,使
<场景名称>
变为可编辑状态,将其内容更改为“两个数相加”; - 按下
Enter
键,自动定位到操作步骤上面,将第一个操作步骤修改为“我已经在计算器里输入6”,并选择关键字为“假如”; - 按下
Enter
键,自动跳转到下一个操作步骤,并添加如下内容:“我按相加按钮并输入7”,关键字为“当”; - 根据以上操作,我们可以添加第三个操作步骤:“当我按'相加'按钮”,第四个操作步骤为:“那么我应该在屏幕上看到的结果是13”。(添加新的操作步骤时,您也可以点击
添加一个步骤
按钮)。
最后操作完成的界面应该是这样的:
以上操作是在 可视 界面中完成的。点击文本按钮 ,feature1.feature
文件的内容应该如下所示:
# language: zh-CN
功能: 加法
为了避免一些愚蠢的错误
作为一个数学白痴
我希望有人告诉我数字相加的结果
场景: 两个数相加
假如我已经在计算器里输入6
当我按相加按钮并输入7
那么我应该在屏幕上看到的结果是13
您也可以在 文本 界面中编辑feature
文件,然后切换回 可视 界面,效果是一样的。
3. 实现自动化代码
现在我们已经有了feature
文件,其中定义了场景和场景中的步骤,接下来可以直接生成自动化代码的样例。
请按照以下步骤生成自动化代码:
打开
step_definitions/definitions1.js
文件,然后回到feature
文件的可视界面。点击操作步骤后面的灰色按钮 ,这将自动生成对应的自动化代码样例。自动生成的步骤代码如下图所示:重复步骤1,为场景中的其余未实现步骤按照相同方式生成类似的代码框架。
修改
step_definitions/definitions1.js
文件,根据生成的代码样例实现具体的步骤逻辑。最终代码如下所示:
const { Given, When, Then } = require('cucumber');
const assert = require('assert'); // 1. 引入了 assert 断言库
//// 你的步骤定义 /////
// 2. 参数名由 arg1 改为了 num ,更加直观
Given("我已经在计算器里输入{int}", async function (num) {
this.sum = num;
// 3. 删除了 return 'pending'
});
When("我按相加按钮并输入{int}", async function (num) {
this.sum += num;
});
Then("我应该在屏幕上看到的结果是{int}", async function (result) {
assert.equal(this.sum, result);
});
在上述代码中,我们做了以下修改:
- 引入了
assert
断言库:因为第三个步骤需要使用断言来判断运行结果是否正确,我们引入了assert
库来实现断言功能。如果在工具箱中拖拽“常用”->“断言”到脚本中,将会自动生成断言脚本和相应的引用。 - 修改参数名:默认情况下,参数名为
arg*
,例如arg1
、arg2
等。在这里,我们将默认参数名修改为符合语境的名称,使脚本更易于阅读。 - 删除了
return 'pending'
脚本:如果不删除此行代码,它将被视为未实现的步骤,并在报告中显示。务必注意删除这行代码。
4. 运行项目
在工具栏中,点击【运行项目】按钮 ,将自动运行我们定义的测试用例,并生成测试报告。
运行完成后,您将会看到生成的测试报告,如下图所示:
在测试报告中,您可以查看测试用例的执行情况,以及每个步骤的执行结果。这样,您可以及时了解项目的测试覆盖率和执行情况,从而更好地控制和管理项目的质量。
5. 创建数据驱动的测试
现在我们已经有一个可运行的场景,它可以运行一个加法操作并验证结果。然而,在实际测试中,我们通常需要使用更多的数据输入来验证功能的各种情况。为了实现数据驱动的自动化测试,我们可以使用Cucumber中的场景大纲(Scenario Outline)功能。
下面的步骤将向您展示如何将一个已有的场景修改为一个场景大纲:
您可以选择在 可视 界面或 文本 界面中进行操作。在这里,我们将描述在 可视 界面中的操作。 文本 界面的操作类似于其他文本编辑器。
点击场景标题前面的图标 ,或者右键单击场景标题,弹出场景菜单,选择【更改场景类型】->【场景大纲】:
现在场景变成了场景大纲,其中包含一个示例表格:
您可以注意到,标题上显示的场景类型已更新为“场景大纲”,并且数字参数已自动提取到表格中。
参数名称“param1”和“param2”可能不太直观,我们可以将这些参数名称更新为更具描述性的名称。双击表头,使其可编辑,并将参数名称更改为更有意义的名称。
还要更新步骤中的参数名称,使其与示例表格的表头名称相同。
在编辑表格时,您可以使用
Tab
键或Shift + Tab
键在单元格之间前后导航。按Tab
键可以在当前行创建新的单元格,按Shift + Tab
键可以在当前行创建新的列。更新数据表格,添加更多行数据。您可以在表格的任意位置双击,然后开始编辑。按
Tab
键或Shift + Tab
键进行导航。如果您位于表格的最后一个单元格,并再次按下“Tab”键,将会创建新的一行,然后您可以编辑新的数据行。您还可以右键单击表格,并选择菜单项【插入列】或【添加列到末尾】来插入新的列。
或者,您可以右键单击表格,将表格导出为CSV文件,在其他应用程序中编辑数据(如Excel),然后重新导入。
另外请注意,一个场景大纲可以有多个示例表格,因此您可以将多个表格导入到场景大纲中。单击表格时,您可以在表格工具栏上选择导入和导出功能:
验证:在“文本”视图中,文本应类似于以下内容:
场景大纲: 两个数相加 假如我已经在计算器里输入<operand1> 当我按相加按钮并输入<operand2> 那么我应该在屏幕上看到的结果是<result> 例子: | operand1 | operand2 | result | | 6 | 7 | 13 | | 0 | 1 | 1 | | 10 | 5 | 15 | | 320 | 45 | 365 |
再次运行此报告时,您将获得以下报告:
您可以看到,对于每行数据,它将运行一次场景,因此您可以在报告中获得4个场景的结果。我们没有添加任何新的代码,只是通过添加数据行来获得更多的场景验证情况。这是数据驱动测试的优势所在。
6. 自定义运行配置
当项目中有很多场景时,有时候我们只想运行其中的某些场景,这时可以为不同的场景或剧本添加标签,然后在运行时通过标签来过滤想要运行的场景。下面是如何通过标签来过滤运行场景的步骤:
添加标签:
在【场景大纲】的顶部双击添加标签:
输入新标签名称为“math”并移开鼠标,它会自动转换为标签样式:
编辑场景大纲:
切换到“文本”视图,编辑场景大纲以添加以下文本(在红色圆圈中的线条表示标签):
在上图中,我们将一个Example表格拆分为两个表格,每个表格都带有一个标签。请注意,我们可以为Feature、Scenario或Example表格添加标签以便后续过滤运行。
编辑运行配置:
点击工具栏上的【运行项目】按钮旁边的向下箭头,然后选择【编辑运行配置】:
这将打开运行配置对话框。您也可以通过点击菜单【运行】->【编辑运行配置文件】来打开对话框。
添加标签过滤器:
在配置窗口中,点击【新建配置文件】创建一个新配置,在【标签过滤器】中填写
@math and @basic
:点击
确定
后,对话框会关闭并保存配置。选择配置运行:
点击下拉箭头,选中
配置1
,如下图所示,这样就会运行这个配置:通过以上配置,只有同时带有
@math
和@basic
标签的场景会被运行,达到了我们想要的过滤效果。从测试报告中可以看到,只有带有标签
@math
和@basic
的场景被执行了,其他没有标签的场景并未运行。这样我们可以根据需要灵活地选择运行特定标签的场景,方便了测试的管理和执行。