天天看點

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

如果想從頭學起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 檔案進行配置就可以啦,如下
Cypress系列(14)- 環境變量詳解

代碼中調用

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. 在插件中設定一個環境變量
  6. 可以通過 test configuration 設定環境變量

----------------------------->>>>>>>>>>>>>>>>>>> 點選右側目錄即可跳轉

最常見的做法

  • 使用一種政策進行本地開發,但在 CI(持續內建)中運作時使用另一種政策
  • 在測試運作時,可以使用 Cypress.env() 通路環境變量的值

cypress.json 中設定

在 cypress.json 的 env 鍵下設定的任何 key:value 都是環境變量

cypress.json 代碼

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

測試檔案代碼

Cypress系列(14)- 環境變量詳解
// 列印所有環境變量
Cypress.env()

// 列印某個環境變量的值
Cypress.env("foor")      

測試結果

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

優缺點

優點 缺點
适用于需要源碼托管(git)并在所有計算機保持相同的值 隻适用于在所有計算機上應該有相同的值

建立 cypress.env.json 檔案

該檔案的描述

  • 可以建立自己的 cypress.env.json 檔案,Cypress 将會自動檢查它
  • 并且裡面的值會覆寫 cypress.json 中重名的環境變量
  • 它建立在 cypress.json 同級目錄下

用這個檔案有啥用

如果将cypress.env.json 添加到.gitgnore檔案中,那麼檔案中的值對于每個開發人員的計算機都是不同的

cypress.env.json 檔案代碼

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

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

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

在 cypress.json 中也有一個 key 的環境變量,是以在 cypress.env.json 的 key 的值覆寫了它的值

專用檔案,隻存放環境變量 需要單獨多處理一個新的檔案
可以從其他建構過程中生成此檔案 可能會過度幹預 1 或 2 個環境變量
不同計算機的環境變量可能不同
支援嵌套字段,如:{ testUser: { name: '...', email: '...' } }

CYPRESS_*

重點

  • 計算機中任何以 CYPRESS_ 或 cypress_ 開頭的環境變量都會自動被 Cypress 識别出來
  • 會直接覆寫 cypress.json 和 cypress.env.json 檔案中重名的環境變量
  • Cypress在添加環境變量時,會自動去掉 CYPRESS_ 字首
  • 使用者級别環境變量的優先級會高于系統變量哦

在系統添加環境變量

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

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

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

--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=指令行參數環境變量      

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

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

不需要對檔案或配置項進行任何更改 使用 --env 并不友好
簡單明了的設定環境變量 不支援嵌套字段
優先級最高,覆寫其他形式設定的環境變量
允許不同機器之間存在動态的值

plugins 中聲明環境變量

介紹

  • 可以使用 plugins 通過 Node 代碼動态設定它們,而不必在檔案中設定環境變量
  • plugins 具體如何使用可以看這篇文章:待更新

最大程度的靈活性 需要使用Node編寫知識
可以根據需要管理配置 更具挑戰性

test configuration 設定環境變量

  • 可以給測試用例或測試用例集單獨設定環境變量
  • 會覆寫其他方式設定的環境變量

context('test configuration 設定環境變量', {
    env: {
        'key': '測試配置項',
        'host': 'www.poloyy.com'
    }
}, function () {

    it('test configuration 測試用例設定', function () {
        cy.log(`環境變量有${JSON.stringify(Cypress.env())}`)
        cy.log(`key 環境變量的值是${JSON.stringify(Cypress.env("key"))}`)
        cy.log(`host 環境變量的值是${JSON.stringify(Cypress.env("host"))}`)
    });

    it('test configuration 測試用例設定2', {
        env: {
            'key': '測試用例級别配置項',
            'host': 'edit.poloyy.com'
        }
    }, function () {
        cy.log(`環境變量有${JSON.stringify(Cypress.env())}`)
        cy.log(`key 環境變量的值是${JSON.stringify(Cypress.env("key"))}`)
        cy.log(`host 環境變量的值是${JSON.stringify(Cypress.env("host"))}`)
    });
})      

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

測試用例級别設定的環境變量優先級更大

另外

更多 test configuration 的使用可以看這篇文章:待更新

繼續閱讀