我已设置黄瓜来处理服务(例如Web服务API)级别测试和UI(例如浏览器DOM)级别测试。
我是用标签做的。我使用 @api 标记标记每个API级别方案。在我的@Before场景中,hook是一个if语句,用于检查scenario.getSourceTagNames()是否包含 @api 。如果未检测到@api,则初始化驱动程序并创建浏览器实例。
由于我的测试使用的是PageObject范例,因此步骤定义将屏蔽每个页面的HTML详细信息。这让我想知道是否可以使用依赖注入来控制两组PageObject类中的哪一个被加载。第一组将绕过Selenium浏览器并直接命中服务器端点以获取要处理的值并将其发送回步骤定义。第二组将加载selenium PageObject类并通过浏览器来满足步骤定义调用。显然,第一组将在比第二组更少(经过)的时间内执行。
所以我开始上网查看别人做了什么。我和AslakHellesøy一起浏览了这个博客post。 Aslak这样说:
*“了解测试金字塔的好处的黄瓜高级用户将更喜欢针对中间层运行大多数场景(不通过UI)。然后他们将选择相同场景的一小部分来贯穿用户界面并单独运行它们。
如果将所有自动化逻辑保留在AutomationApi接口后面,您可以提供两种不同的实现 - 一种直接与域模型对话,另一种使用Selenium WebDriver或另一种UI自动化库。“*
给定一个Jenkins CI服务器,第1步是构建软件,第2步是运行单元测试,第3步是运行域(Web服务器API)测试,第4步是运行UI(例如web)测试。这样就实现了testing pyramid。有人实施了Aslak的想法吗?如果是,情景之间是否存在实际重叠?也就是说,您是否使用PageObjects的API实现(例如在您的开发环境中)以及HTML(Selenium)PageObject实现(例如在CI上)运行相同的场景?或者测试场景是否仅仅是API xor web?