测试技术培训:如何测试磁盘写的速度

经常会有一些测试任务需要我们用自动化的手段完成,这样就要求开发一些程序出来完成测试,这样的工作内容是测试开发工程师的典型工作,下面在poptest的培训过程中我们提出一个问题如何测试磁盘写的速度?  下面给大家分享下:

如何测试写磁盘的速度?

1、问题:测试写磁盘的速度? 
1)以多大的Buffer写入磁盘会速度更快? 
2)磁盘的写速度是否能达到磁盘阵列厂商标称的最大值?

2、基于以上两个问题,思考如何测试写磁盘速度? 
问题近一步细化: 
1)速度=写入大小/写入时间间隔,即可以重点内容测试一定时间间隔内写入数据的大小。 
2)每次写入的时候设定不同的大小:512k,1M,2M,5M,10M,20M,50M,100M,200M,300M….. 
循环写入100-10次,看哪个大小的Buffer写入的最快。

3、遇到的知识点: 
1)栈内存最大可开辟空间的大小,Vs2010为1M-2M,实测中大了会有错误提示。 
2)堆内存最大可开辟空间的大小,由内存和虚拟内存决定,32位系统最大为2GB,但和当前系统运行 
其他程序情况和虚拟内存大小有关。实测发现32位win7系统300M左右堆内存连续写10次磁盘程序就会崩溃。

4、相关知识点教科书上解释: 
栈:在Windows下,栈是向低地址扩展数据结构,是一块连续内存区域。这句话意思是栈顶地址和栈最大容量是系统预先规定好, 
在WINDOWS下,栈大小是2M(也有说是1M,总之是一个编译时就确定常数),如果申请空间超过栈剩余空间时,将提示overflow。因此,能从栈获得空间较小。 
堆:堆是向高地址扩展数据结构,是不连续内存区域。这是由于系统是用链表来存储空闲内存地址,自然是不连续,而链表遍历方向是由低地址向高地址。 
堆大小受限于计算机系统中有效虚拟内存。由此可见,堆获得空间比较灵活,也比较大。

5、程序实现如下(非常简单、不再解释):

// writeFileDemo.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <iostream>

#include <fstream>

using namespace std;

#include <windows.h>

#include <WinBase.h>

#include <ctime>

//目标写入文件

const char* g_psOutFile = "D:\\test_file\\1.txt";

//一次写入的Buffer大小

const long WRITE_BUFF_SIZE = 10*1024*1024;    //300MB字节

//写入次数

#define MAX_WRITE_CNT   5

//buffer每个字节初始化为'a'字符

void initBuf(char* pszBuf, int iCnt)

{

for(int i = 0; i < iCnt; ++i)

{

pszBuf[i] = 97;

}

}

//循环写入文件

void writeFileFun(char* szBuf)

{

ofstream ofout(g_psOutFile);

int i = 0;

while(i < MAX_WRITE_CNT)

{

ofout << szBuf << endl;

++i;

}

}

//测试写磁盘速度

void writeFileTestFun()

{

//堆内存申请,显然栈内存不合适

char* szTenMBBuf = (char*)malloc(WRITE_BUFF_SIZE);

(void)initBuf(szTenMBBuf, WRITE_BUFF_SIZE);

size_t nBeginTicks = GetTickCount();

cout << "BeginTime = " << nBeginTicks << endl;

(void)writeFileFun(szTenMBBuf);

size_t nEndTicks = GetTickCount();

cout << "EndTime = " << nEndTicks << endl;

size_t nSpan = nEndTicks - nBeginTicks;

cout << "nSpanTime = " << nSpan << "ms" << endl; //ms

float nTotalBytes = WRITE_BUFF_SIZE*MAX_WRITE_CNT;  //总写入字节数

float nTotalTimes = (float)(nSpan) / 1000.0f;       //总耗费时间,单位s

cout << "nTotalWriteBytes = " << nTotalBytes << endl;

cout << "nTotalTimes = " << nTotalTimes << endl;

float fSpeed =  nTotalBytes / nTotalTimes;

cout << "Speed = " << fSpeed << "Byte/s" << endl;   //写入速度 Byte/s

cout << "Speed = " << fSpeed / 1024.0f / 1024.0f << "MB/s" << endl; //写入速度 MByte/s

if (NULL != szTenMBBuf)

{

free(szTenMBBuf);

szTenMBBuf = NULL;

}

}

int _tmain(int argc, _TCHAR* argv[])

{

(void)writeFileTestFun();

return 0;

}

转载于:https://www.cnblogs.com/poptest/p/4981433.html

