赛普拉斯的新用户在这里-以及一个新的“测试器”;请保持温柔。 :-)
我正在创建一个网站,用户可以在其中将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 :(得分:1)
这在很大程度上取决于此特定测试的目的。我将探讨两种具有不同优缺点的场景。
这意味着,除非按说明通过(3种不同类型的页面上的10个模块),否则功能(带有模块的页面)将不完整。在这种情况下,您实际上可以完全完成已经做的事情-您的测试将查看模块,它们的顺序和整体功能。如您已经建议的那样,可以拆分测试功能并简化switch语句,例如,通过将测试功能放入映射中,然后仅从该映射中调用功能(键为模块名称/ ID);但这是一个小决定。作为测试设计师,您要做的主要事情是决定整个事情有效还是无效。
这种方法有缺点,即如果条件检查和DOM查询过多,则测试可能会变脆并且不能100%地起作用(至少,这是我在cypress和其他e2e上的经验测试平台)。另一个缺点是,如果测试失败,则不会立即反馈确切原因。
此类测试的重点转移到功能的某些部分。理想情况下,开发人员为所有较小的部分编写测试,如果这些工作正常,则整个页面都可以工作。例如,开发人员编写的不同测试分别是 和
等,
这些测试具有更好的稳定性,并且开发人员可以获得更多信息,但是却以开发和维护所有这些测试代码为代价。开发人员可以肯定的是,如果测试A,B和C有效,那么整个页面当然也必须正常工作。但是他们从来没有实际测试过,所以他们不确定。
如果您想获得这些好处(并希望克服不利因素),那么您将需要在套件中创建更多独立的测试。
这个答案花了很长时间,但是关于测试策略,我注意到没有明显的赢家。因此,由您自己决定应用程序的哪些部分对您更重要以及您是否有能力在以后维护测试。