如果想从头学起Cypress,可以看下面的系列文章哦

https://www.cnblogs.com/poloyy/category/1768839.html

作用

发起一个 HTTP 请求

语法格式

cy.request(url)
cy.request(url, body)
cy.request(method, url)
cy.request(method, url, body)
cy.request(options)

参数说明

url

请求 URL,一般会有三种情况

cy.request() 在 cy.visit() 后面

// 先访问某个 url
cy.visit('http://localhost:8080/app') // 请求 url 是 http://localhost:8080/users/1.json
cy.request('users/1.json')

设置了 baseUrl,且 cy.request() 在 cy.visit() 前面

cypress.json

// cypress.json
{
"baseUrl": "http://localhost:1234"
}

测试代码

// url 是 http://localhost:1234/seed/admin
cy.request('seed/admin')

备注

如果 cypress 无法确定 host,它将抛出错误

body

  • 请求正文,不同接口内容,body 会有不同的形式
  • Cypress 设置了 Accepts 请求头,并通过 encoding 选项序列化响应体

method

请求方法,没啥好说的,默认是 GET

options

GET 请求的栗子

context('get请求', function () {
it('默认访问方式', function () {
cy.request('http://www.helloqa.com')
}); it('使用 options', function () {
cy.request({
method: 'get',
url: 'http://www.helloqa.com'
})
}); // .request() 常常和别名 .as() 一起使用,用来进行接口返回值的断言
it('真实测试', function () {
cy.request({
method: 'get',
url: 'https://www.helloqa.com'
}).as('comments')
cy.get('@comments')
.then((response) => {
expect(response.status).to.be.eq(200)
})
});
})

测试结果

.request() 返回值

包含以下属性

  • status
  • body
  • headers
  • duration

.request() 别名后通过 .get() 的返回值

包含以下属性

  • status
  • body
  • headers
  • duration
  • statusText
  • allRequestResponses
  • requestHeaders
  • redirects
  • isOkStatusCode

使用 .request() 代替 .visit() 的栗子

官方有那么一句话

有时候,cy.request() 测试页面的内容要比 cy.visit() 更快,然后等待整个页面加载所有资源

通过 .visit() 测试需要登录才能访问的页面

const username = 'jane.lane'
const password = 'password123' it('使用 visit', function () {
// 相当于 UI 界面操作
cy.visit('')   // 登录操作
cy.get("input[name=username]").type(username)
cy.get("input[name=password]").type(password)
cy.get("form").submit() // 会跳转至需要登录才能访问的页面
cy.get("h1").should("contain", "jane.lane") });

测试结果

通过 .request() 测试需要登录才能访问的页面

it('request代替visit', function () {
// 通过接口层面去访问页面
// 请求页面
cy.request('/login')
.its('body')
.should('include', '<p>In this recipe we:</p>') // 登录请求
cy.request({
method: 'post',
url: '/login',
// 表单格式的请求
form: true,
body: {
username: 'jane.lane',
password: 'password123'
}
}) // 访问需要登录之后才能访问的页面
cy.request('/dashboard')
.its('body')
.should('include', 'jane.lane')
});

测试结果

官方重点

通常,一旦对登录进行了适当的e2e测试,就没有理由继续使用 cy.visit() 登录并等待整个页面加载所有关联的资源,然后再运行其他命令,这样做可能会减慢我们整个测试套件的速度

轮询发出请求的栗子

背景

  • 当轮询服务器以获取可能需要一段时间才能完成的响应时,此功能很有用
  • 如何做:创建一个递归函数

测试代码

function req() {
cy
.request('/')
.then((resp) => {
if (resp.status === 200)
// 请求成功则退出轮询
return // 递归
req()
})
} context('轮询request', function () { it('默认访问方式', function () {
cy.visit('http://localhost:7077/')
// 轮询前的操作
cy.get("form").click()
// 轮询请求
.then(() => {
req()
})
});
})

关于 .request() 的注意事项

Debugging

  • 通过 .request() 发出的请求不会出现在开发者工具(F12)网络一栏中
  • Cypress 实际上并未从浏览器发出XHR请求
  • 实际上是从 Cypress Test Runner(在Node中)发出HTTP请求
  • 因此,不会在开发人员工具中看到该请求

