FuncUnit 和 Cucumber —— 前端测试的最佳搭档

简介:

这周我花了些时间研究FuncUnit 和Cucumber. 本文中我将说明为啥要联合使用这两个框架及使用它们进行前端测试.

Cucumber

这是 Cucumber wiki:

Cucumber 可以执行基于文本描述的功能自动化测试

Cucumber 可以运行根据基于文本定义的自动化测试.它是基于BDD开发模式的,他方面了非技术人员的测试用例开发.

我一开始定义了一些功能实现。这是一个多选功能,就涉及选中和取消选中:

**功能点: 取消选择场景: 取消全部选项 使用多选控件和选项
当用户点击取消全部按钮时,全部选中的选项就从选项卡上移除了,并恢复到未选项目单中。...**
场景定义好了,就开始写测试用例。 FuncUnit 使用简洁的语法来描述用户行为场景.

FuncUnit

FuncUnit的描述:

FuncUnit增强了 QUnit 和Jasmine库, 借以描述用户行为进一步进行黑盒测试.

FuncUnit 有两点:

1.Actions - 描述动作,点击,移动,滑动等.

2.Waits - 当判定条件为真后执行相应函数,要么超时或是测试失败.

举例如下:

F('#login').click();
F('#login-modal').exists("Login modal appeared");

FuncUnit 使用了 jQuery - like语法,意思就是:

1.点击login id

2.在等到 id#login-modal出现在页面上, 之后出现 "Login modal appeared" 提示信息

FuncUnit + Cucumber
我加了一些代码来使用Funcunit和Cucumber ( QUnit 作为断言的库文件), 这样就能这样写下测试用例:

...this.Given('A multiselect widget with selected items', function(next){
    F('.selected-items-wrap li').size(1, function(){
        ok(true, self.getCurrentStepName());
        next();
    });
})this.When('User clicks on the selected item checkbox', function(next){
        selectedItem = can.trim($('.selected-items-wrap li:first').text());
        F('.selected-items-wrap input[type=checkbox]:first').click(function(){
            ok(true, self.getCurrentStepName());
            next();
        })
    })
...

每一步都有 Given/When/Then 块, 这只是少部分满足了需求.

接着把回调函数参数传递给 action 或wait, FuncUnit 接着会在 action or wait 成功调用后被使用.

我们使用回到函数检测测试的成功状态,接着调用next函数完成下一步动作.

这些断言都在 QUnit's 测试里和目标数字比对.

聚合代码 i没多少(~100 行), 但却是很好的 API.
image

测试扩展

完成上面的所有工作后,我突然冒出了一个想法:如果我们把这种文档形式的测试重用会出现怎么样的效果呢?

用非技术人员可以理解的语言书写了功能定义,现在唯一要做的事情就是以某种方式演示某人使用此测试的时候所看到的结果。
最终证明完成这些任务非常简单 。我已经对FuncUnit的动作函数进行了扩展,这样,每次运行它的时候它就会模拟进行点击或者输入(或者其他用户动作),它将首先将指向元素的虚拟光标移动到div处。我觉得这样的结果是令人十分满意的:

点击侧栏的场景,运行场景演示

你可以用这种方法向客户演示功能,以及演示测试的文档。你可以在GitHub上找到这个演示例子的代码。

如果你有任何意见或者问题,请在下面留言或者直接发送给我的邮箱发送邮件。

相关文章
|
2天前
|
XML Java Maven
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
在 Cucumber 测试中自动将 Cucumber 数据表映射到 Java 对象
20 7
|
1月前
|
JavaScript 前端开发 Java
Spring Boot+cucumber+契约测试
Spring Boot+cucumber+契约测试
12 0
Spring Boot+cucumber+契约测试
|
敏捷开发 自然语言处理 Java
Cucumber -基于 behave 自动化测试指南 (一)
基于 behave 自动化测试系列教程
|
自然语言处理 测试技术 数据库
|
JavaScript .NET 测试技术
javascriptMVC教程 -- 14.FuncUnit实例:完成jquery焦点图插件的自动化功能测试
  FuncUnit相关的知识我在之前的博文已有简单介绍,大家可以自行阅读《javascriptMVC入门 -- 12.FuncUnit》。他提供了很多api方法,我的文章中没有涉及,大家可以去官网查看,地址:http://www.javascriptmvc.com/。
1009 0
|
1月前
|
移动开发 JSON Java
Jmeter实现WebSocket协议的接口测试方法
WebSocket协议是HTML5的一种新协议,实现了浏览器与服务器之间的全双工通信。通过简单的握手动作,双方可直接传输数据。其优势包括极小的头部开销和服务器推送功能。使用JMeter进行WebSocket接口和性能测试时,需安装特定插件并配置相关参数,如服务器地址、端口号等,还可通过CSV文件实现参数化,以满足不同测试需求。
142 7
Jmeter实现WebSocket协议的接口测试方法
|
1月前
|
JSON 移动开发 监控
快速上手|HTTP 接口功能自动化测试
HTTP接口功能测试对于确保Web应用和H5应用的数据正确性至关重要。这类测试主要针对后台HTTP接口,通过构造不同参数输入值并获取JSON格式的输出结果来进行验证。HTTP协议基于TCP连接,包括请求与响应模式。请求由请求行、消息报头和请求正文组成,响应则包含状态行、消息报头及响应正文。常用的请求方法有GET、POST等,而响应状态码如2xx代表成功。测试过程使用Python语言和pycurl模块调用接口,并通过断言机制比对实际与预期结果,确保功能正确性。
133 3
快速上手|HTTP 接口功能自动化测试
|
6天前
|
JavaScript 前端开发 API
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
vue尚品汇商城项目-day02【9.Home组件拆分+10.postman测试接口】
15 0