分享

Cypress web自动化34-cy.exec()执行系统命令

 上海悠悠 2021-05-27

前言

cypress 提供了执行系统命令的方法 cy.exec() ,这方便在用例之前准备测试数据,和清理测试数据。

cy.exec()语法

执行系统命令语法

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

使用示例

cy.exec('npm run build’)

command 字符串

从项目根目录(包含默认cypress.json配置文件的目录)执行的系统命令。

options 选项

传递选项对象以更改的默认行为cy.exec()。

options 选项参数说明

选项默认描述
logtrue在命令日志中显示命令
env{}在命令执行之前要设置的环境变量的对象(例如{USERNAME: 'johndoe’})。将与现有系统环境变量合并
failOnNonZeroExittrue如果命令以非零代码退出是否失败
timeoutexecTimeout超时时间默认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

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多