背景(如果不感兴趣,请跳到下面的问题)
我有一个模拟器,它运行在三个状态:
!在标准测试期间,CPU的使用率从的100%下降到了20%的,运行时间比正常时间长了大约30倍(130秒对4.2秒)。
当Callgrind没有发现任何可疑之处时,我的头嗡嗡作响,因为我正处于回到最后一次提交的悬崖上,失去了所有的bug修复程序。
气馁时,我在运行过程中走进服务器房,注意到令人生厌的沙哑声音,后来被证实是由于在/proc/PID/fd中写入Mysql套接字而引起的!事实证明,Mysql代码,在第二阶段的几个层次,是造成问题的。
经验教训
Fix I将引入线程本地存储IOSentinels,并在ReadAllowed()和WriteAllowed()上断言(),以确保第2阶段线程不会执行任何IO操作。
问题
任何人在使用googletest?附加/编写基准测试框架方面都有任何进展。
不幸的是,这次我所有的谷歌测试都通过了。如果我离开一段时间回来,没有注意到运行时间,这将是一个灾难性的承诺,可能更难解决。
如果运行时间超过上一次运行时的2或3倍,我希望googletest失败:最后一部分很棘手,因为对于非常快的运行,系统状态会导致某些事情花费两倍的时间,但仍然可以。但是对于长期的模拟运行/测试,我并不认为运行时会有很大的变化(>50%将是不寻常的)。
我对这里的建议持开放态度,但如果有一个低维护的检查,这将与自动化测试工作,所以这将是显而易见的,如果系统突然变慢,即使所有的输出似乎是好的。
发布于 2016-09-01 16:46:12
关于这一问题的一些最新情况(2016年):
- It does not provide the possibility of specifying running time requirements.
- It is very similar to Google Test. Syntax, etc.
- It provides the benchmarking results to the user or a Continous Integration framework. Also have a look at [MojaveWastelander](https://github.com/MojaveWastelander/hayai)'s fork for active development and MSVC support.
- There are even advanced features such as measuring complexity (big-O).
发布于 2012-02-08 17:59:06
就像这样简单吗?
const clock_t t0 = clock(); // or gettimeofday or whatever
int res = yourFunction();
const clock_t t1 = clock();
const double elapsedSec = (t1 - t0) / (double)CLOCKS_PER_SEC;
EXPECT_EQ(EXPECTED, res);
EXPECT_GT(10.0, elapsedSec);在这里,您需要根据任务手动更改10.0。
当然,您可以通过这样的方法做进一步的工作:
double prev = -1;
{
ifstream ifs("/var/tmp/time_record.txt");
ifs >> prev;
}
if (prev < 0) prev = DEFAULT_VALUE;
// ...
EXPECT_GT(2 * prev, elapsedSec);
{
ofstream ofs("/var/tmp/time_record.txt");
ofs << elapsedSec << endl;
}但我不知道这种额外的复杂性是否真的有道理。
发布于 2013-01-22 09:05:33
默认情况下,Google测试框架提出了一种经过时间的度量。它由一个环境变量GTEST_PRINT_TIME控制。此变量默认为1。
那么,为什么不使用Google测试平台的这一特性来监视经过的时间呢?
这是一个Google测试中经过时间变量的word。
https://stackoverflow.com/questions/8565666
复制相似问题