加速测试依赖耗时系统调用的程序的方法

时间:2018-01-06 14:43:02

标签: linux unit-testing testing continuous-integration containers

所以我正在开发两个软件:客户端和服务器。它们通过基于TCP的协议相互通信。

目标是进行一些自动化测试以验证各种场景。一些例子:

1)客户端向服务器发送请求,服务器响应。测试应检查响应是否正确。

2)客户端向服务器发送请求,但服务器没有响应。客户端应在5.0秒后超时。测试应检查客户端是否确实在5.0±0.1秒后超时。

3)服务器向连接的客户端发送PING命令,客户端不响应。服务器应在20秒后断开客户端。测试应在20±0.1秒后检查客户端是否确实断开连接。

所以要清楚,我已经编写了这些测试,并且它们工作正常。问题是,随着测试次数的增加,运行完整测试套件所需的时间也会增加。例如,仅运行测试nr 2和3已经需要25秒。

问题:有没有办法以某种方式加速这些测试?

我正在考虑在某种“特殊”容器/沙箱/任何具有增加的时钟速度的情况下运行进程,以便调用poll()返回例如指定超时的1/100。

是否有一些进行此类测试的一般方法?我很想听到其他的建议,因为我的谷歌技能达到了一个死胡同。

1 个答案:

答案 0 :(得分:0)

恕我直言,尝试使用基于更快poll()速率的技术加速这些测试只是要求麻烦,主要是因为网络环境中的poll()同时服务于固定(网络协议规定的时间)以及可变(实际数据包处理)时序。你需要某种选择性的"时间扭曲"能力,但这更像是一种模拟测试。这并不容易,我不确定它是否符合您的测试目的。

恕我直言,一个更简单,更具可扩展性的解决方案是重新设计您的测试套件,使其可以分成多个测试或可以并行执行的测试组。

对于你提到的套件,例如,你可以进行测试#1和#2,它们一起花费约5秒,与测试#3并行执行,花费约20秒,最大执行时间为~20秒,而不是〜25秒,连续执行所有测试。

与其他测试并行运行每个单独的测试可能没有多大意义,特别是如果测试持续时间小于设置测试基础架构所需的时间。但是,在测试组内连续执行多个测试(其本身与其他测试组并行执行)可以很好地扩展,并且无论套件中有多少测试,都可以找到整体套件持续时间和所用资源量之间的适当折衷。