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

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

前言

  • 环境变量,其实就是根据环境的变化,变量会有不同的值
  • 比如最常见的:开发环境、测试环境、生产环境的 URL 肯定不一样,我们可以根据不同的环境选择不同的环境变量
  • 这就是为什么我们要学习环境变量的原因

环境变量在以下情况会很有用

  • 不同开发人员,对应的值也可能不同
  • 不同环境下的值是不同的,入:dev、test、prod
  • 某些值会频繁变化,而且高度动态
  • 环境变量很容易会更改,尤其是在持续集成(CI)中运行时

栗子

不要在测试中进行硬编码(写死,常量),需要改的时候需要动代码,比如:

cy.request('https://api.acme.corp') // 这将在其他环境中无法使

使用环境变量后

cy.request(Cypress.env('EXTERNAL_API')) // 指向动态环境变量

当不同环境运行时,如果需要访问不同的 URL 我们只需要改环境变量即可了,而不用动到代码

baseUrl

  • 前面我们说到可以通过环境变量设置测试套件访问的 URL,这是其中一种方式
  • 而 Cypress 早就替我们想好了如何解决这问题,可以通过配置 baseUrl 来取代环境变量的方式
  • 当你配置了 baseUrl ,测试套件中的 cy.visit() 、 cy.request() 都会自动以 baseUrl 的值作为前缀
  • 并且,当你需要访问某些网址或者发起接口请求时,在代码中就可以不用再指定请求的 host 或者 url 了

如何配置 baseUrl

  • 细心的小伙伴已经知道,前面我讲 Cypress 全局配置项的时候已经提到过 baseUrl 了
  • 只需要在 cypress.json 文件进行配置就可以啦,如下

代码中调用

cy.visit("")

// 错误写法  cy.visit()

记住调用 visit 或 request 时,再怎么样也要传个空字符串 "" ,不能啥都不填哦

通过环境变量来覆盖 baseUrl

即使配置了 baseUrl ,我们也可以通过环境变量来覆盖它

CYPRESS_baseUrl=https://staging.app.com cypress run

设置环境变量

一共有五种方式

  1. 在 cypress.json 文件中设置
  2. 创建一个 cypress.env.json 文件
  3. 导出为 CYPRESS_*
  4. 在 CLI 中传递为 --env (命令行运行中添加)
  5. 在插件中设置一个环境变量

----------------------------------------------->>>>>>>>>>>>>>>>>>> 点击右侧目录即可跳转

最常见的做法

  • 使用一种策略进行本地开发,但在 CI(持续集成)中运行时使用另一种策略
  • 在测试运行时,可以使用 Cypress.env() 访问环境变量的值

 

cypress.json 中设置

在 cypress.json 的 env 键下设置的任何 key:value 都是环境变量

cypress.json 代码

测试文件代码

// 打印所有环境变量
Cypress.env() // 打印某个环境变量的值
Cypress.env("foor")

测试结果

优缺点

优点 缺点
适用于需要源码托管(git)并在所有计算机保持相同的值 只适用于在所有计算机上应该有相同的值

创建 cypress.env.json 文件

该文件的描述

  • 可以创建自己的 cypress.env.json 文件,Cypress 将会自动检查它
  • 并且里面的值会覆盖 cypress.json 中重名的环境变量
  • 它创建在 cypress.json 同级目录下

用这个文件有啥用

如果将cypress.env.json 添加到.gitgnore文件中,那么文件中的值对于每个开发人员的计算机都是不同的

cypress.env.json 文件代码

测试文件代码

测试结果

在 cypress.json 中也有一个 key 的环境变量,所以在 cypress.env.json 的 key 的值覆盖了它的值

优缺点

优点 缺点
专用文件,只存放环境变量 需要单独多处理一个新的文件
可以从其他构建过程中生成此文件 可能会过度干预 1 或 2 个环境变量
不同计算机的环境变量可能不同  

CYPRESS_*

重点!

  • 计算机中任何以 CYPRESS_ 或 cypress_ 开头的环境变量都会自动被 Cypress 识别出来
  • 会直接覆盖 cypress.json 和 cypress.env.json 文件中重名的环境变量
  • Cypress在添加环境变量时,会自动去掉 CYPRESS_ 前缀

在系统添加环境变量

总结

  • 我测试过发现并没有生效,也不知道为啥,需要后面再研究研究
  • 其实并不推荐这种写法,当环境变量无效时,再改起来就很麻烦了

--env

重点!

  • 可以通过命令行将环境变量作为命令行参数传进来
  • 它的优先级最高,会覆盖其他地方设置的重名环境变量
  • 可以为 cypress open 或 cypress run 添加 --env 参数

cmd 命令

在 Cypress 安装目录下,cmd敲

