首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用googletest做基准测试?

用googletest做基准测试?
EN

Stack Overflow用户
提问于 2011-12-19 18:25:26
回答 4查看 16.4K关注 0票数 17

背景(如果不感兴趣,请跳到下面的问题)

我有一个模拟器,它运行在三个状态:

  1. 单线程启动(I/O确定)
  2. 多线程内存内CPU绑定仿真阶段(I/O不确定)
  3. 后模拟,后连接单线程级(I/O确定)

在标准测试期间,CPU的使用率从的100%下降到了20%的,运行时间比正常时间长了大约30倍(130秒对4.2秒)。

Callgrind没有发现任何可疑之处时,我的头嗡嗡作响,因为我正处于回到最后一次提交的悬崖上,失去了所有的bug修复程序。

气馁时,我在运行过程中走进服务器房,注意到令人生厌的沙哑声音,后来被证实是由于在/proc/PID/fd中写入Mysql套接字而引起的!事实证明,Mysql代码,在第二阶段的几个层次,是造成问题的。

经验教训

  1. 意外I/O对实时应用程序是致命的。
  2. 单元测试是不够的:我也需要基准测试。

Fix I将引入线程本地存储IOSentinels,并在ReadAllowed()和WriteAllowed()上断言(),以确保第2阶段线程不会执行任何IO操作。

问题

任何人在使用googletest?附加/编写基准测试框架方面都有任何进展。

不幸的是,这次我所有的谷歌测试都通过了。如果我离开一段时间回来,没有注意到运行时间,这将是一个灾难性的承诺,可能更难解决。

如果运行时间超过上一次运行时的2或3倍,我希望googletest失败:最后一部分很棘手,因为对于非常快的运行,系统状态会导致某些事情花费两倍的时间,但仍然可以。但是对于长期的模拟运行/测试,我并不认为运行时会有很大的变化(>50%将是不寻常的)。

我对这里的建议持开放态度,但如果有一个低维护的检查,这将与自动化测试工作,所以这将是显而易见的,如果系统突然变慢,即使所有的输出似乎是好的。

EN

回答 4

Stack Overflow用户

发布于 2016-09-01 16:46:12

关于这一问题的一些最新情况(2016年):

  1. 这里是尼克·布鲁恩关于他的海井基准框架的一个很好的博客。(2012年)
代码语言:javascript
复制
- 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.

  1. 谷歌在2014年上发布了2014年。这提供了类似的行为,而上面的Hayai。据我所知,定义需求是不可能的。同样,语法是受GoogleTest启发的。
代码语言:javascript
复制
- There are even advanced features such as measuring complexity (big-O).

  1. GoogleTest将此作为Github上的一个开放特性。有一个基本的实现,但它还不是GoogleTest的一部分。
票数 4
EN

Stack Overflow用户

发布于 2012-02-08 17:59:06

就像这样简单吗?

代码语言:javascript
复制
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

当然,您可以通过这样的方法做进一步的工作:

代码语言:javascript
复制
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;
}

但我不知道这种额外的复杂性是否真的有道理。

票数 3
EN

Stack Overflow用户

发布于 2013-01-22 09:05:33

默认情况下,Google测试框架提出了一种经过时间的度量。它由一个环境变量GTEST_PRINT_TIME控制。此变量默认为1

那么,为什么不使用Google测试平台的这一特性来监视经过的时间呢?

这是一个Google测试中经过时间变量的word

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8565666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档