HTML标记中测试自动化的测试ID?

时间:2009-06-22 16:50:40

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

我们使用自动化测试来验证Web应用程序的功能。为了使测试用例中的断言更简单,更灵活,我们正在考虑引入'TestIDs',即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>

3 个答案:

答案 0 :(得分:6)

我绝不会留下用于在实际网站上进行测试的代码。这只是一个糟糕的原则,并邀请黑客入侵。

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

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

答案 1 :(得分:3)

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

就个人而言,我不会使用测试ID臃肿生产HTML。

答案 2 :(得分:3)

我认为更容易和更好的测试的好处超过了感知风险。我假设您正在谈论类似以下内容:将id ='resultDetail'添加到页面上的结果详细信息元素,以便更容易找到自动化测试。我坦率地看不出那种伤害。如果我采取过于简单化的观点,也许你可以抛出一些样本标记,让我们更好地了解你在考虑什么。

看过您的示例标记后,我发现用户无法使用该ID时出现任何问题。许多应用程序暴露域ID。事实上,根据我的经验,通常这些域ID是UI的组成部分 - 通常ID是链接,您可以单击以获取更多详细信息,编辑,删除等...