学习交流

浅论自动化测试及其Docker的使用

2018-01-09 17:21:51 | 来源:中培企业IT培训网

随着软件测试的快速发展,自动化测试已经成为当前的主流技术。中培《软件自动化测试与持续集成最佳实践》专家刘老师指出,从使用的基本技术来说,自动化集成测试和单元测试在很多方面都很相似。你可以使用相同的测试运行器和构建系统的支持。自动化集成测试和单元测试的主要区别在于使用了相对较少的mocking。

当一个单元测试简单地模拟从后端数据库返回的数据时,集成测试则会使用一个真实的数据库来测试。数据库是一个你需要的测试资源类型以及能暴露问题的极好例子。

自动化集成测试可能会很棘手,在选择时需要小心。

假如你在测试一个只读的中间件适配器,例如数据库的SOAP适配器,可能需要使用产品数据库的拷贝来做测试。数据库的内容需要可预测和可重复,否则很难去编写和运行测试。

这里的附加价值在于我们在使用产品数据的拷贝。它可能包含了从头开始创建测试数据时很难预测到的数据。这和人工测试的需求一样。使用自动化集成测试,你需要更多的自动化而不是人工测试。对于数据库来说,这并不是很复杂。自动化的数据库备份和恢复是众所周知的操作。

在构建自动化测试实验台时,使用Docker会非常方便。它在功能性的级别上添加了一些单元测试的特性。如果你的应用由集群中的几个服务器组件构成,你可以用一些容器来模拟整个集群。Docker为集群提供了虚拟网络,在网络层面上让集群中的容器交互。

Docker可以很容易将容器恢复到一个已知的状态。如果你在Docker容器中运行测试数据库,你可以很轻松地将数据库恢复到测试开发之前的相同状态。这和单元测试中After方法恢复环境类似。

持续集成服务器Jenkins已经支持启动和停止容器,在使用Docker做自动化测试时会比较有用。

使用Docker Compose来运行你需要的容器也是一个有用的选择。刘老师指出,Docker还很年轻,使用Docker做测试自动化有时候需要编写并不优雅的胶水代码(glue code)。

举个简单的例子,启动可以交互的一个数据库容器和一个应用服务器容器。启动容器的基本过程比较简单,并且可以通过shell脚本或者Docker Compose来完成。但是,由于我们要在已经启动的应用服务器上运行测试,如何才能知道它已经正常启动了?在WildFly容器的场景下,除了监控输出日志中特定字符串的出现或者轮询web socket之外,没有什么明显方式判断容器的运行状态。在任何情况下,这些hack的方式都不甚优雅,而且实现起来比较耗时,尽管这种方式具有一定的实用价值!

想了解更多IT资讯,请访问中培伟业官网:中培伟业