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上找到这个演示例子的代码。

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

相关文章
|
8月前
|
存储 JSON Kubernetes
证书管理工具 cfssl 浅尝
证书管理工具 cfssl 浅尝
157 0
|
10月前
|
Web App开发 存储 前端开发
前端自动化测试之葵花宝典
前端自动化测试之葵花宝典
|
数据采集 人工智能 Windows
小工具集锦,5款好用的良心软件
今天来给大家推荐5款良心软件,每款都是经过时间检验的精品,用起来让你的工作效率提升飞快,各个都让你觉得相见恨晚!
116 0
小工具集锦,5款好用的良心软件
|
前端开发 安全 vr&ar
提升生产力,7 款好用的原型图工具推荐给你
目前有很多 UI 设计工具可以帮助您设计用户界面,码匠这里分享 7 款好用的原型图工具。
520 0
提升生产力,7 款好用的原型图工具推荐给你
|
测试技术
热饭的测开成果盘点第十五期:教程版接口测试平台
本期介绍的是接口测试平台-教程版,也就是本公众号长期连载的系列,很多同学都说想看看什么样了,今天就给大家展示下当前进度:
热饭的测开成果盘点第十五期:教程版接口测试平台
|
数据可视化 数据安全/隐私保护 Python
开发了一款小众开源工具,没想到还有这么多人用!
由于 Gitee Pages 的访问速度很快,很多朋友会选择 Gitee Pages 部署项目(如:个人博客、开源项目国内镜像站点)。但是它不像 GitHub Pages 那样,一提交代码就能自动更新 Pages,因为 Gitee 的自动部署属于 Gitee Pages Pro 的服务。
276 0
开发了一款小众开源工具,没想到还有这么多人用!
|
人工智能 Java 开发工具
不加班的秘诀:如何通过AOE快速集成NCNN?
NCNN是腾讯开源的一个为手机端极致优化的高性能神经网络前向计算框架。在AOE开源工程里,我们提供了NCNN组件,本文以SqueezeNet物体识别这个Sample为例,来讲一讲 NCNN组件的设计和用法。