如果想從頭學起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
設置環境變量
一共有六種方式
- 在 cypress.json 文件中設置
- 創建一個 cypress.env.json 文件
- 導出為 CYPRESS_*
- 在 CLI 中傳遞為 --env (命令行運行中添加)
- 在插件中設置一個環境變量
- 可以通過 test configuration 設置環境變量
----------------------------->>>>>>>>>>>>>>>>>>> 點擊右側目錄即可跳轉
最常見的做法
- 使用一種策略進行本地開發,但在 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 個環境變量 |
不同計算機的環境變量可能不同 | |
支持嵌套字段,如:{ testUser: { name: '...', email: '...' } } |
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 並不友好 |
簡單明了的設置環境變量 | 不支持嵌套字段 |
優先級最高,覆蓋其他形式設置的環境變量 | |
允許不同機器之間存在動態的值 |
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"))}`) }); })
測試結果
測試用例級別設置的環境變量優先級更大
另外
更多 test configuration 的使用可以看這篇文章:待更新