Cypress web自動化34-cy.exec()執行系統命令


前言

cypress 提供了執行系統命令的方法 cy.exec() ,這方便在用例之前准備測試數據,和清理測試數據。

cy.exec()語法

執行系統命令語法

cy.exec(command)
cy.exec(command, options)

使用示例

cy.exec('npm run build')

command 字符串

從項目根目錄(包含默認cypress.json配置文件的目錄)執行的系統命令。

options 選項

傳遞選項對象以更改的默認行為cy.exec()。

options 選項參數說明

選項 默認 描述
log true 在命令日志中顯示命令
env {} 在命令執行之前要設置的環境變量的對象(例如{USERNAME: 'johndoe'})。將與現有系統環境變量合並
failOnNonZeroExit true 如果命令以非零代碼退出是否失敗
timeout execTimeout 超時時間默認60秒

返回結果

cy.exec() 執行之后,結果返回以下屬性的對象:

  • code code為0 是成功
  • stdout 執行系統命令行輸出內容
  • stderr 報錯內容

使用示例

cy.exec() 為運行任意系統命令提供了一個退出功能,因此您可以在cypress范圍之外執行測試所需的操作。適用於以下場景:

  • 運行構建腳本
  • 操作測試數據庫
  • 啟動過程
  • 殺死進程

運行構建命令

cy.exec('npm run build').then((result) => {
  // 生成result對象
  // {
  //   code: 0,
  //   stdout: "Files successfully built",
  //   stderr: ""
  // }
})

操作數據庫並斷言數據庫已成功

cy.exec('rake db:seed').its('code').should('eq', 0)

運行任意腳本並聲明其輸出

cy.exec('npm run my-script').its('stdout').should('contain', 'Done running the script')

寫入文件以根據響應主體創建固定fixture

cy.server()
cy.route('POST', '/comments').as('postComment')
cy.get('.add-comment').click()
cy.wait('@postComment').then((xhr) => {
  cy.exec(`echo ${JSON.stringify(xhr.responseBody)} >cypress/fixtures/comment.json`)
  cy.fixture('comment.json').should('deep.eq', xhr.responseBody)
})

options 選項

設置 timeout 超時時間

// 如果腳本任務20s沒執行完成,那么就會失敗
cy.exec('npm run build', { timeout: 20000 })

選擇在非零退出時不失敗,並在代碼和stderr上聲明

cy.exec('man bear pig', { failOnNonZeroExit: false }).then((obj) => {
  expect(obj.code).to.eq(1)
  expect(obj.stderr).to.contain('No manual entry for bear')

指定環境變量

cy.exec('echo $USERNAME', { env: { USERNAME: 'johndoe' } })
  .its('stdout').should('contain', 'johndoe')

命令必須退出

cy.exec() 不支持不退出的命令,例如:

  • 開始一個 rails server
  • 運行監聽任務
  • 需要手動中斷以停止的任何進程
  • 命令必須在內退出,execTimeout 否則Cypress會殺死命令的進程並使當前測試失敗。
  • cy.exec() 只會運行您已鏈接一次的斷言,並且不會重試。
  • 不要用 cy.exec() 啟動web服務

查看日志

列出默認 cypress.json 配置文件的內容

if (Cypress.platform === 'win32') {
  cy.exec('print cypress.json')
    .its('stderr').should('be.empty')
} else {
  cy.exec('cat cypress.json')
    .its('stderr').should('be.empty')
}

單擊exec命令日志中的命令時,控制台將輸出以下內容:

cy.exec() 能執行系統命令,所以當然也是可以執行python的命令行指令的,如在cmd里面執行

python xx.py


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM