使用cypress编写第一个测试用例

目录
  • cypress测试编写
    • 一、新建一个文件
    • 二、编写第一个测试文件
      • 1. 编写一个测试通过的代码
      • 2. 编写一个测试失败的代码
      • 3. 测试文件中的describe, it, 和expect 是什么
    • 三、编写一个真实的测试文件
      • 1. 步骤一:访问一个页面
      • 2. 步骤二:查询一个元素
      • 3. 步骤三:点击一个元素
      • 4. 步骤四:断言
      • 添加更多的交互命令和断言
      • 回顾测试
      • 关于页面转换

cypress测试编写

当环境安装好了之后,就可以着手尝试第一个测试的编写了。

一、新建一个文件

在你的项目下的cypress/integration文件夹中创建一个新文件sample_spec.js,我这里直接在webstorm编辑器中创建。

创建好之后,打开cypress的应用,会看到Cypress Test Runner立即将新文件显示在集成测试列表中。

Cypress会监视规格文件的任何更改,并自动显示任何更改。

虽然这是一个空文件,但是也可以点击运行试试看。

显示No tests found,这是正常情况,因为我确实啥也没写。不过有时候cypress在解析测试文件内容的时候也会有这种报错提示,可以F12打开开发者工具,查看console里是不是有错误消息。

二、编写第一个测试文件

这里关注点有3个:

  • 编写第一个通过的测试。
  • 编写我们的第一个失败测试。
  • 观察cypress实时网页重载的过程

实时重载就是,当测试文件内容有改变保存的时候,可以看到浏览器自动实时重载。

1. 编写一个测试通过的代码

现在,修改刚才新文件的,添加以下代码,然后保存。

describe('My First Test', () => {
    it('Does not do much!', () => {
        expect(true).to.equal(true)
    })
})

保存后,重载运行,测试通过啦。

虽然这个测试文件没干啥正经事儿,这就是第一个pass的测试!
在命令日志中,有展示出的信息,包含了测试套件、测试、以及测试断言情况,断言通过就是绿色的。

2. 编写一个测试失败的代码

可以在文件里继续添加下面的代码,然后保存。

describe('My First Test', () => {
    it('Does not do much!', () => {
        expect(true).to.equal(false)
    })
})

这时候,测试失败了,信息和关键字都是用红色来显示的。

3. 测试文件中的describe, it, 和expect 是什么

在编辑器里查看测试文件,很容易看到在代码里,describe, it, 和 expect这3个是关键字。

cypress也是通过在内部使用了其他流行的工具或者框架来实现这些功能:

describeit 来自于 Mocha

expect来自于Chai

三、编写一个真实的测试文件

一个完整可靠的测试通常包含3个阶段:

  • 测试前置准备
  • 执行测试
  • 测试执行后的断言。

我们也会常见到一些短语概括,比如 Given, When, Then, 或者 Arrange, Act, Assert,描述的也都是这种思路。所以,在cypress里编写测试文件,同样也遵循上述原则:

  • 访问一个网页。
  • 查询元素。
  • 与该元素交互。
  • 断言页面上的内容。

1. 步骤一:访问一个页面

这里使用官方的一个页面作为测试页面。

将要访问的URL传递给cy.visit():

describe('我的第一个测试', () => {
    it('访问 Kitchen Sink 页面', () => {
        cy.visit('https://example.cypress.io')
    })
})

保存文件后,切换到cypress运行器,可以看到如下变化:

  • 命令日志现在显示了新的VISIT操作。
  • 访问的Kitchen Sink页面已经加载到右侧的预览窗口。
  • 测试是绿色的,虽然没有任何断言。

如果请求的页面返回时带有非2xx状态码,比如404或者500,或者访问的应用程序代码中有JavaScript报错,测试会失败。

VISIT显示蓝色挂起状态,直到页面加载完成。

如果该请求返回时带有非2xx状态代码,如404或500,或者如果应用程序代码中有JavaScript错误,测试就会失败

注意

