Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Automated tests Cypress-如何按顺序运行测试文件_Automated Tests_Cypress - Fatal编程技术网

Automated tests Cypress-如何按顺序运行测试文件

Automated tests Cypress-如何按顺序运行测试文件,automated-tests,cypress,Automated Tests,Cypress,当我按下“runallspecs”或使用run命令运行Cypress中的所有文件时,它会按字母顺序运行所有测试文件,所以我不希望这样 我想用我自己的规则对它们进行分类 假设我在聊天应用程序测试中有3个步骤 可以连接聊天应用程序 可以连接聊天室 用户可以发送消息吗 我想测试每一步,而不是互相束缚。 我的意思是,测试他们自己的一个功能。 我所做的如下 chat\u app\u connect.spec.js description('服务器连接测试',()=>{ 它('访问服务器页面',()=>{

当我按下“runallspecs”或使用run命令运行Cypress中的所有文件时,它会按字母顺序运行所有测试文件,所以我不希望这样

我想用我自己的规则对它们进行分类


假设我在聊天应用程序测试中有3个步骤

  • 可以连接聊天应用程序
  • 可以连接聊天室
  • 用户可以发送消息吗
  • 我想测试每一步,而不是互相束缚。 我的意思是,测试他们自己的一个功能。 我所做的如下

    chat\u app\u connect.spec.js

    description('服务器连接测试',()=>{
    它('访问服务器页面',()=>{
    参观https://chat.page..');
    });
    它('检查欢迎信息',()=>{
    cy.contains(“现场支持”);
    cy.contains(“你好,陌生人”);
    });
    它('检查圈的URL和状态',()=>{
    //网址
    cy.url()
    .should('include','hello');
    //地位圈
    cy.get(‘圆’)
    .should('have.class','positive');
    });
    });
    
    聊天室连接规范js

    import./chat\u app\u connect.spec.js';
    描述('聊天连接测试',()=>{
    它('键入客户名称',()=>{
    cy.get('input')
    .clear()
    .类型(“E2E试验”);
    });
    它('点击提交按钮',()=>{
    cy.get('.submit按钮')
    。单击();
    });
    它('检查圈的URL和状态',()=>{
    //网址
    cy.url()
    .应该('相等','https://client.dev.octopus.chat/');
    //地位圈
    cy.get('circle',{timeout:5000})
    .should('have.class','positive');
    });
    });
    
    chating.spec.js

    import./chat_connect.spec.js';
    描述('聊天测试',()=>{
    它('键入一条测试消息,然后按Enter键并检查消息是否已发送',()=>{
    //类型
    cy.get(“#聊天信息”)
    .clear()
    .type('嘿,我是一条测试消息{enter}');
    //检查消息
    cy.get(“.message list”)
    .should('contain','Hey I'm a test message');
    });
    });
    
    正如您所看到的,每个测试都是相互关联的,这意味着当我尝试测试功能时,它的调用每个测试和整个测试都将被测试

    我不知道这是不是正确的方法


    在这种情况下,我应该怎么做,或者这是一种可以接受的方式

    Cypress不会故意让您这么做,并且有充分的理由:

  • 这通常表明测试设计很差。测试不应依赖于彼此的状态。任何测试都应该能够独立于测试套件的其余部分成功运行
  • 你将永远无法利用,因为你不能保证一个规范会被一个接着一个的运行
  • 下面是关于这一点的相关讨论,将更详细地介绍:

    但是,如果您决定执行此操作,可以通过在规格名称前加上数字来执行:

    01-some-spec.js
    02-alphabetically-first-spec.js
    03-some-other-spec.js
    

    我有一个特殊的例子,我启动一个应用程序的多个实例,而不是使用装置或测试数据,我只是将用户反馈集成为从登录到转发的Cypress测试

    在任何情况下,我都使用
    cypress.json
    中的
    testFiles
    配置来设置规范文件的运行顺序:

    {
    “baseUrl”:http://localhost:5000",
    “测试文件”:[
    “login/*.js”,
    “lead/new lead.spec.js”,
    “leads/leads list.spec.js”,
    “lead/lead detail.spec.js”,
    “lead/lead modify.spec.js”,
    //...
    ]
    }
    

    不需要文件编号:D

    最简单的解决方案是为所有测试文件添加前缀,例如:

    • 01-chat\u app\u connect.spec.js
    • 02-chat\u connect.spec.js
    等等


    Cypress将按字母顺序接收这些文件,你可以通过使用数字作为前缀来“欺骗”你想要的行为。

    Jean Lescure的答案是救命恩人。我们需要基于优先级运行测试,而不需要一堆重复的测试或符号链接。在我们的默认cypress配置文件中,以下内容适用于我们:

      "integrationFolder":"cypress/integration",
      "testFiles": [
        "high_priority_specs/**/*.js",
        "medium_priority_specs/**/*.js",
        "low_priority_specs/**/*.js"
      ]
    
    为了更改优先级级别,我们使用了3个使用cypress--configFile参数加载的配置文件。为了运行更高优先级的测试(仅限烟雾测试),我们使用了以下方法:

      "integrationFolder":"cypress/integration",
      "testFiles": [
        "high_priority_specs/**/*.js"
      ]
    

    我正在为一个聊天应用程序编写测试,所以像“先登录然后开始聊天”这样的案例有点挑战性。我不想要大代码块,我想要小文件中的小代码块。我在导入中发现了这一点,但这似乎不正确。我在测试中所做的是编写一个自定义命令,使用
    cy.request()
    登录,然后在
    before()
    块中,调用我的
    cy.login()
    命令。这就是您应该如何设置状态以避免依赖于特定的测试执行顺序。这将非常有用。我可以去掉这些数字。请注意:这(任何测试排序方法)是功能工作方式的副产品。
    testFiles
    的目的是仅包括某些规格,而不是用于订购。这恰好是它内部的工作方式,可能会也可能不会永远工作下去,因为Cypress并不声称它是这样工作的。这样做的一个缺点是,每个新的测试文件都必须手动添加到
    Cypress.json
    中。如果使用
    *
    模式,并以这种方式存储您的测试,所有那些不显式的测试最终都会执行