iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >使用cypress编写第一个测试用例
  • 731
分享到

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

2024-04-02 19:04:59 731人浏览 八月长安
摘要

目录cypress测试编写一、新建一个文件二、编写第一个测试文件1. 编写一个测试通过的代码2. 编写一个测试失败的代码3. 测试文件中的describe, it, 和expect

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测试编写的资料请关注编程网其它相关文章!

--结束END--

本文标题: 使用cypress编写第一个测试用例

本文链接: https://www.lsjlt.com/news/150352.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用cypress编写第一个测试用例
    目录cypress测试编写一、新建一个文件二、编写第一个测试文件1. 编写一个测试通过的代码2. 编写一个测试失败的代码3. 测试文件中的describe, it, 和expect ...
    99+
    2022-11-13
  • 一文详解e2e测试之cypress的使用
    目录用e2e测试想要达到什么目的?如何启动cypress测试?了解目录结构:基础概念使用场景:用e2e测试想要达到什么目的? 将被测试的单元放在特定环境下,选中并让它发生交互,达到目...
    99+
    2023-05-17
    e2e测试cypress使用 e2e测试
  • python编程使用selenium编写测试用例
    目录1. 导入依赖2. 创建driver3. 执行自动化步骤4. 断言 from selenium import webdriver class TestBaiDu(): ...
    99+
    2022-11-12
  • 使用mockito编写测试用例教程
    目录前言什么是TDD为什么要使用mockito如何使用mockito前期准备包装你要模拟的类什么插桩验证行为参数匹配验证调用次数模拟void方法验证调用顺序doReturn()|do...
    99+
    2022-11-13
  • Android之编写测试用例
      测试是软件工程中一个非常重要的环节,而测试用例又可以显著地提高测试的效率和准确性。测试用例其实是一段普通的程序代码,通常是带有期望的运行结果的,测试者可以根据终的运行结...
    99+
    2022-06-06
    测试用例 测试 Android
  • 使用django怎么编写一个单元测试功能
    本篇文章给大家分享的是有关使用django怎么编写一个单元测试功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、使用requests模拟Http请求   假设你执行成功的返...
    99+
    2023-06-14
  • 详解如何用JavaScript编写一个单元测试
    目录为什么要进行单元测试?范围界定和编写单元测试保持单元测试简短而简单考虑正面和负面的测试用例分解长而复杂的函数避免网络和数据库连接如何编写单元测试创建一个新项目实现一个类配置和添加...
    99+
    2022-11-13
    JavaScript编写单元测试 JavaScript单元测试
  • 使用VisualStudio编写单元测试
    一、什么是单元测试 单元测试就是编写一段代码,用来检查某个特定条件下,另外一段代码的行为是否符合我们的预期。单元测试的代码与实际程序的代码具有同等的重要性。每一个单元测试,都是用来定...
    99+
    2022-11-13
  • 使用Java编写一个碰撞检测功能
    本篇文章给大家分享的是有关使用Java编写一个碰撞检测功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。碰撞检测的过程处理主要有以下三步:碰撞检测(Collision Dete...
    99+
    2023-05-30
    java
  • pytest用yaml文件编写测试用例流程详解
    目录前言项目结构conftest.pyyaml文件执行并查看结果前言 本篇来学习在pytest中使用yaml编写测试用例 项目结构 conftest.py 只需在 conftest...
    99+
    2022-12-17
    pytest编写测试用例 pytest yaml文件编写测试用例
  • iOS 11开发中如何编写第一个iOS 11应用
    这篇文章主要介绍iOS 11开发中如何编写第一个iOS 11应用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!编写第一个iOS 11应用本节将以一个iOS 11应用程序为例,为开发者讲解如何使用Xcode 9.0去创...
    99+
    2023-06-04
  • jQuery如何为函数创建一个基本测试用例
    小编给大家分享一下jQuery如何为函数创建一个基本测试用例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!为函数创建一个基本测试用例//Separate ...
    99+
    2023-06-27
  • 使用Vue怎么编写一个todo应用
    这篇文章将为大家详细讲解有关使用Vue怎么编写一个todo应用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。vue实现todo应用用vue实现一个简单应用,应用中用到vue相关核心功能,然后...
    99+
    2023-06-06
  • 如何使用PHP编写HTTP负载测试脚本?
    在今天的互联网时代,网站的性能越来越重要。对于一个成功的网站来说,它必须能够承受高并发的访问流量,而在实际部署之前,我们需要对网站进行负载测试,以确保网站能够在高流量下正常工作。在本文中,我们将介绍如何使用PHP编写HTTP负载测试脚本来...
    99+
    2023-09-30
    http load shell
  • 使用JavaScript编写一个2048小游戏
    今天就跟大家聊聊有关使用JavaScript编写一个2048小游戏,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 使用python编写一个登录接口
    需求:编写登录接口输入用户名密码认证成功后 显示欢迎信息输入三次后锁定用户信息文件黑名单的文件     黑名单里检查,不让登录     用户名密码判定流程图:代码:#!/usr/bin/env python tries = 0 lockfi...
    99+
    2023-01-31
    接口 python
  • 使用Java编写一个2048小游戏
    本文章向大家介绍使用Java编写一个2048小游戏的基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页...
    99+
    2023-06-06
  • 使用Django怎么编写一个应用视图
    这篇文章给大家介绍使用Django怎么编写一个应用视图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。项目中创建应用首先切换到项目目录中其次输入命令:python manage.py s...
    99+
    2022-10-19
  • 使用JavaScript编写一个音乐播放器
    这篇文章主要介绍了使用JavaScript编写一个音乐播放器,此处通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考价值,需要的朋友可以参考下:JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被...
    99+
    2023-06-06
  • 使用JavaScript编写一个随机点名器
    这篇文章给大家介绍使用JavaScript编写一个随机点名器,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点击,给用户提供更好的体验。2.可以处理表单...
    99+
    2023-06-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作