Cypress系列(14)- 環境變數詳解

小菠蘿測試筆記發表於2020-06-08

如果想從頭學起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 並不友好
簡單明瞭的設定環境變數  
優先順序最高,覆蓋其他形式設定的環境變數  

相關文章