0

我目前处于从客户网站解析数据的环境中。我想使用我的测试来确保当客户更改他们的网站时,我知道我们什么时候不再收到信息。

我的第一种方法是进行纯集成测试,我的测试访问客户的站点并断言数据已找到。然而,在进行了 500 次测试的中途,测试运行变得难以忍受,并且在某些情况下开始超时。所以我在不失去他们提供的核心保护的情况下尽可能多地清除了测试,我已经降到了 350 左右。我害怕添加更多测试以破坏所有测试。当我再进行更改时,我还发现自己没有运行 5 分钟以上的持续时间(一些客户会更长,因为这是基于与他们网站的通信速度)。我认为这是一个彻底的失败。

我对此进行了很多思考,并在办公室四处询问,我下一次尝试的想法是拉下客户的页面并针对我的项目中的这些嵌入式资源编写测试。这将为我提供更高的测试覆盖率,并允许我单独返回测试。但是,当他们进行更改时需要通知我,然后重新拉下页面进行测试。我认为客户不会坚持这一点。

有人建议我用一套“随机”集成测试来增强它,这些测试与我失败的测试(访问客户站点)提供相同的功能,但数量比以前少得多。我真的不喜欢随机测试的想法,有时可能会用相同的代码获得红灯,有时会获得绿灯。但是到目前为止,这听起来像是我听到的最好的主意,它仍然可以了解客户的站点何时发生更改并且我的代码不再找到数据。

有没有人发现自己在测试这样的环境?测试社区对我有什么建议吗?

4

4 回答 4

0

我的建议是尽量隔离处理不确定性的代码部分。这部分应该是一个 API,作为所有其他代码使用的服务。这样,您将保护大部分代码免受更改。

代码的稳定部分应该进行单元测试。由于该部分独立于与运行测试的客户端站点的连接,应该会更快,并且也会使这些测试更加可靠。

可以减少必须处理客户网站上的更改的部分。这样,您并没有解决问题,但至少您将其最小化并将其集中在代码的一个模块中。

建议客户将数据公开为 Web 服务将是您的最佳选择。但我想这不取决于你:P。

于 2012-04-13T14:01:27.597 回答
0

您应该考虑将测试划分为可以独立运行的单独程序集。我通常有一个单元测试程序集和一个运行速度较慢的集成测试程序集。

我的单元测试程序集非常快(因为代码是使用模拟单独测试的)并且在我开发时会非常频繁地运行。集成测试速度较慢,我仅在完成功能/签入或对破坏某些东西有不好的感觉时才运行它们。

也许您可以做一些类似的事情,甚至更进一步,并拥有 3 个测试套件,其中第三个包含更慢的客户端 UI 轮询测试。

如果您没有持续集成服务器/流程,您应该考虑设置一个。这将持续构建您的软件并执行测试。这可以设置为监控签入并在后台工作,如果出现任何故障,则会发出通知。有了这个,您就不会关心您的客户端 UI 轮询测试需要多长时间,因为您不必自己运行它们。

于 2012-04-13T14:12:48.513 回答
0

当您说大测试变得无法忍受时,它表明您正在手动运行此测试套件。你不应该这样做。它应该在后台持续运行,以完成套件所需的任何速度 - 然后重新开始(如果有相关成本,可能在延迟之后)。只有当出现问题时,您才会收到警报。

如果您的测试有什么东西导致它们随着数量的增长而变慢 - 找到它并修复它。测试应该彼此独立,因此简单地拥有更多测试不应导致单个测试超时。

于 2012-04-13T13:58:22.397 回答
0

绝对将测试分开 - 至少将单元测试与集成测试分开。

正如 Martyn 所说,建立一个持续集成系统。我使用 Teamcity,它非常好,易于使用,前 20 次构建免费,如果您没有服务器可供使用,您可以愉快地在自己的机器上运行它 - http://www.jetbrains.com /团队城市/

设置一个构建以在每次签入时运行,并使该构建运行您的单元测试,或者如果您愿意,可以运行快速运行的测试。

设置第二个构建在每晚午夜(或其他方便的时间)运行,并在其中包含运行时间较长的客户端调用集成测试。有了这个,测试需要多长时间都没关系,如果你的客户破坏了你的东西,你会在早上第一件事得到一个很大的危险信号。如果您怀疑可能存在问题,您也可以按需手动运行这些。

于 2012-04-14T00:21:35.817 回答