yarn cypress:open --env host=poloyy.com,key=命令行参数环境变量

或

yarn cypress:run --env host=poloyy.com,key=命令行参数环境变量

测试文件代码

测试结果

优缺点

优点 缺点
不需要对文件或配置项进行任何更改 使用 --env 并不友好
简单明了的设置环境变量  
优先级最高,覆盖其他形式设置的环境变量  

Cypress系列(14)- 环境变量详解的更多相关文章

  1. 如何查找YUM安装的JAVA_HOME环境变量详解

    如何查找YUM安装的JAVA_HOME环境变量详解  更新时间:2017年10月27日 09:44:56   作者:铁锚   我要评论 这篇文章主要给大家介绍了关于如何查找YUM安装的JAVA_HOM ...

  2. net core体系-web应用程序-4net core2.0大白话带你入门-5asp.net core环境变量详解

    asp.net core环境变量详解   环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的 ...

  3. Maya 常用环境变量详解

    Maya 常用环境变量详解 前言: Maya 的环境变量让用户可以很方便的自定义 Maya 的功能. 在 Maya 的 Help 帮助文档中有专门的一个章节< Environment Varia ...

  4. asp.net core环境变量详解

    环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境变量在其它文件里面,不多说了,有兴趣的 ...

  5. 【转】asp.net core环境变量详解

    asp.net core环境变量详解 环境变量详解 Windows操作系统的环境变量在哪设置应该都知道了. Linux(centos版本)的环境变量在/etc/profile里面进行设置.用户级的环境 ...

  6. PATH环境变量和CLASSPATH环境变量详解

    大凡装过JDK的人都知道要安装完成后要设置环境变量,可是为什么要设置环境变量呢?环境变量有什么作用? 1)PATH详解: 计算机安装JDK之后,输入“javac”“java”之类的命令是不能马上被计算 ...

  7. Hyperledger Fabric 通道配置文件和容器环境变量详解

    摘要 Fabric 网络启动的过程中需要进行大量配置,新学时对各个配置的作用一无所知,这导致我曾在网络出问题时先对配置文件的内容进行排列组合后再祈祷它能在某个时刻顺利运行,因此掌握 fabric 各个 ...

  8. Java环境变量详解

    自己总结些再加抄点: 安装JDK后要配置环境变量,主要有三个: 1 JAVA_HOME ->为JDK的安装目录,如:F:\JAVA\jdk1.6.0_04 2 CLASSPATH ->到哪 ...

  9. tomcat Win10 配置环境变量详解

    在Win10系统总该如何配偶之tomcat 环境变量?今天win10之家给大家带来了关于win10系统中配置tomcat环境的操作方法.在配置之前我们需要做以下几点: 步骤:安装和配置好了Java 的 ...

随机推荐

  1. 小程序externalClasses介绍

    小程序externalClasses 1.介绍:我们在封装组件的时候,有时候需要对外暴露出class,可以由调用者来决定组件中一部分的样式,此时就需要使用它了 // components/dong/i ...

  2. .Net Core3.0 WebApi 项目框架搭建 二:API 文档神器 Swagger

    .Net Core3.0 WebApi 项目框架搭建:目录 为什么使用Swagger 随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.后端分离的形态,而且前端技术和后端技 ...

  3. java基础(反射,注解,多线程,juc)

    JAVA基础 java反射 class对象 三种方式获取class加载时对象 1.class.forName("全类名"):将字节码文件加载进内存,返回class对象 2.类名.c ...

  4. 关于react的一些总结

    之前为了学习redux买了一本<深入浅出react和redux>,只看了redux部分.最近重新一遍,还是很有收获,这里结合阅读文档时的一些理解,记下一些初学者可能不太注意的东西. 原则: ...

  5. js 获取table tr td内的select 和input text

    $("#TableList tr").each(function () {                //for (var i = 1; i <= AM_index; i ...

  6. Vue的双向绑定原理

    Vue的构造函数分析 vm就是MVVM中的View Model var vm = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }) /* ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 异常处理和日志记录

    在开始之前,我们实现一个之前的遗留问题,这个问题是有人在GitHub Issues(https://github.com/Meowv/Blog/issues/8)上提出来的,就是当我们对Swagger ...

  8. Cypress系列(2)- Cypress 框架的详细介绍

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html Cypress 简介 基于 JavaSc ...

  9. AES128_CBC模式加密

    高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...

  10. [JavaWeb基础] 011.Struts2 配置拦截器

    在网页开发中有一个很重要的东西就是拦截器,就是在请求接收到的时候先到拦截器中进行一些逻辑处理,例如会话是否过期的验证等.在Struts2中我们可以编写一个拦截器的类,然后在struts.xml中简单配 ...