WEB自动化-08-Cypress 接口测试

8 接口测试

在服务和服务、系统和系统之间进行通信时,常常会使用到接口。通过接口测试,可以在项目早期更快发现问题。接口有很多类型,而现阶段使用的接口是基于HTTP协议的接口。

8.1 Cypress支持的HTTP请求方式

在Cypress中发起HTTP请求时,需要使用到的命令为 cy.request(),其基本语法格式如下所示:

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

主要参数详细信息如下所示:

  • *url

url(String),发起请求的接口地址。需要注意的事项如下所示:

1、如果cy.request()在cy.visit()后发起请求时,则Cypress将默认使用cy.visit()中的域名做为发起接口请求的域名地址,示例如下所示:

cy.visit('https://www.surpassme.com/app')
cy.request('users/add') //  实际访问的URL: https://www.surpassme.com/users/add

2、如果事先在 cypress.json设置了 baseUrl时,则在发送接口请求时,可以不填写域名,Cypress在实际发起请求时,会自动将baseUrl添加到接口地址前面。示例如下所示:

// cypress.json
{
  "baseUrl": "https://www.surpassme.com/
}
cy.request('user/add') // 实际访问的URL: https://www.surpassme.com/users/add

3、如果Cypress没有检测到域名,则抛错误异常

  • *body

body (String, Object)是发起请求的请求体。根据接口类型,body会有不同的形式。

  • *method

method (String) 是发起请求的方法。默认请求方法为 GET,其支持的方法比较多,最常见的有 GETPOSTPUTDELETE

  • **options *

options (Object)是可选项,可以定义一些其他的参数来改变cy.request的一些行为,主要哪下所示:

选项 默认值 功能描述 log true 是否在Command log中显示命令 url null 发起请求的URL地址 method GET 请求方法 auth null 添加鉴权头信息 body null 请求体 failOnStatusCode true 若返回的状态码不是2xx和3xx系列,则认为请求失败 followRedirect true 是否自动重定向 form false 是否以表单形式发送请求体,如果是的话,则设置urlencode为x-www-form-urlencoded encoding utf8 请求响应的编码方式,支持ascii, base64, binary, hex, latin1, utf8, utf-8, ucs2, ucs-2, utf16le, utf-16le等 gzip true 是否接受gzip编码 headers null 添加额外的请求头 qs null 查询参数,如果填写后,则自动追加到URL地址后面 retryOnStatusCodeFailure false 在通过状态码判定为失败后的重试次数,如果设置为true,则重试4次 retryOnNetworkFailure true 在通过网络问题判定后为失败后的重试次数,如果设置true,则重试4次 timeout responseTimeout 解析域名地址的超时时间

  • *输出内容

在通过cy.request()发送请求后,输出的响应内容主要有 statusbodyheadersduration

8.2 示例

8.2.1 发起GET请求

GET是平常使用最多的请求,我们来看看示例,如下所示:

///

describe('发送GET请求示例', () => {
    let url="http://httpbin.org/get"

    it('发送请求的GET示例用例-1', () => {
        cy.request(url).as("response");
        cy.get("@response").should((response)=>{
            expect(response.body).to.have.property("headers")
            expect(response.body.url).to.eq(url)
            expect(response.body.headers.Host).to.eq("httpbin.org")
        });
    });

    it('发送请求的GET示例用例-2', () => {
        cy.request("GET",url).as("response");
        cy.get("@response").should((response)=>{
            expect(response.body).to.have.property("headers")
            expect(response.body.url).to.eq(url)
            expect(response.body.headers.Host).to.eq("httpbin.org")
        });
    });

    it('发送请求的GET示例用例-3', () => {
        cy.request("GET",url,{"name":"Surpass","age":28}).as("response");
        cy.get("@response").should((response)=>{
            expect(response.body).to.have.property("headers")
            expect(response.body.url).to.contain(url)
            expect(response.body.headers.Host).to.eq("httpbin.org")
        });
    });

    it('发送请求的GET示例用例-4', () => {
        cy.request({
            method:"GET",
            url:url,
            qs:{"name":"Surpass","age":28}
        }).then((response)=>{
           expect(response.body.args.name).to.eq("Surpass")
           expect(response.body.args.age).to.eq("28")
           expect(response.status).to.eq(200)
           expect(response.body.headers.Host).to.eq("httpbin.org")
           expect(response.body).to.have.property("headers")
        });
    });

    it('获取图片示例', () => {
        cy.request({
            method:"GET",
            url:"https://www.cnblogs.com/images/logo.svg",
            encoding:"base64"
        }).then((response) => {
            let base64Content=response.body;
            let mime=response.headers["content-type"];
            let imageDataUrl=data:${mime};base64,${base64Content}
        })
    });

    it('下载文件', () => {
      cy.request({
          method:"GET",
          url:"https://www.cnblogs.com/images/logo.svg",
          encoding:"binary"
      }).then((response)=>{
          cy.writeFile("./cnblog.logo.svg",response.body,"binary");
      })
    });
});

运行结果如下所示:

WEB自动化-08-Cypress 接口测试

8.2.1 发起POST请求

示例如下所示:

///

