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库,封装了一些常用的查询功能,例如根据内容查询控件,有需要的话可以自行安装。

最新文章

  1. 用C#开发ActiveX控件,并使用web调用
  2. .net之工作流工程展示及代码分享(预告)
  3. wireshake抓包,飞秋发送信息,python
  4. HDU5726 GCD(二分 + ST表)
  5. 有序列表和无序列表、流、格式布局:position
  6. angularJS自定义指令模板替换
  7. 【转】MYSQL入门学习之九:索引的简单操作
  8. [转载]jQuery.lazyload详解 - 图片延时加载
  9. jbpm4.4 demo1
  10. 20169210《Linux内核原理与分析》课程总结
  11. Robotium -- 针对apk包的测试
  12. com.google.common.collect.Lists#transform使用注意
  13. lxd-启动篇分析
  14. 通过chrome inspect 来调试手机hybird APP
  15. 【Linux】添加sudo用户、sudo用戶組
  16. 2018上C语言程序设计(高级)博客作业样例
  17. 【Swift 4.2】uuid 取 hashCode(与 Java/Go/Kotlin 一致)
  18. (87)Wangdao.com第二十天_JavaScript document 节点对象
  19. Exp4 恶意代码分析 20164313 杜桂鑫
  20. 09、高级编程之基于排序机制的wordcount程序

热门文章

  1. Specification使用notin
  2. 【C++】 四种强制类型转换(static_cast 与 dynamic_cast 的区别!)
  3. 检测一个页面所用的时间的js
  4. ubuntu apt-get Failed to fetch Temporary failure resolving 'security.ubuntu.com'
  5. 如何实现CSS限制字数,超出部份显示省略号
  6. Python语法之函数、引用和装饰器
  7. go语言学习代码
  8. 性能测试工具JMeter 基础(八)—— 测试元件: 逻辑控制器之事物控制器
  9. HashMap 为什么线程不安全?
  10. noip模拟测试18