2

我已经设置 cucumber 来处理服务(例如 Web 服务 API)级别测试和 UI(例如浏览器 DOM)级别测试。

我使用标签来做到这一点。我用@api标签标记每个 API 级别的场景。在我的 @Before 场景钩子中是一个 if 语句,它检查场景.getSourceTagNames() 是否包含@api。如果未检测到@api,则初始化驱动程序并创建浏览器实例。

由于我的测试使用的是 PageObject 范例,因此步骤定义不受每个页面的 HTML 详细信息的影响。这让我想知道是否可以使用依赖注入来控制加载两组 PageObject 类中的哪一组。第一组将绕过 Selenium 浏览器并直接访问服务器端点以获取要处理的值并发送回步骤定义。第二组将加载 selenium PageObject 类并通过浏览器来满足步骤定义调用。显然,第一组将在比第二组更短(经过)的时间内执行。

所以我开始上网搜索看看其他人做了什么。我看到了 Aslak Hellesøy 的这篇博文。阿斯拉克有话要说:

*“了解测试金字塔的好处的 Cucumber 高级用户更愿意针对中间层运行大多数场景(不通过 UI)。然后他们会选择相同场景的一小部分来运行 UI 并运行那些分开的。

如果您将所有自动化逻辑保留在 AutomationApi 接口后面,您可以提供两种不同的实现——一种直接与域模型对话,另一种使用 Selenium WebDriver 或另一个 UI 自动化库。"*

给定一个 Jenkins CI 服务器,第 1 步是构建软件,第 2 步是运行单元测试,第 3 步是运行域(Web 服务器 API)测试,第 4 步是运行 UI(例如 Web)测试。从而实现了测试金字塔

有人实现了 Aslak 的想法吗?如果是,场景之间是否存在实际重叠?也就是说,您是否使用 PageObjects 的 API 实现(例如在您的开发环境中)和 HTML(Selenium)PageObject 实现(例如在 CI 上)运行相同的场景?还是测试场景仅是 API xor web?

4

0 回答 0