测试技术培训:如何测试磁盘写的速度相关推荐

  1. sd卡 写卡阻塞_Sony a7r4写卡速度测试

    测试方法 从按下快门开始计时,直到相机屏幕上缓存清空为止,得到整体写卡时间.然后取卡在电脑上查看文件数和总体大小. 写卡速度=总文件大小/写卡时间 1.存储卡Sony Tough(299M/s) 拷照 ...

  2. 测试硬盘读写速度软件_Linux 测试 IO 性能(磁盘读写速度)

    之前一直知道用dd(device to device)命令可以简单测试磁盘的IO读写速度,但没有深究. 但这次做性能测试的关系,需要得到一个相对精确的值(之前的测试吃过这方面的亏,插个题外话,性能测试 ...

  3. Linux 如何测试 IO 性能(磁盘读写速度)

    这几天做MySQL性能测试,偌大一个公司,找几台性能测试机器都很纠结,终于协调到两台,IO的性能如何还不知道. 数据库属于IO密集型的应用,所以还是先评估下Server的IO性能,看看是否能和线上的机 ...

  4. Linux 测试 IO 性能(磁盘读写速度)

    Linux 测试 IO 性能(磁盘读写速度) 这几天做MySQL性能测试,偌大一个公司,找几台性能测试机器都很纠结,终于协调到两台,IO的性能如何还不知道. 数据库属于IO密集型的应用,所以还是先评估 ...

  5. linux磁盘fio压力测试,fio命令 – 对磁盘进行压力测试和验证

    fio是测试IOPS的非常好的工具,用来对磁盘进行压力测试和验证.磁盘IO是检查磁盘性能的重要指标,可以按照负载情况分成照顺序读写,随机读写两大类.FIO是一个可以产生很多线程或进程并执行用户指定的特 ...

  6. usb3.0速度测试软件,底层测试:USB3.0接口下速度提升10MB/S_移动存储评测-中关村在线...

    介绍完产品外观,下面我们一起来看看这款产品的速度表现如何? ● 底层测试:HD Tach HD Tach读速度测试不依赖于文件系统,曲线成绩基本相当于硬盘内部传输速率测试.体现的是很理想化的硬盘速度, ...

  7. eos测试规格_希望您的测试更有效? 这样写您的规格。

    eos测试规格 by Edd Yerburgh 埃德·耶堡(Edd Yerburgh) 希望您的测试更有效? 这样写您的规格. (Want your tests to be more effectiv ...

  8. 千万级测试String、StringBuffer和StringBuilder的速度

    面试是经常被问到String.StringBuilder和StringBuffer三者的速度有什么区别,经过测试后,这三者的执行速度关系是:StringBuilder > StringBuffe ...

  9. 大专毕业,从6个月开发转入测试岗位的一些感悟——写在测试岗位3年之际

    时光飞逝,我从前端开发岗位转入测试岗位已经三年了,这期间从迷茫到熟悉,到强化,到熟练,到总结,感受还是很深的! 三年前的某一个晚上,我正准备下班回家,我们的项目经理把我叫到办公司和我谈话,谈了很多,具 ...

最新文章

  1. 机器学习笔记06—术语解释
  2. mvvm command的使用案例
  3. Spring RestTemplate中文乱码解决方案
  4. 文件上传下载小结一(转载)
  5. CentOS7安装Docker详细教程
  6. 软件质量保证与测试——Ad hoc Test
  7. Go gin内嵌静态资源go-bindata的安装及使用(GVA)
  8. 开关电源PCB排版基本要点概述
  9. 在另一台服务器上还原被误删的 MySQL 数据
  10. [转载] 夯实Java基础系列8:深入理解Java内部类及其实现原理
  11. 计算机如何共享桌面,怎么共享电脑屏幕?
  12. zedgraph怎么画曲线图_ZedGraph如何动态的加载曲线
  13. FAT32文件操作系统
  14. max3232ese_MAX3232CSE使用指南,MAX3232CES和MAX3232ESE有什么区别?
  15. 区块链开发团队,公链开发才是主战场
  16. 掌握这三种方法!Word、PPT、Excel、JPG、PDF之间任你转换
  17. revo uninstaller pro 长期试用的正确姿势!!
  18. 计算机网络 - NB-IOT/LoRa/Zigbee 无线组网方案对比
  19. Python语法之精妙的十个知识点(装B语法)
  20. html中蝴蝶飞飞怎么制作,【幼儿园折纸蝴蝶教案】手工折纸蝴蝶教案_幼儿园手工蝴蝶教案_亲亲宝贝网...

热门文章

  1. 网络资产管理系统_网络版固定资产管理系统具备哪些优势?
  2. iphone7防水_iPhone11系列防水测试,其结果令人意外
  3. 射频测试系统软件,新的~~蓝牙5.0射频测试系统
  4. python重命名csv文件_Python根据文件中选定的字符复制和重命名许多小csv文件
  5. 数据库和python的结合_redis数据库及与python交互用法简单示例
  6. mysql 指令没有用_Mysql指令
  7. 飞线5根连接图_手机主板焊盘掉点飞线维修方法
  8. python基本数据类型float_Python基本数据类型
  9. java camel swagger,Swagger将下划线转换为camelcase
  10. pythonpil库过滤图像contour_Python之PIL库的运用、GIF处理h