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.

测试扩展

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

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

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

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

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

时间: 2024-12-20 21:09:16

FuncUnit 和 Cucumber —— 前端测试的最佳搭档的相关文章

在Jasmine+Protractor的环境下,如何使用mock实现伪造数据进行前端测试?

问题描述 在Jasmine+Protractor的环境下,如何使用mock实现伪造数据进行前端测试? protractor+jasmine刚开始学,现在可以轻松写出测试登陆的代码.比如向html input的框里输入,然后点击,判断下一个页面是不是预期的.但是现在pm要求用mock,就是不用服务器的数据,从而伪造一个数据,然后来进行测试,google了很久,支离破碎的代码很多,但是凑不成可以跑的程序.求大神帮忙,先谢过了

前端测试进化论2

说完了,前端技术的发展史,那么对应的前端测试发展史也随之发展. 石器时代--纯手工测试 早期的页面基本都是静态化的页面,只有几个链接或者图片,那么相对测试工作量不大,只需要我们打开页面查看加载是否正确. 铁器时代–xunit 到了javascript时代,随着其他语言xunit 风靡天下,js 也出现了它的xunit 框架. Jsunit,以往在测试js的时候,都是以alert方式来检测错误,很不专业. 2001年 jsunit 出现,让js调试称为可能. Jsunit 主要参考junit的设计

有没有一款综合性的前端测试工具?非常感谢

问题描述 有没有一款综合性的前端测试工具?非常感谢 请问有没有一款综合性的前端测试工具,集成常用的多浏览器兼容性测试,页面坏死链检查,页面Js错误检查,静态语法检查等 解决方案 同求,前端多浏览器测试太苦逼了 解决方案二: 多浏览器永远的痛啊!!

wap前端测试改进总结

前言 无线产品线的很多模块基本上都属于前端类型,前端模块一般具有如下几个特征:接收处理用户请求,本身不维护数据,从后端模块获取数据,进行build页面后展示给用户. 从图示可以看到,针对前端测试,我们需要根据手机特性,针对用户和前端的输入输出进行针对性的测试. 问题及解决方法分析 目前wap前端测试采用的方法有如下几个: 对于build页面的系统逻辑部分的case,采用自动化方式进行测试 对于页面展示部分的case,使用能够支持wml和xhtml页面的pc浏览器(比如opera或者安装了wmlb

前端代码标准最佳实践:javascript篇

前言 最近一直重构项目的前端代码,也参考了各种前端代码的最佳实践,目的是让前端的HTML,CSS,JavaScript代码更符合标准,有更好的性能,更好的可维护性,尝到了重构后的甜头,也萌生了写这个系列博客的念头.前端代码有其固有的灵活性,这就导致了目前前端代码非常混乱的局面,本系列文章希望能起到抛砖引玉的作用,让更多的人重视前端代码的质量,编写更标准的前端代码. 本系列文章共有三篇,分别讨论HTML,CSS,Javascript,本篇将讨论Javascript. 目前,Javascript已广

前端代码标准最佳实践:HTML篇

Web前端代码中,HTML是根本,CSS和JavaScript也是围绕着既有的HTML结构来构建,所以良好的HTML代码结构,除了提高了HTML代码的可读性,可维护性和执行性能之外,也可以让相对应的CSS和JavaScript代码更好的构建.距前面两篇探讨JavaScript(前端代码标准最佳实践:JavaScript篇)和CSS(前端代码标准最佳实践:CSS篇)之后,我们今天来探讨Web前端HTML的一些最佳实践. (1)HTML代码的基本规范 1. HTML的命名和格式 任何代码的混乱都是从

前端代码标准最佳实践:CSS篇

上一篇<前端代码标准最佳实践:javascript>发表后,大家讨论还是很热烈,从侧面体现了前端工程师对写标准的前端代码的重视程度很高.这些最佳标准实践并不是那个权威组织发布的,而是由大量的前端工程师们在实践过程中的经验总结,目的在于提高代码的可读性,可维护性和性能.那么接着上一篇,我们再来谈谈CSS代码的一些标准实践. 1,命名 和其他语言规范一样,css的命名也讲究命名要有意义,命名要尽可能短但是要足够表达含义:命名的词用连字符连接. 不规范的命名: #navigation{ } .dem

创兴银行中小企业的最佳搭档

Liu Chong Hing Bank Limited is the best partner for small and middle sized enterprises 文 /王舒悦 创兴银行始终专注于自己的目标客户,善用定位战略,树立自己的风格,展示自己的实力,以此制造一种"定势"去占领公众的心理空间,在公众中树立良好而独特的形象,进而提高竞争力. 在香港这个弹丸之地,数千家各类银行遍布各处,用"银行多过米铺"这句话来形容毫不过分,竞争达到白热化程度.在这一狭

前端测试进化论

第一篇web 发展史 这篇主要是帮助我们qa 了解前端的历史与现状. 测试工程师大部分时间可能关注的是feature正确性,而对于前端代码级别的测试基本没有关心过,随着各种前端框架在web和移动端大行其道,绽放各种高大上的功能时,我们渐渐的发现前端代码级别问题逐渐暴露出来,甚至超越后端之势.那么问题来了,为什么以前这种现象出现呢? 我们现来看看前端技术发展史. ##石器时代--开荒阶段 带有简单逻辑的界面 最早期的Web界面基本都是在互联网上使用,而且基本都是静态页面展示,人们浏览某些内容,填写