引言

在项目中或者研究中,经常需要对系统性能进行测试,今天将对我在研究生期间项目中用到的性能测试的有关东西进行简单总结。

程序运行时间

使用linux 命令time进行运行整个程序

time main_exe

使用在测试程序中打印系统时间的方法

  1. 获取最佳性能
#include <time.h>
#include <sys/time.h>
//
static long get_current_time()
{struct timeval tv;gettimeofday(&tv, NULL);return tv.tv_sec * 1000000 + tv.tv_usec;
}
long perf_test()
{long start = get_current_time();// execute the programlong end = get_current_time();return end - start;
}
void test()
{long totle = 0;perf_test();for(size_t i = 0; i < 10 ;++i)totle += per_test();printf("The execute time: %lfus", (double)totle/10.0);
}

值得注意的是,我们首先运行了一边被测函数,测试后面执行的效果。这样测试的性能比平均好一点。

  1. 调用次数很频繁的功能时间测试可以使用上述方法,但是有时候我们的函数调用次数很少,我们可以在测试程序之间申请很大的空间,将cache都填写满,然后再释放掉的方式进行测试。
void clean_cache()
{const int size = 128*1024*1024; //128Mchar* p;p = (char*)malloc(size);if(p != NULL)free(p);
}

系统性能测试

  1. cpu指标:cpu利用率

cpu瓶颈原因 - 动态web生成频繁 - process再不同kernel之间迁移 - 频繁中断与上下文切换 uptime可以查看cpu负载量 upstat展示多核运行中,user,sys,iowait,irq,soft,idle等信息 free显示linux系统空闲已用和swap的内存 pmap分析ssh进城分析 top展示cpu与内存信息,看到各个进程的CPU使用率和内存使用率

  1. 内存指标

    • 空闲内存
    • swap利用率
    • 缓冲和缓存

2.1 内存瓶颈原因

  • 吃内存的程序mongodb
  • 缓存太多
  • 内存泄露
    • 现在很多编译器都自带内存泄漏检查功能,有的甚至帮你释放内存,如icc -O3 编译选项 * numa架构导致内存利用率低
  1. io设备 io等待 平均队列长度 平均服务:等待+服务 磁盘瓶颈 糟糕的编程方式,如直接写磁盘,而不是写缓存,频繁执行将导致瓶颈
  • iostat查看磁盘信息
  1. 网络指标 接受发送包 接收发送字节

vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况。这个命令是我查看Linux/Unix最喜爱的命令,一个是Linux/Unix都支持,二是相比top,我可以看到整个机器的CPU,内存,IO的使用情况,而不是单单看到各个进程的CPU使用率和内存使用率(使用场景不一样)。

综合系统性能测评工具nmon

使用命令nmon -f -s 2 -c 1800启动nmon 在当前目录中生成:计算机名_日期_时间.nmon文件

使用命令C://Program\ Files/Photoshop7.0/Photoshop.exe运行Photoshop Photoshop软件正常启动,出现Photoshop软件窗口

选择“文件”菜单,选择“打开” 弹出下拉菜单,有“打开”;点击打开出现文件选择窗口 选择一个几MB~十几MB的图片

使用命令ps | grep nmon查看nmon进程并杀死该进程 nmon停止运行

其他工具

vmstat sar工具

另外一波福利:

  1. Linux工具快速教程
  2. 工具进阶
  3. 工具参考篇章

oprofile

opreport可以定义到具体的函数

冒烟测试 & 回归测试

冒烟测试是自由测试的一种。冒烟测试(smoketest)在测试中发现问题,找到了一个Bug,然后开发人员会来修复这个Bug。这时想知道这次修复是否真的解决了程序的Bug,或者是否会对其它模块造成影响,就需要针对此问题进行专门测试,这个过程就被称为SmokeTest。在很多情况下,做SmokeTest是开发人员在试图解决一个问题的时候,造成了其它功能模块一系列的连锁反应,原因可能是只集中考虑了一开始的那个问题,而忽略其它的问题,这就可能引起了新的Bug。SmokeTest优点是节省测试时间,防止build失败。缺点是覆盖率还是比较低。

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是非常有意义的。

总结

实际项目中借助自研和第三方项目,实现快速迭代开发。相应的单元测试和集成测试,性能测试工具都比较完善,有的公司甚至能够实现自动话测试。

