Cypress web自动化34-cy.exec()执行系统命令 前言 cy.exec()语法 使用示例 options 选项 命令必须退出 查看日志

Cypress web自动化34-cy.exec()执行系统命令
前言
cy.exec()语法
使用示例
options 选项
命令必须退出
查看日志

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')
}

Cypress web自动化34-cy.exec()执行系统命令
前言
cy.exec()语法
使用示例
options 选项
命令必须退出
查看日志

单击exec命令日志中的命令时,控制台将输出以下内容:

Cypress web自动化34-cy.exec()执行系统命令
前言
cy.exec()语法
使用示例
options 选项
命令必须退出
查看日志

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

python xx.py