zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    HTTP/1.1 Status Code Definitions
    宽带到底“宽不宽”
    tmux的简介及使用
    Simple Gesture – Fling
    使用postfix搭建匿名smtp服务器
    dos2unix和unix2dos命令使用 [〓 脚本功略 〓]
    Android Coding: Gestures Builder: create your gestures library
    Android Gesture 手势识别使用实例 Android mobile ITeye论坛
    使用socat进行端口转发
    notepad++在编辑python文件时以4个空格代替TAB
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/13064213.html
Copyright © 2011-2022 走看看