前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Cypress web自动化34-cy.exec()执行系统命令

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

作者头像
上海-悠悠
发布2020-06-10 15:06:55
9070
发布2020-06-10 15:06:55
举报

前言

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范围之外执行测试所需的操作。适用于以下场景:

  • 运行构建脚本
  • 操作测试数据库
  • 启动过程
  • 杀死进程

运行构建命令

代码语言:javascript
复制
cy.exec('npm run build').then((result) => {
  // 生成result对象
  // {
  //   code: 0,
  //   stdout: "Files successfully built",
  //   stderr: ""
  // }
})

操作数据库并断言数据库已成功

代码语言:javascript
复制
cy.exec('rake db:seed').its('code').should('eq', 0)

运行任意脚本并声明其输出

代码语言:javascript
复制
cy.exec('npm run my-script').its('stdout').should('contain', 'Done running the script')

写入文件以根据响应主体创建固定fixture

代码语言:javascript
复制
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 超时时间

代码语言:javascript
复制
// 如果脚本任务20s没执行完成,那么就会失败
cy.exec('npm run build', { timeout: 20000 })

选择在非零退出时不失败,并在代码和stderr上声明

代码语言:javascript
复制
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')

指定环境变量

代码语言:javascript
复制
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 配置文件的内容

代码语言:javascript
复制
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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 从零开始学自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • cy.exec()语法
    • command 字符串
      • options 选项
        • 返回结果
        • 使用示例
        • options 选项
        • 命令必须退出
        • 查看日志
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档