理解和使用检查点
在自动化测试中,准确性和效率是两个不可或缺的关键元素。检查点(Checkpoints)就是一个有效工具,可以帮助我们在自动化测试中提高这两个关键指标。检查点是在自动化测试中用于验证测试结果的重要手段,通过使用它们,我们可以确保应用程序在各种场景和条件下都能按照期望的方式运行。
检查点可以理解为是在测试脚本的关键位置设置的校验点,其目的是验证被测系统的当前状态是否符合预期。例如,如果你在测试一个计算器应用程序,你可能会有一个期望,即输入"2+2"后,计算器应该显示"4"。在这种情况下,你就可以使用检查点来验证这个期望。
CukeTest提供了多种设置检查点的方法,如直接、灵活的assert
库,以及专门针对图形用户界面(GUI)元素属性验证的checkProperty
方法。接下来,我们将深入探讨如何在CukeTest中利用这些方法进行有效的自动化测试。
使用assert断言库进行检查
在Node.js和Python中,assert
库是一种常用的断言工具,提供了一种简单而强大的方法来编写测试断言。这在测试需要验证特定条件是否为真的场景中尤其有用。
让我们通过一个简单的例子来了解如何在Node.js中使用assert
库。假设我们要验证一个变量result
的值是否为4
,我们可以这样做:
const assert = require('assert');
let result = 2 + 2;
assert.strictEqual(result, 4, 'Expected value is 4');
assert.strictEqual
方法来验证result
的值是否等于4
。如果值不等于4
,则会抛出一个错误,错误消息是"Expected value is 4"。
在Python中,使用assert
的方法非常类似,如下所示:
result = 2 + 2
assert result == 4, 'Expected value is 4'
在这两个例子中,我们都使用了断言来验证结果是否符合我们的期望。但是,这些例子都是在非GUI的环境中。当我们处理GUI时,断言通常会涉及到检查用户界面元素的属性。
例如,假设我们正在测试一个计算器应用程序,我们可能希望验证计算器显示的结果是否正确。在这种情况下,我们可以使用assert
库来验证计算器的显示屏文本是否与我们的期望值匹配。不过,这将涉及到查询界面元素属性并将其与期望值进行比较,这个过程可能会比较复杂。
使用 checkProperty
方法进行检查
为了简化GUI测试中的属性检查,CukeTest 提供了 checkProperty
方法,适用于 Windows、Qt、Java和ATK控件。该方法让验证GUI元素的属性变得更加容易。与手动使用 assert
库进行属性检查相比,checkProperty
方法能显著减少代码的复杂性。
基本用法示例
假设我们正在测试一个按钮,并希望确认它是否可用。在 CukeTest 中,我们可以这样使用 checkProperty
方法:
await model.getButton("Save").checkProperty('enabled', true, 'The button should be enabled');
model.getButton("Save").checkProperty('enabled', True, 'The button should be enabled')
在这个例子中,我们要求 CukeTest 检查 Button
的 enabled
属性是否为 true
。如果属性值不是 true
,CukeTest 会抛出一个错误,错误信息为 "The button should be enabled"。
通过正则表达式检查
checkProperty
方法还支持使用正则表达式来验证属性值是否符合特定的模式。这在需要匹配部分文本或验证格式时非常有用。
例如,假设我们希望确认文本框中的文本是否以 "Hello" 开头,可以使用以下代码:
await model.getEdit("textEdit").checkProperty('text', /^Hello/, 'The text box text should start with "Hello"');
model.getEdit("textEdit").checkProperty('text', re.compile(r'^Hello'), 'The text box text should start with "Hello"')
这段代码会检查文本框的 text
属性是否以 "Hello" 开头。如果文本内容不匹配该正则表达式,将抛出错误,错误信息为 "The text box text should start with 'Hello'"。
检查点对话框
此外,CukeTest 还提供了可视化的检查点菜单。在录制过程中,通过按住 Alt
键同时使用鼠标右键点击界面中的控件,可以直接打开该控件的检查点添加面板。这个面板可以用于快速添加针对控件属性的校验脚本,进一步提升测试效率。关于快捷添加检查点的更多详细信息,请查看录制中添加属性检查点。
assert与checkProperty的比较
assert
和checkProperty
都是CukeTest中常用的检查工具,每个都有自己的优势和适用场景。
assert
库提供了强大的断言功能,包括深度相等、严格相等、抛出错误等等。因此,当需要对测试结果进行复杂的验证时,assert
库是一个很好的选择。然而,assert
库需要更多的代码来获取GUI元素的属性,可能会增加代码的复杂性。
checkProperty
方法则更加简单、高效。它直接对GUI元素的属性进行检查,不需要获取属性的步骤,大大减少了代码的复杂性。然而,checkProperty
方法的功能没有assert
库那么强大,如果需要进行更复杂的验证,assert
库可能是更好的选择。
总的来说,assert
库和checkProperty
方法各有优势,应根据测试需求来选择适合的检查工具。
图像的比较
除了对GUI元素的属性进行检查外,CukeTest还支持对图像进行比较。这在验证图像显示是否正确的测试场景中非常有用。你可以使用CukeTest提供的Image.imageEqual
和Image.imageCompare
方法来进行图像比较。
下面是一个简单的示例,展示了如何使用Image.imageEqual
方法进行图像比较:
const { Screen } = require('leanpro.common');
const { Image } = require('leanpro.visual');
const assert = require('assert');
async function testCompareImages() {
// Read the expected image from file
const expectedImage = await Image.fromFile("expected.png");
// Capture the actual image by taking a screenshot
const actualImage = Screen.capture();
// Compare the two images
let result = await Image.imageEqual(expectedImage, actualImage)
assert(result, "The images do not match!");
}
Image.imageEqual
方法将返回true
;否则,将返回false
。更多用法可以参考这篇演练:图片的比较。
此外,CukeTest还提供了checkImage()
方法,并支持在录制过程中添加图像检查点,简化了图像检查点的添加过程。详细信息,请参阅录制中添加图像检查点。
最佳实践
成功的自动化测试不仅仅取决于我们使用了哪些工具,更关键的是如何使用这些工具。下面是一些关于检查点使用的最佳实践:
确保检查点的重要性:所有的检查点都应该是重要的,也就是说,如果检查点失败,那么应该认为测试失败。避免使用不重要的检查点,因为这可能会引起不必要的警告,并可能导致真正的问题被忽视。
使用合适的检查方法:
assert
和checkProperty
都有其适用场景,合理使用可以提高测试效率。比如对于属性值的检查,使用checkProperty
更简洁,而在需要进行更复杂的逻辑判断时,assert
会更有用。注重检查点的可读性和维护性:测试代码需要为人类阅读和维护,因此,检查点的代码应该清晰明了,尽量避免复杂的逻辑。
合理地使用图像比较:图像比较能够帮助验证GUI显示的正确性,但是也可能受到不同显示设置和环境因素的影响,因此在使用时应当谨慎。
检查点是自动化测试中的关键,它们是验证测试是否通过的重要方式。有效地使用检查点,可以大大提高我们的自动化测试质量。希望本文对你在使用CukeTest进行自动化测试时有所帮助。