【问题标题】:Test IDs for Test Automation in HTML Markup?HTML标记中测试自动化的测试ID?
【发布时间】:2009-06-22 16:50:39
【问题描述】:

我们使用自动化测试来验证我们的网络应用程序的功能。为了使测试用例中的断言更简单、更灵活,我们正在考虑引入“TestID”,即 HTML 标记中的 ID,可帮助测试用例查找和验证页面上的元素。此外,这些 TestID 将允许更具体的集成测试,由于页面上的数据有限,目前这些测试是不可能的。

然而,这让我们犹豫不决:

  • 引入测试 ID 意味着更改测试对象以进行测试
  • 安全 - 我们将披露内部域对象 ID 和其他信息,否则这些信息将不会在页面上显示
  • 标准 - 根据我们如何将 TestID 放入标记中,我们很可能会违反元素或属性的预期语义使用(例如,“id”或“类”属性、其他 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 你不需要关心性能......!关于干扰应用程序代码,尝试使用非 html 属性,如 data-test-id="" :)

标签: html testing web-applications automated-tests integration-testing


【解决方案1】:

我绝不会将用于测试的代码留在实时站点中。这只是一个糟糕的原则,并且会招致黑客攻击。

只要您的测试 ID 的格式不会与页面上的其他 ID 冲突(ID 必须是唯一的)并且不会被任何实时代码引用(如果您无法确定这里有更大的错误),那么具有 ID 的测试站点和没有 ID 的实时站点之间的行为应该没有任何差异。

在我看来,最佳实践是这样设计,使您的测试代码在您的开发站点上正确执行,并且您知道删除它不会损害您的实际站点。如果我的网站需要定期测试实时版本以确保其正常运行,我会担心。

【讨论】:

    【解决方案2】:

    我想说的是,更容易和更好的测试带来的好处超过了感知到的风险。我假设您正在谈论以下内容:将 id='resultDetail' 添加到页面上的结果详细信息元素,以便更容易找到自动化测试。坦率地说,我看不出这有什么害处。如果我的观点过于简单化,也许您可​​以提出一些示例标记,让我们更好地了解您正在考虑的内容。

    看过您的示例标记后,我认为将 id 提供给用户没有任何问题。许多应用程序都会公开域 ID。事实上,根据我的经验,这些域 ID 通常是 UI 的一个组成部分 - 通常 ID 是您可以单击以获取更多详细信息、编辑、删除等的链接......

    【讨论】:

      【解决方案3】:

      您是否考虑过使用其他方法来识别元素,例如 XPath?我不知道您的页面有多动态,但 XPath 可以非常具体地包含您想要的元素。

      就我个人而言,我不会用测试 ID 膨胀生产 HTML。

      【讨论】:

      • 我们的网站是非常动态的(用户自定义!),因此很难找到(和测试!)良好且稳定的 XPath 表达式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多