问题
如何获得测试运行的总时间
设计
通过DateTime.Now属性记录测试开始运行的时间,以及测试结束的时间,然后用一个TimeSpan对象计算本次运行的总时间。
方案
DateTime startTime = DateTime.Now; while ((line = sr.ReadLine()) != null) { //运行测试 } DateTime endTime = DateTime.Now; TimeSpan.elapsedTime = endTime - startTime; Console.WriteLine("Elapsed time = " + elapsedTime.ToString()); |
注解
调用DateTime.Now属性返回测试套件所在机器上的当前系统时间。在测试用例被运行之前记下起始时间,并且在其结束以后记下结束时间。要得到程序的运行时间,只需要找到起始时间与结束时间的差值。DateTime对象有一个重载过的减号运算(“-”),它返回一个TimeSpan对象,可以把DateTime值想象成一个瞬时的时间值,把TimeSpan值想象成持续的一个时间段。
把记录开始和结束时间的语句放在什么地方,要格外注意。原则上要尽可能地让这两个语句捕捉到用于执行测试用例的时间,但是尽量不要把测试套件自身一些可变化的运行时间计算在内。
记录并存储以及显示每天测试运行的时间,其上的是为了能够检测出API方法在性能上发生的重大变化。如果某一天测试运行的时间有了大幅的增加,那就需要研究一下。如果发现是基本个待测方法的代码改变而引起的性能下降,就可以马上找出问题所在,并且决定改变代码还是容忍这种性能上的下降。如果性能下降不是由代码改变引起的那么可能就是测试套件出问题了(比如说,有个流氓程序耗尽CPU)。测试运行时间的变化也有可能是由测试用例数据文件中测试用例个数的增加(或减少)而引起的。
自动化测试的一个好处是,可以快速运行成千上万个测试用例。如果要处理的测试用例结果非常之多,可能会希望只记录总结的信息(通过的用例个数和失败的用例个数),并且只记录失败用例的详细信息。在类似于这种情况下,计算并记录测试运行的时间就显得尤为重要了,因为它可以提示出一些测试套件所存在的问题,而这些问题在没有详细的测试结果可供检查的情况下会很容易被隐藏掉。