describe('发送POST请求示例', () => {
    let url="http://httpbin.org/post";
    let body={"name":"Surpass","age":28};

    it('发送请求的POST示例用例-1', () => {
        cy.request("POST",url,body).as("response");
        cy.get("@response").should((response)=>{
             expect(response.body.json.name).to.eq("Surpass")
             expect(response.body.headers.Host).to.eq("httpbin.org")
        })
    });

    it('发送请求的POST示例用例-2', () => {
        cy.request({
           method:"POST",
           url:url,
           body:body,
           form:true
        }).then((response)=>{
            expect(response.body.form.name).to.eq("Surpass")
            expect(response.body.headers.Host).to.eq("httpbin.org")
        });
    });

    it('发送请求的POST示例用例-3', () => {
        cy.request({
           method:"POST",
           url:url,
           body:body,
           form:false,
           headers:{"Content-Type":"application/json","Customer-Header":"Surpass"}
        }).then((response)=>{
            expect(response.body.json.name).to.contain("Surpass")
            expect(response.body.headers.Host).to.eq("httpbin.org")
            expect(response.headers["content-type"]).to.eq("application/json")
            expect(response.body.headers["Customer-Header"]).to.eq("Surpass")
        });
    });
});

运行结果如下所示:

WEB自动化-08-Cypress 接口测试

原文地址:https://www.jianshu.com/p/007976277dc8

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

WEB自动化-08-Cypress 接口测试

Original: https://www.cnblogs.com/surpassme/p/16714101.html
Author: Surpassme
Title: WEB自动化-08-Cypress 接口测试

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/581625/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • redis导致的错误错误

    ==========双预防系统启动成功========== 14:42:39.821 [http-nio-9217-exec-1] INFO o.a.c.c.C.[.[.[/] -…

    Linux 2023年5月28日
    0149
  • 巧妙绕过 “您的链接不是私密链接”

    大家上网的时候,有时候会碰到Chrome提示”您的链接不是私密链接”, 运气好的话,点击高级,有一个选项是”继续浏览不安全的网页”,…

    Linux 2023年6月13日
    0112
  • EhCache缓存页面、局部页面和对象缓存

    页面缓存:SimplePageCachingFilter web.xml <filter> <filter-name>PageEhCacheFilterfi…

    Linux 2023年6月13日
    092
  • Python schedule 库定时任务

    Python schedule 库定时任务 schedule的使用 用于scrapy定时任务设置 import schedule import time def job(): pr…

    Linux 2023年6月13日
    091
  • Jquery如何使用animation动画效果改变背景色

    一、问题引入 1. jquery的animate动画虽然强大,但是无法使用其进行背景色(background-color)的动画效果变化,因为animate动画效果只能动态改变数值…

    Linux 2023年6月14日
    0200
  • Windows 2008 R2 Powershell 3.0

    下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=34595&WT.mc_id=rss_alldow…

    Linux 2023年5月28日
    0100
  • Docker快速部署clickhouse

    Docker快速部署clickhouse Clickhouse特点 完备的DBMS:不仅是个数据库,也是个数据库系统 列存储和数据压缩:典型的olap数据库特性 向量化并行:利用C…

    Linux 2023年6月8日
    081
  • SpringBoot的文件上传&下载

    前言:不多BB直接上代码 文件上传 pom依赖添加commons-io <!– 上传/下载jar https://mvnrepository.com/artifact/co…

    Linux 2023年6月14日
    095
  • 初识pytest

    现在这份工作一直做硬件和算法方面,但本人还是很喜欢玩web,所以自学分享一下。 如何安装pytest 其实很简单 pip install pytest pip install -U…

    Linux 2023年6月8日
    082
  • 从台积电增产28纳米产线看袁项之争

    由台积电增建南京28纳米产线引发的袁项之争,他们的观点和论据,我总结一下,大致如下: 袁:引进外资,鼓励竞争,产生鲶鱼效应,让芯片代工产业快速活跃起来,百花齐放,消费者受益。并举了…

    Linux 2023年6月6日
    079
  • 程序员要知道的22个学习网站

    点击标题即可直达链接网址 GitHub是一个面向开源及私有软件项目的托管以及在线软件开发平台,用于存储、跟踪和协作软件项目,开发者能够上传自己的代码文件,并与其他开发者在开源项目上…

    Linux 2023年6月6日
    082
  • Fabric2.2中的Raft共识模块源码分析

    引言 Hyperledger Fabric是当前比较流行的一种联盟链系统,它隶属于Linux基金会在2015年创建的超级账本项目且是这个项目最重要的一个子项目。目前,与Hyperl…

    Linux 2023年6月7日
    069
  • ASP.NET Core新书终于上市,完成今年一个目标,赠书活动

    第一部分:从使用角度介绍ASP.NET Core。 第 1 章 ASP.NET Core概述: 介绍为什么要使用 ASP.NET Core,它的优势是什么,它为什么能跨平台。 第 …

    Linux 2023年6月7日
    096
  • 关于博客的解读

    写在前面 大家好,这里是满满! 最近也是想来写博客,我们学习过后的知识一旦过一段时间后,自然会有一些只是会遗忘,这时候大家都会去翻看以前的视频 ,笔记,遇到难一点的问题,可能就会去…

    Linux 2023年6月14日
    0105
  • 最简单的,在win,linux中,用powershell,自动获取Let’s Encrypt证书方法

    powershell传教士原创 2020-04-12,2022-05更新 Let’s Encrypt证书有效期3个月,支持泛域名【*.你的网站.net】。支持n天内(一…

    Linux 2023年6月14日
    090
  • 【Linux】指令学习

    Linux学习记录 😄生命不息,写作不止🏆 一个有梦有戏的人 @怒放吧德德🌝分享学习心得,欢迎指正,大家一起学习成长! 1、虚拟机网卡配置 服务器重启完成之后,我们可以通过linu…

    Linux 2023年6月6日
    0114
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球