代码之家  ›  专栏  ›  技术社区  ›  Zeth

第页上的条件测试模块(如果存在)——使用Cypress

  •  0
  • Zeth  · 技术社区  · 6 年前

    这里有Cypress的新用户,还有一个新的“测试者”;所以请温柔点。:-)

    我正在制作一个网站,用户可以在一堆不同的页面上插入10个不同模块的组合。

    我试着做一些测试,然后(理想情况下)在给定页面上浏览所有不同的模块。然后foreach模块将为给定模块运行一组测试。

    例子:

    为了简单起见,假设有3个模块: A , B C .

    用户/客户使用以下布局组合页面:

    -----
    | B |
    | A |
    | C |
    | B |
    | B |
    | A |
    | A |
    | A |
    -----
    

    理想情况下,我会编写一个(一组)测试,它将执行以下操作:

    it( 'tests all modules on a page', function() {
      cy.get( '.page-section' )
        .each( ( $el ) => {
          switch( $el.pageSection ){
            case 'A':
              testForA();
              break;
            case 'B':
              testForB();
              break;
            case 'C':
              testForC();
              break;    
      }
    }
    

    我可以在这一页上读到: Conditional Testing with Cypress ,用柏树进行的条件测试应该在非常特定的情况下进行。

    但这将是一个巨大的考验。显然,它将被分成几个功能。但这是人们用柏树做的吗?还是我把这把锤子当成螺丝刀。。。我找不到任何教程/指南来设置类似的内容(不同的情况)。

    0 回复  |  直到 6 年前
        1
  •  1
  •   esmekhov    6 年前

    这在很大程度上取决于这个特殊测试的目的。我将探讨两种不同的场景,它们有不同的优缺点。

    1. 这个测试是您与业务团队达成一致的。

    这意味着,除非按照说明通过(页面上有10个模块,共有3种不同类型),否则该功能(包含模块的页面)不完整。在这种情况下,你实际上可以做你已经做过的事情——你的测试将模块、它们的顺序和功能视为一个整体。正如您已经建议的那样,可以拆分测试函数,并简化switch语句,例如,将测试函数放在映射中,然后仅从该映射调用函数,其中键是module name/id;但这是一个小决定。作为一名测试设计师,您主要决定: 整件事

    这种方法有缺点,即如果有太多的条件检查和DOM查询(至少,这是我在cypress和其他e2e测试平台上的经验),测试可能会变得脆弱,并且无法100%工作。另一个缺点是,当测试失败时,没有立即反馈为什么会发生这种情况。

    1. 这是一个测试,开发者可以更快地获得关于特性状态的反馈,并跟踪特性回归。

    这类测试的重点转移到功能的某些部分。理想情况下,开发人员为所有较小的部分编写测试,如果这些工作正常,整个页面也正常工作。例如,开发人员编写了不同的测试 独立的

    • 验证容器是否可以承载多个模块
    • 验证这些模块的顺序
    • 确认同一类型的模块可以放在同一页上
    • 验证模块的呈现 没有 这个容器
    • 验证两个给定组件之间的相互作用,如果有

    等等,等等。

    这些测试具有更好的稳定性,开发人员可以获得更多信息,但代价是开发和维护所有这些测试代码。开发商可以确定,如果测试A、B和;C工作,那么整个页面肯定也必须工作。但他们从未真正测试过,所以他们不确定。

    如果您想获得这些好处(并想处理缺点),那么您需要在套件中创建更多独立的测试。


    这个答案有点长,但关于测试策略,我注意到没有明确的赢家。因此,主要取决于您来确定应用程序的哪些部分对您更重要,以及您是否能够在以后维护测试。