所以我正在开发两个软件:客户端和服务器。它们通过基于TCP的协议相互通信。
目标是进行一些自动化测试以验证各种场景。一些例子:
1)客户端向服务器发送请求,服务器响应。测试应检查响应是否正确。
2)客户端向服务器发送请求,但服务器没有响应。客户端应在5.0秒后超时。测试应检查客户端是否确实在5.0±0.1秒后超时。
3)服务器向连接的客户端发送PING命令,客户端不响应。服务器应在20秒后断开客户端。测试应在20±0.1秒后检查客户端是否确实断开连接。
所以要清楚,我已经编写了这些测试,并且它们工作正常。问题是,随着测试次数的增加,运行完整测试套件所需的时间也会增加。例如,仅运行测试nr 2和3已经需要25秒。
问题:有没有办法以某种方式加速这些测试?
我正在考虑在某种“特殊”容器/沙箱/任何具有增加的时钟速度的情况下运行进程,以便调用poll()返回例如指定超时的1/100。
是否有一些进行此类测试的一般方法?我很想听到其他的建议,因为我的谷歌技能达到了一个死胡同。
答案 0 :(得分:0)
恕我直言,尝试使用基于更快poll()
速率的技术加速这些测试只是要求麻烦,主要是因为网络环境中的poll()
同时服务于固定(网络协议规定的时间)以及可变(实际数据包处理)时序。你需要某种选择性的"时间扭曲"能力,但这更像是一种模拟测试。这并不容易,我不确定它是否符合您的测试目的。
恕我直言,一个更简单,更具可扩展性的解决方案是重新设计您的测试套件,使其可以分成多个测试或可以并行执行的测试组。
对于你提到的套件,例如,你可以进行测试#1和#2,它们一起花费约5秒,与测试#3并行执行,花费约20秒,最大执行时间为~20秒,而不是〜25秒,连续执行所有测试。
与其他测试并行运行每个单独的测试可能没有多大意义,特别是如果测试持续时间小于设置测试基础架构所需的时间。但是,在测试组内连续执行多个测试(其本身与其他测试组并行执行)可以很好地扩展,并且无论套件中有多少测试,都可以找到整体套件持续时间和所用资源量之间的适当折衷。