你测试的应用程序得是你可以控制的,为什么呢?

  • 如果你随便测试一个别的页面应用,它们随时可能改变,那么测试可能就不能顺利进行。
  • 别的应用可能会进行A/B测试,那么你多次相同的操作,可能无法获得一致的结果。
  • 它们可能会检测到你是一个脚本并阻止你的访问(谷歌会这样做)。
  • 他们可能有安全功能启用,防止Cypress工作。

Cypress的重点用来帮助每天构建和测试自己的应用程序的,并不是一个通用的web自动化工具,所以不适合用来测试非你控制之外的应用。

2. 步骤二:查询一个元素

在第一步里已经可以成功打开测试页面,那现在就来查找一个元素,就拿type开刀吧。

可以使用cy.contains(),找到包含type的元素。

describe('My First Test', () => {
    it('finds the content "type"', () => {
        cy.visit('https://example.cypress.io')

        cy.contains('type')
    })
})

保存。

这里同样没加断言,但是测试也通过了。原因在于cypress的默认断言,许多Cypress的命令当没有找到预期目标时候,就会构建失败。

可以试试,用页面上没有的东西替换type,比如hype。测试就变红了,但是需要4秒。为什么要等4s,因为cypress它会自动等待并重新尝试,不会立即失效!

3. 步骤三:点击一个元素

找到了包含type的元素,这是一个链接,于是可以点击它,在后面加上.click()即可。

describe('My First Test', () => {
  it('clicks the link "type"', () => {
    cy.visit('https://example.cypress.io')

    cy.contains('type').click()
  })
})

点击跳转成功。

另外,从cy.contains('type').click()这行代码可以看出,在cypress里可以采用链式调用的方式,更直观的描述出要做的事情。

4. 步骤四:断言

得到了新的页面,就可以在新页面里加一些断言了,验证跳转成功。

比如,验证新页面的URL是预期的URL。

断言用到.should方法。

describe('My First Test', () => {
    it('clicking "type" navigates to a new url', () => {
        cy.visit('https://example.cypress.io')

        cy.contains('type').click()

        // Should be on a new URL which includes '/commands/actions'
        cy.url().should('include', '/commands/actions')
    })
})

保存测试文件,测试通过,断言正确。

添加更多的交互命令和断言

到这里,一个完整的测试文件就可以说结束了。不过,cypress也并不限定在一个测试文件里只能做单个的交互和断言。

因为在实际应用场景中,某些被测试的功能,可能需要多个步骤。那么,我们可以在这个测试文件里继续添加交互命令和断言。

比如,在跳转的新的页面里,可以继续使用cy.get()来根据CSS类选择元素。然后,可以使用.type()命令将文本输入到选定的输入框。

最后,我们可以验证输入的值是否成功。

describe('My First Test', () => {
    it('Gets, types and asserts', () => {
        cy.visit('https://example.cypress.io')

        cy.contains('type').click()

        // Should be on a new URL which includes '/commands/actions'
        cy.url().should('include', '/commands/actions')

        // Get an input, type into it and verify that the value has been updated
        cy.get('.action-email')
            .type('fake@email.com')
            .should('have.value', 'fake@email.com')
    })
})

回顾测试

最终的代码,就实现了在Cypress中进行一个简短的测试:访问一个页面,找到并单击一个链接,验证URL,然后验证新页面上元素的行为。

如果大声读出来,听起来可能是这样的:

1. 访问`https://example.cypress.io`

2. 找到包含了`type`的元素

3. 点击这个元素

4. 获取新页面的url

5. 断言获取到的url里包含`/commands/actions`

6. 用css`.action-email`获取到输入框

7. 输入`fake@email.com`

8. 断言内容输入成功

是不是符合文章开始描述的编写测试的思想。如果用Given, When, Then来解读也是可以的:

1. Given 一个用户访问`https://example.cypress.io`

2. When 他点击了type的label标签

3. And 他在`.action-email`这个输入框里输入了 "fake@email.com"

4. Then 新页面的url应该包含`/commands/actions`

5. And 这个`.action-email`输入框有了输入内容"fake@email.com"

