HTML 标记中测试自动化的测试 ID?
-
06-07-2019 - |
题
我们使用自动化测试来验证 Web 应用程序的功能。为了使测试用例中的断言更简单、更灵活,我们正在考虑引入“TestID”,即HTML 标记中的 ID 可帮助测试用例查找并验证页面上的元素。此外,这些 TestID 将允许更具体的集成测试,而由于页面上的数据有限,目前这是不可能的。
然而,让我们犹豫的是:
- 引入测试 ID 意味着 更改测试的测试
- 安全 - 我们将披露内部域对象 ID 和其他在页面上不可见的信息
- 标准 - 根据我们如何将 TestID 放入标记中,我们很可能会违反元素或属性的预期语义使用(例如'id' 或 'class' 属性,其他 html 元素等)
- 干涉 - TestID 可能会干扰应用程序代码
- 表现 - TestID 是不必要的标记(对用户而言)并增加页面大小(仅在大页面上有意义)
将 TestID 限制为测试/登台 HTML 似乎不是一个好主意,因为我们显然想要测试将在生产中使用的代码,并且不希望我们的测试/登台环境表现不同。事实上,我们目前在发布后针对实时系统运行部分测试套件。
您认为 TestID 是个好主意吗?如果是,您将如何将它们放入标记中?
一些示例标记来演示我正在谈论的内容:
<!-- this test id allows an integration test to verify that
the carrot 188271 is in fact green but exposes the id to the user -->
<tr id="testid-carrot-id-188271">
<td class="color">green</td>
<td class="size">doesn't matter</td>
</tr>
解决方案
我想说,更简单、更好的测试的好处超过了感知到的风险。我假设您正在谈论类似以下内容:将 id='resultDetail' 添加到页面上的结果详细信息元素中,以便更容易找到自动化测试。坦率地说,我不认为这有什么坏处。如果我的观点过于简单化,也许您可以提供一些示例标记,以便我们更好地了解您正在考虑的内容。
看过您的示例标记后,我认为向用户提供 id 没有任何问题。许多应用程序公开域 ID。事实上,根据我的经验,这些域 ID 通常是 UI 的一个组成部分 - 通常 ID 是链接,您可以单击它们来获取更多详细信息、编辑、删除等...
其他提示
我永远不会留下用于在实时站点中进行测试的代码。这是一个糟糕的原则,而且会招致黑客攻击。
只要您的测试 ID 的格式正确,不会与页面上的其他 ID 发生冲突(ID 必须是唯一的),并且不会被任何实时代码引用(如果您无法确定存在某些内容)此处的错误较大),那么带有 ID 的测试站点和没有 ID 的实时站点之间的行为不应有任何差异。
在我看来,最佳实践是进行设计,使您的测试代码能够在开发站点上正确执行,并且您知道删除它不会损害您的实时站点。我会担心我的网站是否需要定期测试实时版本以确保其正常工作。
您是否考虑过使用其他东西来识别元素,例如 XPath?我不知道您的页面有多动态,但 XPath 可以非常具体地指定您想要的元素。
就我个人而言,我不会用测试 ID 来扩充生产 HTML。