Performance Test中时间测试相关推荐

  1. C++ 中的时间测试与空间申请

    C++ 中的时间测试 在各种 oj  平台做题的时候,经常会出现时间要求,即你的算法复杂度一般不能太高,否则会超时. 同时,在CCF考试中,练超时都不会告诉你,考试的时候不会出程序结果,因此,可以自己 ...

  2. 如何在敏捷环境中使用测试指标

    目录 翻译内容 What Is Agile Testing and an Agile Test Plan? 什么是敏捷测试和敏捷测试计划? Agile Testing Metrics 敏捷测试指标 B ...

  3. 测试驱动开发与行为驱动开发中的测试先行方法

    Gil Zilberfeld将在 Agile Practitioners会议上举办小型研讨会,讨论测试先行(test first)方法,测试驱动开发(TDD)和行为驱动开发(BDD)的基础. \\ \ ...

  4. 熔断器熔断时间标准_一种熔断器熔断时间测试电路的制作方法

    本实用新型涉及汽车制造技术领域,尤其涉及一种熔断器熔断时间测试电路. 背景技术: 伴随着日新月异的科技进步,人们对生活质量的追求也越来越高,汽车已经成为人们日常出行必不可少的交通工具,人们对汽车的舒适 ...

  5. delphi 同盘移动文件所用时间测试(文件大小约6,083,545,088 字节)

    delphi 同盘移动文件所用时间测试(文件大小约6,083,545,088 字节) 由于想做个 "delphi桌面图标清理备份与恢复" 所以有必要测试一下各种方法对文件移动占用时 ...

  6. 简单的11步在Laravel中实现测试驱动开发

    测试驱动开发(英语:Test-driven development,缩写为TDD)是一种软件开发过程中的应用方法,由极限编程中倡导,以其倡导先写测试程序,然后编码实现其功能得名. 下文是我在Mediu ...

  7. DDR3初始化时间测试

    1.1 DDR3初始化时间测试 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)DDR3初始化时间测试: 5)结束语. 1.1.2 本节引言 "不积跬步,无以至 ...

  8. 用于.NET环境的时间测试

    用于.NET环境的时间测试 在.Net环境中,我们需要考虑我们的程序所运行的线程及任何时候垃圾回收都可能发生的事实.我们需要在设计我们的计时代码时将这些因素考虑在内. 让我们先来看一下怎样控制垃圾回收 ...

  9. 今日问题:开发在临近发布时“画蛇添足”,测试没有时间测试,该如何处理?

    大家好呀 ,请教大家一个问题哈,你们可以看看你们是否遇到过相似的场景呢 ? 背景 后天就要发布了 ,这时候开发告诉你一件事,在修复BUG的时候,发现了另外一个问题:并且自己直接已经修复了 ,希望你回归 ...

  10. 基于Vue源码中e2e测试实践

    您好,如果喜欢我的文章,可以关注我的公众号「量子前端」,将不定期关注推送前端好文~ 基于Vue源码中e2e测试实践 前言 技术选型&对Vue的参考 Puppeteer测试流程 在Concis中 ...

最新文章

  1. 计算机书籍-Python机器学习算法大全
  2. DWZ(J-UI)selectedToDo操作完成后刷新Tab
  3. 《大型网站技术架构》-读书笔记四:高可用架构
  4. [html] iframe在更改了src之后,不出现后退或者前进按钮怎么解决?
  5. WPF:从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转
  6. 2014全新增强版迅捷PDF转换器介绍
  7. 图书条形码跟ISBN号互相转换的类 续
  8. Android 时区中英文显示对照
  9. ubuntu 下应用 Python 和 SL4A 的 Android 应用程序搭建您自己的android研发环境
  10. 【工程记录】基于松灵Scout mini底盘实现小车自主探索建图
  11. Win10 USB转串口连接Linux主机调试
  12. 机顶盒开发助手Tvbox
  13. 电脑无法升级windows11的解决办法
  14. panic: runtime error: invalid memory address or nil pointer dereference
  15. python 豆瓣源_使用douban源下载python包
  16. exls表格搜索快捷键_excel表格中的快捷键
  17. Android-PickerView系列之源码解析篇(二)
  18. php 全文搜索引擎-讯搜使用
  19. Python汉字转拼音,火车头Python汉字转拼音插件开发
  20. Mybatis解析(一)

热门文章

  1. 从乘客丢钱包的报警处理过程谈职业化和专业化
  2. python中的文字怎么居中_各位大神,wxPython中,怎么让text文本居中显示?
  3. IOS学习 IOS8的虚化效果
  4. win10 添加照片查看器
  5. 【渝粤题库】陕西师范大学 《道德教育案例研究》作业
  6. layui 弹出层 点击遮罩层关闭
  7. 【LVGL】animation动画路径方式介绍
  8. python完全平方数_python判断完全平方数的方法
  9. 视觉跟踪近年来的进展(2010年以前)——Advances in Visual Tracking
  10. Java 计算月份天数