如何自动化我的测试以连接(并修改)到外部服务器

时间:2018-11-26 09:30:39

标签: java testing junit

我目前正在编写一个Java程序,该程序是与另一台服务器的接口。大多数功能(接近> 90%)在服务器上执行某些操作。当前,我只是在编写一些简单的类,这些类在服务器上运行某些操作,然后自己检查一下,或者在测试中添加一些方法以读取书面信息。

当前,我正在自己的计算机上进行开发,并且具有在VM上本地运行的服务器版本。

我不想在每次构建时都持续运行测试,因为我也不想不断修改连接的服务器。我不确定进行测试的最佳方法。我有运行每个构建的JUnit测试(基于不与外部交互的简单函数)。我似乎看不到在JUnit中设置方法来编写不必在每次构建时都运行的测试(也许当它们的功能发生变化时?)。

或者,任何人都可以向我指出如何最好地处理我的测试的正确方向。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我不想在每次构建时都持续运行测试,因为我不想不断修改连接到的服务器

这应该为您发出警报。运行测试可以为您提供有关是否损坏东西的反馈。不运行它们意味着您是盲目的。这并不意味着一切都很好。

有几种方法,具体取决于您对服务器代码的访问权限。

完全访问权限

如果您自己编写服务器,或者可以访问代码,则可以为服务器创建测试工具包-服务器的修改版本,该版本完全在内存中运行,并允许您控制服务器响应,因此您可以模拟不同的场景。

这种测试工具包是通过将服务器的逻辑部分与其周围环境分开,然后对其进行模拟或创建它们的内存版本(例如数据库,队列,文件系统等)而创建的。这样可以使服务器运行得非常快,然后可以在测试本身中创建和销毁它。

受限/无访问权限

如果您必须编写测试以与不受控制的服务器集成(例如第三方API),则方法是编写远程服务的“模拟”,并通过合同测试来检查模拟的行为仍然与真实行为相同。我通常将它们放在不同的版本中,并偶尔运行它,只是为了知道我的模拟服务器与实际服务器没有分歧。

一旦有了模拟服务器,就可以为其编写一个适配器层,并在集成测试中进行覆盖。您的其余代码将仅使用适配器,因此可以使用普通单元测试进行测试。


当然,当您也具有完全访问权限时,也可以采用第二种方法,但是通常编写测试工具包会更好,因为这类测试倾向于在项目和团队之间以及服务器时进行重复。更改需要一大群人来修复他们的测试,而如果将测试工具包编写为服务器代码的一部分,则只需在一个地方进行更改即可。