你可能听说过单元测试是什么。或许,你甚至还曾经写过一两个单元测试的例子。好极了!
如果你曾经参与过有一套几百,几千或者几万单元测试用例的项目,那你一定感受到过等待测试执行完毕的痛苦。
当然,我没有想在这里讨论真正的单元测试是什么,怎样写,怎样不写,或者任何类似的东西。我想介绍一个测试工具,你可以在做单元测试,集成测试,验收测试,端到端测试,黑盒测试,白盒测试,自动化测试,半自动化测试,高级/低级,或者常说的测试套件的时候,来提升你的测试效率。
你可以把它应用到需要访问数据库的任何类型的测试里,甚至你需要数据库协助但又不想耗时太久的任何场景里。
介绍:tmpfs
你可以google更多关于tmpfs的介绍,但是从本质上来讲,它是一个内存文件系统。创建它很简单:先创建一个空的目录,然后把它作为mount命令的挂载点。
然后呢?
这和我们的测试有什么关系呢?如果你的测试需要访问数据库,你的数据库就会在物理磁盘的某个地方写一些东西--我们都知道这些东西的速度。把你的‘我的文件’放到适当的位置上面,然后配置你的数据库服务器去把数据文件写到那个文件里面,你就会在那个位置获得这些数据。任何曾经发送到你的数据库的数据就会使用RAM,而不是磁盘。
对于MySql来说,只需要配置datatir变量然后重启数据库服务器。当备份的时候,对‘我的文件’文件夹执行ls命令然后你会看到那个文件夹里出现一堆mysql文件。
就是这样!除了配置,你所需要做的就是获得你用数据库完全写入内存的测试。大小可能不尽相同,但是我的团队在每次持续集成的时候大概能提高30%-40%的效率--我真的觉得这个太棒了。
还能用这个做什么呢?
我们用它去加快一个执行周期较长的测试套件在每个运行的数据库上面的工作,但是这里还有一些tmpfs潜在的应用场景:
· 临时文件的开发/交付准备服务器(比如日志和缓存)
· 长时间运行的中间文件,数据运算的过程
· 进程间的通信