FitNesse:保持顺序的嵌套 SuiteSetUps 的替代方案
FitNesse: Alternative for nested SuiteSetUps that maintains ordering
我们有一个 FitNesse/HSAC 项目,其中包含大量测试,其结构基本如下:
- 顶级套房
- 子套件 1
- [测试]
- 子套件 2
- [测试]
- 套件设置
- 子组 3
- [测试]
- 套件设置
SubSuite2 的 SuiteSetUp 使用 JsonHttpTest 执行特别慢的 GET 请求,并且 SubSuite2 中的所有测试都会检查该请求的响应。
我们选择在 SuiteSetUp 中执行请求,因为在所有这三种情况下,FitNesse 都会 运行 在相关测试之前执行请求:
- 当运行单独测试 SubSuite2 的其中一项时
- 当运行将 SubSuite2 作为一个套件时
- 当 运行将 TopSuite 作为一个套件时
但是,像这样嵌套 SuiteSetUps 会更改 FitNesse issue #131 中报告的测试执行顺序,该顺序已作为 WONTFIX 关闭。
这种顺序更改在我们的案例中是不可取的,因为它使测试报告难以 read/navigate 并且使我们和我们为其编写测试的客户感到困惑。
无论我们如何 运行 测试,我们都希望在保持执行顺序的同时最多执行一次慢速请求。
我想出的可能解决方案是:
- 将嵌套的 SuiteSetUp 替换为名为排序在套件中所有其他测试之前的测试。这样就在不改变执行顺序的情况下适时执行了,但是只在case 2和case 3
下执行
- 扩展 JsonHttpTest 以能够缓存响应,以便请求实际上只执行一次。这适用于所有三种情况,但需要一些 Java 代码更改,这些更改可能会在更新 HSAC*
时中断
- 请注意,将缓慢的 GET 请求移动到全局 SuiteSetUp 是不可取的,因为它也会在 运行ning 仅在 SubSuite2
外部测试时执行
- 请注意,将 SubSuite2 的所有测试合并到一个测试中也是不可取的,因为在这个套件中执行的检查数量足够大,使得这样的测试变得笨拙和缓慢
我不禁觉得应该有一种方法可以解决这三种情况而无需 Java 编码。
我在谷歌上进行了大量搜索,但找不到任何合适的解决方案。
我已经为这个问题绞尽脑汁好几个小时了,所以最欢迎外部观点:)
注意:此外,我们还想做 |show|response|某个地方,这样我们就可以在它们出错时进行调试,但响应是如此之大,以至于仅仅显示它就需要 FitNesse 好几秒钟。
仅在 SuiteSetUp 中显示响应便于查找,同时最大限度地减少延迟,而此解决方案使显示响应的位置变得不那么琐碎。
应该可以使用 FitNesse 20190628(及更高版本)并将 !define ALL_UNCLE_SUITE_SETUPS {true}
添加到您的 top-level 套件中
我们有一个 FitNesse/HSAC 项目,其中包含大量测试,其结构基本如下:
- 顶级套房
- 子套件 1
- [测试]
- 子套件 2
- [测试]
- 套件设置
- 子组 3
- [测试]
- 套件设置
- 子套件 1
SubSuite2 的 SuiteSetUp 使用 JsonHttpTest 执行特别慢的 GET 请求,并且 SubSuite2 中的所有测试都会检查该请求的响应。
我们选择在 SuiteSetUp 中执行请求,因为在所有这三种情况下,FitNesse 都会 运行 在相关测试之前执行请求:
- 当运行单独测试 SubSuite2 的其中一项时
- 当运行将 SubSuite2 作为一个套件时
- 当 运行将 TopSuite 作为一个套件时
但是,像这样嵌套 SuiteSetUps 会更改 FitNesse issue #131 中报告的测试执行顺序,该顺序已作为 WONTFIX 关闭。
这种顺序更改在我们的案例中是不可取的,因为它使测试报告难以 read/navigate 并且使我们和我们为其编写测试的客户感到困惑。
无论我们如何 运行 测试,我们都希望在保持执行顺序的同时最多执行一次慢速请求。
我想出的可能解决方案是:
- 将嵌套的 SuiteSetUp 替换为名为排序在套件中所有其他测试之前的测试。这样就在不改变执行顺序的情况下适时执行了,但是只在case 2和case 3 下执行
- 扩展 JsonHttpTest 以能够缓存响应,以便请求实际上只执行一次。这适用于所有三种情况,但需要一些 Java 代码更改,这些更改可能会在更新 HSAC* 时中断
- 请注意,将缓慢的 GET 请求移动到全局 SuiteSetUp 是不可取的,因为它也会在 运行ning 仅在 SubSuite2 外部测试时执行
- 请注意,将 SubSuite2 的所有测试合并到一个测试中也是不可取的,因为在这个套件中执行的检查数量足够大,使得这样的测试变得笨拙和缓慢
我不禁觉得应该有一种方法可以解决这三种情况而无需 Java 编码。
我在谷歌上进行了大量搜索,但找不到任何合适的解决方案。
我已经为这个问题绞尽脑汁好几个小时了,所以最欢迎外部观点:)
注意:此外,我们还想做 |show|response|某个地方,这样我们就可以在它们出错时进行调试,但响应是如此之大,以至于仅仅显示它就需要 FitNesse 好几秒钟。
仅在 SuiteSetUp 中显示响应便于查找,同时最大限度地减少延迟,而此解决方案使显示响应的位置变得不那么琐碎。
应该可以使用 FitNesse 20190628(及更高版本)并将 !define ALL_UNCLE_SUITE_SETUPS {true}
添加到您的 top-level 套件中