Cookie

  • 通过 .request()  发出的请求,Cypress 会自动发送和接收 Cookie
  • 在发送 HTTP 请求之前,如果请求来自浏览器,Cypress 会自动附加本应附加的 Cookie
  • 此外,如果响应具有 Set-Cookie 标头,则这些标头将自动在浏览器 Cookie 上重新设置
  • 换句话说,cy.request() 透明地执行所有基础功能,就好像它来自浏览器一样

Cypress系列(68)- request() 命令详解的更多相关文章

  1. Hexo系列(三) 常用命令详解

    Hexo 框架可以帮助我们快速创建一个属于自己的博客网站,熟悉 Hexo 框架提供的命令有利于我们管理博客 1.hexo init hexo init 命令用于初始化本地文件夹为网站的根目录 $ he ...

  2. Cypress系列(101)- intercept() 命令详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 使用该命令在网络层管理 HTTP ...

  3. Android Studio系列教程五--Gradle命令详解与导入第三方包

    Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...

  4. Python操作redis系列以 哈希(Hash)命令详解(四)

    # -*- coding: utf-8 -*- import redis #这个redis不能用,请根据自己的需要修改 r =redis.Redis(host=") 1. Hset 命令用于 ...

  5. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  6. pssh系列命令详解

    安装 pssh提供OpenSSH和相关工具的并行版本.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括psshlib,可以在自定义应用程序中使用.pssh是python写的可 ...

  7. Linux - iostat命令详解

    简介 iostat可以提供更丰富的IO性能状态数据,iostat命令有两个用途: 输出CPU的统计信息 输出设备和分区的I/O统计信息 命令语法及参数说明 语法: iostat [ -c | -d ] ...

  8. Linux就业技术指导(五):Linux运维核心管理命令详解

    一,Linux核心进程管理命令 1.1 ps:查看进程 1.1.1 命令解释 功能说明 ps命令用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片.如果想要动态地显示进程,就需要使 ...

  9. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

随机推荐

  1. Centos6.5 离线 Openssh 升级

    目录 OpenSSH 升级 一.基于 Dropbear 设置备用 ssh 服务器 二. Openssh 更新 2.1 ssh配置 备份 2.2 openssh 升级 Openssl 升级(由于Open ...

  2. js中模拟移动端长按效果

    我们都知道 js 是有onmousedown(鼠标按下事件)和onmouseup(鼠标抬起事件),刚开始我的思路是 鼠标抬起时间减去鼠标按下时间 var oDiv = document.getElem ...

  3. Node.js 从零开发 web server博客项目[数据存储]

    web server博客项目 Node.js 从零开发 web server博客项目[项目介绍] Node.js 从零开发 web server博客项目[接口] Node.js 从零开发 web se ...

  4. Arnold变换(猫脸变换)

    Arnold变换是Arnold在遍历理论研究中提出的一种变换.由于Arnold本人最初对一张猫的图片进行了此种变换,因此它又被称为猫脸变换.Arnold变换可以对图像进行置乱,使得原本有意义的图像变成 ...

  5. matlab数字图像处理-冈萨雷斯-读取,显示,保存图像

    图像读取:imread(filename) 显示图像‘ 显示多幅图像 保存图像 b 计算压缩比

  6. 从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Javax,Jakarta

    从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Javax,Jakarta 目录 从一次编译出发梳理概念: Jetty,Jersey,hk2,glassFish,Jav ...

  7. hystrix讲解:熔断降级隔离以及合并请求

    对springcloud只是学习了基本的框架搭建,基本上看到的例子都是只使用了fallback 但是hystrix还有线程隔离和请求合并的能力  顺便吐槽   大部分人的博客例子估计都是听课的  应用 ...

  8. hystrix文档翻译之配置

    Hystrix使用Archaius作为配置的默认实现,下面介绍的是HystrixPropertiesStrategy的默认实现,你也可以通过插件方式重新实现. 每一个配置有四个级别: 全局默认 当下面 ...

  9. 企业项目实战 .Net Core + Vue/Angular 分库分表日志系统二 | 简单的分库分表设计

    教程预览 01 | 前言 02 | 简单的分库分表设计 03 | 控制反转搭配简单业务 04 | 强化设计方案 05 | 完善业务自动创建数据库 06 | 最终篇-通过AOP自动连接数据库-完成日志业 ...

  10. Docker 容器化部署 Python 应用

    Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. 在本篇中,我将介绍如 ...