Node.js躬行记(11)——E2E测试
Cypress是为现代网络构建的前端测试工具,解决了开发人员和 QA 工程师在测试应用程序时面临的关键痛点。
在这个测试框架中包含了E2E测试、集成测试和单元测试(内嵌了Mocha),我们需要的是它的E2E测试的能力。
官网中包含详尽的API接口文档,以及多个视频教程、实例等,只要有耐心,看完文档,上手是不成问题的。
之所以要引入E2E测试,主要是为了保证主流程能够不出错,尤其是在后期做修修补补后,有一个可靠的方式告诉我们当前页面是正常的就行。
所以,并不会要求E2E的覆盖率要达到怎样的一个数字,只是为了保证代码的健壮性。
一、安装和初始化
安装命令如下:
npm install cypress --save-dev
下面这个命令会初始化一堆已经写好的用例:
npx cypress open
命令执行完后,就会在根目录中新增cypress文件夹,其中 fixtures 文件存放自定义的 json 文件,integration 文件存放测试用例,support可以自定义命令。
|-- fixtures
|-- integration
|----- example.spec.js
|-- plugins
|-- support
在 integration 中包含 1-getting-started 和 2-advanced-examples 两个文件夹,这些是内置的用例,可以作为demo查看。
二、启动
将 cypress open 命令添加到 scripts 中,就能通过 npm run cypress 命令执行E2E测试了。
{
"scripts": {
"cypress": "cypress open"
}
}
运行后会出现下面这个界面:
点击某个测试用例文件,就会开启一个浏览器,并显示测试过程,绿色是正常,红色是异常,下图是正常的结果。
三、测试用例
下面的用例在模拟登录,首先是通过 visit() 函数请求登录地址。
describe('登录', () => {
beforeEach(() => {
cy.visit('http://localhost:8000/login')
}) it('账号和密码错误', () => {
cy.get('#userName').type(userName); //读取ID为userName的控件,并赋值
cy.get('#password').type(pwd + '{enter}'); //读取ID为password的控件,赋值后自动按回车
cy.contains('测试用户').should('exist'); //界面中是否包含测试用户的标签
});
});
然后通过get()读取指定选择器的控件,选择器的语法可参考jQuery,官方提供了众多的API,例如 wait()、find()、wrap()、log()等,此处只演示了其中的几个,断言可参考 chai。
cypress的功能非常强大,在应用到实际项目中后,就能慢慢解锁了。
还有一个Testing Library库,封装了一些常用的查询功能,例如根据内容查询控件,有需要的话可以自行安装。
最新文章
- 用C#开发ActiveX控件,并使用web调用
- .net之工作流工程展示及代码分享(预告)
- wireshake抓包,飞秋发送信息,python
- HDU5726 GCD(二分 + ST表)
- 有序列表和无序列表、流、格式布局:position
- angularJS自定义指令模板替换
- 【转】MYSQL入门学习之九:索引的简单操作
- [转载]jQuery.lazyload详解 - 图片延时加载
- jbpm4.4 demo1
- 20169210《Linux内核原理与分析》课程总结
- Robotium -- 针对apk包的测试
- com.google.common.collect.Lists#transform使用注意
- lxd-启动篇分析
- 通过chrome inspect 来调试手机hybird APP
- 【Linux】添加sudo用户、sudo用戶組
- 2018上C语言程序设计(高级)博客作业样例
- 【Swift 4.2】uuid 取 hashCode(与 Java/Go/Kotlin 一致)
- (87)Wangdao.com第二十天_JavaScript document 节点对象
- Exp4 恶意代码分析 20164313 杜桂鑫
- 09、高级编程之基于排序机制的wordcount程序
热门文章
- Specification使用notin
- 【C++】 四种强制类型转换(static_cast 与 dynamic_cast 的区别!)
- 检测一个页面所用的时间的js
- ubuntu apt-get Failed to fetch Temporary failure resolving 'security.ubuntu.com'
- 如何实现CSS限制字数,超出部份显示省略号
- Python语法之函数、引用和装饰器
- go语言学习代码
- 性能测试工具JMeter 基础(八)—— 测试元件: 逻辑控制器之事物控制器
- HashMap 为什么线程不安全?
- noip模拟测试18