关于页面转换

  • 上面的测试代码,跨越了2个页面。
  • cypress会自动的发现page transition event这种页面转化事件,并且会自动停止运行命令,直到下一个页面加载完成。
  • 如果下一个页面最终没有加载完成,那么Cypress就会结束测试并且标记error。
  • 在前面提到过,Cypress在超时找到DOM元素之前等待了4秒,但是在最后的代码中,Cypress检测到页面转换事件,它会自动将单个page LOAD事件的超时增加到60秒。
  • 换句话说,基于命令和发生的事件,Cypress自动更改预期超时。

以上就是使用cypress编写第一个测试的详细内容,更多关于cypress测试编写的资料请关注我们其它相关文章!

(0)

相关推荐

  • cypress中丰富的调试工具使用方法

    目录 cypress调试工具 一. Time travel 二. 快照 三.errors信息 四.页面事件 五.控制台的输出 六.调试专用命令 cypress调试工具 Cypress附带了一系列调试工具来帮助我们弄明白测试的经过,利于我们更好的调试.具体这些工具的能力都有啥? 回到每个命令的快照. 可以看到特殊的已发生的page events. 接收关于每个命令的额外输出. 在多个命令快照之间 向前/向后 步进. 暂停命令并迭代地逐步执行. 当找到隐藏的或者多个元素时,展示的更形象. 这里继续使

  • windows系统下安装Cypress及cypress open报错解决

    目录 一.操作系统 二.安装依赖 1.node.js 2.linux 三.安装 四.安装完成,打开cypress 安装cypress. 一.操作系统 先确认下你的系统,是否在cypress支持范围之内: macOS 10.9 以上 (仅64-bit)Linux Ubuntu 12.04及以上版本,Fedora 21和Debian 8(仅64位)windows7 以上 二.安装依赖 1.node.js 如果使用npm来安装Cypress,需要Node.js 12 或者 14 以上.不知道啥是nod

  • cypress测试本地web应用

    目录 cypress测试本地web应用 一.启动本地应用 二.访问本地应用 三.配置Cypress 四.Seeding data 1. Stubbing the server 2. 解决登录问题 cypress测试本地web应用 在之前的cypress介绍里曾提到过,cypress虽然也可以测试部署好的应用,但是它最大的能力还是发挥在测试本地应用上.本章主要内容就是关于如何测试本地web应用的概述: cypress与后台应用之间的关系. 如何配置cypress使其适合我们的应用 更好的绕过应用的

  • 使用cypress编写第一个测试用例

    目录 cypress测试编写 一.新建一个文件 二.编写第一个测试文件 1. 编写一个测试通过的代码 2. 编写一个测试失败的代码 3. 测试文件中的describe, it, 和expect 是什么 三.编写一个真实的测试文件 1. 步骤一:访问一个页面 2. 步骤二:查询一个元素 3. 步骤三:点击一个元素 4. 步骤四:断言 添加更多的交互命令和断言 回顾测试 关于页面转换 cypress测试编写 当环境安装好了之后,就可以着手尝试第一个测试的编写了. 一.新建一个文件 在你的项目下的cy

  • SpringBoot入门编写第一个程序Helloworld

    目录 1.系统要求 2.HelloWorld 2.1创建maven工程 2.2引入依赖 2.3创建主程序 2.4编写业务 2.5测试 2.6简化配置 2.7简化部署 1.系统要求 Java 8 Maven 3.3+ idea 2019+ 2.HelloWorld 需求:浏览发送/hello请求,响应 Hello,Spring Boot 2 2.1创建maven工程 2.2引入依赖 <parent> <groupId>org.springframework.boot</grou

  • python编写第一个交互程序步骤示例教程

    Input()函数编写 1.编写一个稍微复杂一点的程序.使用Input()函数编写一个请用户输入名字的程序. (1)打开IDLE开发环境,然后选择“File”菜单下面的“New File”命令,新建一个新的编辑文件. 新建的编辑文件. (2)保存文件,选择“File”菜单下的“Save As”命令. 提示:编程过程中,要养成及时保存文件的习惯. (3)在打开的对话框中选择文件保存的位置,并在“文件名”栏中输入文件的名字,最后单击“保存”按钮. (4)在刚才保存的文件脚本里输入如下图所示的内容.

  • Golang极简入门教程(四):编写第一个项目

    workspace Golang 的代码必须放置在一个 workspace 中.一个 workspace 是一个目录,此目录中包含几个子目录: 1.src 目录.包含源文件,源文件被组织为包(一个目录一个包) 2.pkg 目录.包含包对象(package objects) 3.bin 目录.包含可执行的命令 包源文件(package source)被编译为包对象(package object),命令源文件(command source)被编译为可执行命令(command executable).

  • 30分钟搭建Python的Flask框架并在上面编写第一个应用

    Flask 是一种很赞的Python web框架.它极小,简单,最棒的是它很容易学. 今天我来带你搭建你的第一个Flask web应用!和官方教程 一样,你将搭建你自己的微博客系统:Flaskr.和官方Flask教程不同的是--我们通过使用Stormpath来创建并管理用户账户和数据,你的工作效率会更高.开发进程会显著地加快! 我们这就开始吧. 注意:这篇教程面向Flask开发新人,帮助他们理解如何使用Flask和Stormpath建立一个简单的网站.本文是Flask官方教程的改版. 目标 Fl

  • 使用Java的Spring框架编写第一个程序Hellow world

    Spring框架是什么? Spring是为企业Java最流行的应用程序开发框架.数以百万计的世界各地的开发人员使用Spring框架来创建高性能,易于测试的,可重用的代码. Spring框架是一个开源的Java平台,它最初是由Rod Johnson编写并在2003年6月在Apache2.0许可下首次发布. Spring是轻量级的,当涉及到大小和透明度. spring框架的基本版本是大约2MB. Spring框架的核心功能可以在任何Java应用程序中使用,但也有扩展的Java EE平台上构建Web应

  • 用autoit编写第一个脚本(Hello World)

    (注意:如果您已经安装了 SciTe 编辑器,它将会代替系统自带的记事本来编辑脚本.) 首先打开你要创建脚本的文件夹,点击鼠标右键然后在菜单中选择 新建 / AutoIt v3 Script . 把脚本文件命名为helloworld.au3.注意扩展名应为.au3--这说明该文件是 AutoIt v3 脚本. 我们已经创建了脚本文件了,现在要做的就是对此脚本进行编辑使其具有我们需要的功能.在helloworld.au3这个脚本文件上点击鼠标右键然后在菜单中选择Edit Script. 接着将会使

  • 基于Java编写第一个区块链项目

    前言 区块链是数字加密货币比特币的核心技术. 区块链是一个称为块的记录列表,这些记录使用链表链接在一起并使用加密技术. 每个数据块都包含自己的数字指纹(称为散列).前一个数据块的散列.时间戳和所做事务的数据,使其在任何类型的数据泄露时都更加安全. 因此,如果一个块的数据被改变,那么它的散列也会改变.如果散列被更改,那么它的散列将不同于下一个块,下一个块包含前一个块的散列,影响它之后的所有块的散列.更改哈希值,然后将其与其他块进行比较,这允许我们检查区块链. 区块链实施:以下是区块链实施中使用的功

  • 分享一个C#编写简单的聊天程序(详细介绍)

    引言 这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考.文章大体分为四个部分:程序的分析与设计.C#网络编程基础(篇外篇).聊天程序的实现模式.程序实现. 程序的分析与设计 1.明确程序功能 如果大家现在已经参加了工作,你的经理或者老板告诉你,"小王,我需要你开发一个聊天程序".那么接下来该怎么做呢?你是不是在脑子里有个雏形,然后就直接打开VS2005开始设计窗体,编写代码了呢?在开始之

  • 20分钟成功编写bootstrap响应式页面 就这么简单

    最近发现一个叫 Bootstrap 的好东西,Bootstrap 是现在最流行的响应式 CSS 框架,它以移动设备优先,能够快速适应不同设备.使用它编写响应式页面快捷.方便,而且屏蔽了浏览器差异.使用了 Bootstrap 后,再也无法想象过去使用原始的 CSS 编写网页的悲惨生活了. 经过学习,我发现自己也具备了分分钟开发出一个高大上的页面的能力.本文将会为大家介绍 Bootstrap,并且带领大家一起实现一个响应式页面. 图 1. 移动优先,适应不同设备 一.安装 最简单的方式是直接在网页中

随机推荐