起步于系统工程师,迈进入测试工程师,从起初的C/S系统到互联网时代的B/S系统,从事过电信增值业务、软交换、烟草OA、公安技侦和电子商务等行业的软件测试开发和管理多年,愿与大家共同分享共同交流,关注软件项目管理、测试团队管理、软件流程控制和软件性能测试及自动化测试技术。互联网时代,技术推动进步,欢迎人才推荐:jonas.wangl@alibaba-inc.com

发布新日志

  • 并发用户数的计算方法

    2009-03-30 23:12:35

    系统用户数:系统额定的用户数量,如一个OA系统,可能使用该系统的用户总数是2000个,那么这个数量,就是系统用户数

    同时在线用户数:在一定的时间范围内,最大的同时在线用户数量

    平均并发用户数的计算:

    C=nL /T

    其中C是平均的并发用户数,n是平均每天访问用户数,L是一天内用户从登录到退出的平均时间(操作平均时间),T是考察时间长度(一天内多长时间有用户使用系统)

    并发用户数峰值计算:

    C^约等于C + 3*根号C  

    其中C^是并发用户峰值,C是平均并发用户数,该公式遵循泊松分布理论

  • LR中输出当前系统时间的脚本

    2009-03-30 22:36:01

    LR提供了char *ctime(const time_t *time)函数,调用参数为一个long型的整数指针,用于存放返回时间的数值。调用的脚本和返回的代码如下: typedef long time_t; Action() { time_t t; lr_message("Time in seconds since 1/1/70: %ld\n",time(& t)); lr_message("System time and date: %s",ctime(&t)); } 输出结果为: Time in seconds since 1/1/70:1185329968 System time and date:Mon MAR 30 22:35:30 2009
  • LR录制脚本时出现乱码的处理办法

    2009-03-30 22:25:46

    我们在用LR录制web页面http请求脚本时,会生成脚本中存在乱码,一般是LR的参数没有设置正确,下面分享下设置步骤。

    录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced高级标签,先勾选‘Support charse’,然后再选中支持UTF-8。再次录制脚本时,就不会出现中文乱码问题了。你不妨试试看,^_^

  • LR关于ODBC测试的一点知识

    2009-02-12 12:47:33

    关于开发数据库Vuser脚本  
    1、录制与服务器进行通信得数据库应用程序时,Vugen将生成数据库Vuser脚本。VuGen支持下列数据库类型:CtLib/DbLib/Informix/Oracle/ODBC和DB2-CLI;录制出来得脚本中包含描述数据库活动得LRD函数,每个LRD函数均以lrd为前缀;
      
    2、数据库Vuser能够:
      连接到数据库服务器
      提交SQL查询
      检索并处理信息
      断开与服务器得连接
      
    3、自动事务:可以指示VuGen把每个lrd_exec和lrd_fetch函数标记为事务;
      脚本选项:指示VuGen在录制得脚本中自动生成注释;
      思考时间:Vugen自动录制操作者得思考时间。
      
    4、函数顺序:(以Oracle数据库会话过程为例)
      lrd_init            初始化环境
      lrd_open_connection    连接到数据库服务器
      lrd_open_curosr        打开数据库光标
      lrd_stmt            将SQL语句与光标关联
      lrd_bind_col        将主机变量绑定到列
      lrd_exec            执行SQL语句
      lrd_fetch           提取结果集中得下一条记录
      lrd_commit          提交数据库事务
      lrd_close_cursor    关闭光标
      lrd_close_connection     断开与数据库服务器得连接
      lrd_end                  清理环境
      
    5、关联函数:
      lrd_save_value        将表单元格得值保存到参数中;该函数置于提取数据之前,将后续lrd_fetch检索到得值分配给指定参数
      lrd_save_col 将占位符描述符值保存到参数中;该函数与设置输出占位符得数据库函数(例如Oracle得某些存储过程) 配合使用
      lrd_sav_ret_param     将返回参数得值保存到参数中(仅适用于CtLib),该函数主要与存储在DbLib中的、生成返回值的数据库过程配合使用。
      注意:如果保存的值无效或为NULL(不返回行),则Vugen将不应用关联。
      lrd_ora8_save_col     将上一个行ID保存到参数中(Oracle)
      注意:如果要关联Lrd_stmt函数中的值,则不支持下列数据类型:日期、时间、和二进制(RAW/VARRAW)
  • 度量趋势Y轴的计算公式

    2008-11-16 16:35:49

    新Y值=(以前的Y值-以前值的平均值)/以前值的STD
    可以归一化除网页细分图的所有折线图。
    其它方式可能也能可到这个值。
  • 添加计数器时最好输入全名

    2008-11-12 12:58:42

    添加计数器时最好全名,如lauralu.gtmg.cn.不要只写成lauralu或localhost 有时监视IIS服务时会监视不到webservice的计数。
  • runtime setting的线程和进程设定区别

    2008-11-10 12:42:07

    (1)选择Run Vuser as a thread,则总是只有一个mmdrv.exe在运行

    (2)选择Run Vuser as a process,则在Controller运行时,每个Vuser会开启一个进程,你可以打开自己的任务管理器,就会看到如设定5个Vuser就会开启5个mmdrv.exe

  • lr函数中使用变量的问题处理办法

    2008-11-10 12:35:12

    问题背景:
    在action中有一个提交函数:web_submit_data(){
    ....
    ITEMDATA;
    "Name=id","Value=100",ENDITEM,
    LAST;
    }
    想要将“110”用变量代替,不是参数化;
    脚本如下:
    action()
    {
    int i;
    i=110;
    web_submit_data(){
    ....
    ITEMDATA;
    "Name=id","Value={i}",ENDITEM,
    LAST;
    }
    
    return 0;
    }
    执行脚本,但是报错,变量并没有替换为110;--这个错误的写法  
    
    int i=110;
            char number[10];
            char mystr[1024];
            char *strval = "Value=";
            itoa(i,number,10);
            strcat(strcat(mystr,strval),number);
            lr_output_message("%s",mystr);
    
    最后用mystr替换掉"Value={i}"即可  --这个是正确的写法
    这样我们就可以解决了一个参数变量的问题
     
    
  • 负载生成器如何访问脚本

    2008-11-04 19:46:24

       运行方案时,默认情况下,脚本会复制到Vuser组计算机的临时目录中。
    这样,Vuser组负载生成器便可以从本地而不是通过网络访问脚本。
    当然你也可指示Controller将脚本存储在共享网络驱动器上。
  • LR算当前时间(整理)

    2008-11-04 09:31:49

    自己在LR中调试过,代码如下:
    Action()
    {
    typedef long time_t; 
    time_t t; 
    
         /* Get system time and display as number and string */ 
    
         lr_message("Time in seconds since 1/1/70: %ld\n", time(&t)); 
    
         lr_message("Formatted time and date: %s", ctime(&t)); 
    
    return 0;
    }
  • LR监控计数器整理(六)

    2008-11-04 09:29:19

    SQLServer性能计数器:
    Access Methods(访问方法) 用于监视访问数据库中的逻辑页的方法。
    . Full Scans/sec(全表扫描/秒) 每秒不受限的完全扫描数。可以是基本表扫描或全索引扫描。如果这个计数器显示的值比1或2高,应该分析你的查询以确定是否确实需要全表扫描,以及S Q L查询是否可以被优化。
    . Page splits/sec(页分割/秒)由于数据更新操作引起的每秒页分割的数量。
    Buffer Manager(缓冲器管理器):监视 Microsoft? SQL Server? 如何使用: 内存存储数据页、内部数据结构和过程高速缓存;计数器在 SQL Server 从磁盘读取数据库页和将数据库页写入磁盘时监视物理 I/O。 监视 SQL Server 所使用的内存和计数器有助于确定: 是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这样,SQL Server 必须从磁盘检索数据。 是否可通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构来提高查询性能。


        SQL Server 需要从磁盘读取数据的频率。与其它操作相比,例如内存访问,物理 I/O 会耗费大量时间。尽可能减少物理 I/O 可以提高查询性能。
    .Page Reads/sec:每秒发出的物理数据库页读取数。这一统计信息显示的是在所有数据库间的物理页读取总数。由于物理 I/O 的开销大,可以通过使用更大的数据高速缓存、智能索引、更高效的查询或者改变数据库设计等方法,使开销减到最小。
    .Page Writes/sec (.写的页/秒) 每秒执行的物理数据库写的页数。
    .Buffer Cache Hit Ratio. 在“缓冲池”(Buffer Cache/Buffer Pool)中没有被读过的页占整个缓冲池中所有页的比率。可在高速缓存中找到而不需要从磁盘中读取的页的百分比。这一比率是高速缓存命中总数除以自 SQL Server 实例启动后对高速缓存的查找总数。经过很长时间后,这一比率的变化很小。由于从高速缓存中读数据比从磁盘中读数据的开销要小得多,一般希望这一数值高一些。通常,可以通过增加 SQL Server 可用的内存数量来提高高速缓存命中率。计数器值依应用程序而定,但比率最好为90% 或更高。增加内存直到这一数值持续高于90%,表示90% 以上的数据请求可以从数据缓冲区中获得所需数据。
    . Lazy Writes/sec(惰性写/秒)惰性写进程每秒写的缓冲区的数量。值最好为0。
    Cache Manager(高速缓存管理器) 对象提供计数器,用于监视 Microsoft? SQL Server? 如何使用内存存储对象,如存储过程、特殊和准备好的 Transact-SQL 语句以及触发器。
    . Cache Hit Ratio(高速缓存命中率,所有Cache”的命中率。在SQL Server中,Cache可以包括Log Cache,Buffer Cache以及Procedure Cache,是一个总体的比率。) 高速缓存命中次数和查找次数的比率。对于查看SQL Server高速缓存对于你的系统如何有效,这是一个非常好的计数器。如果这个值很低,持续低于80%,就需要增加更多的内存。
    Latches(闩) 用于监视称为闩锁的内部 SQL Server 资源锁。监视闩锁以明确用户活动和资源使用情况,有助于查明性能瓶颈。
    . Average Latch Wait Ti m e ( m s ) (平均闩等待时间(毫秒)) 一个SQL Server线程必须等待一个闩的平均时间,以毫秒为单位。如果这个值很高,你可能正经历严重的竞争问题。
    . Latch Waits/sec (闩等待/秒) 在闩上每秒的等待数量。如果这个值很高,表明你正经历对资源的大量竞争。
    Locks(锁) 提供有关个别资源类型上的 SQL Server 锁的信息。锁加在 SQL Server 资源上(如在一个事务中进行的行读取或修改),以防止多个事务并发使用资源。例如,如果一个排它 (X) 锁被一个事务加在某一表的某一行上,在这个锁被释放前,其它事务都不可以修改这一行。尽可能少使用锁可提高并发性,从而改善性能。可以同时监视 Locks 对象的多个实例,每个实例代表一个资源类型上的一个锁。
    . Number of Deadlocks/sec(死锁的数量/秒) 导致死锁的锁请求的数量
    . Average Wait Time(ms) (平均等待时间(毫秒)) 线程等待某种类型的锁的平均等待时间
    . Lock Requests/sec(锁请求/秒) 每秒钟某种类型的锁请求的数量。
        Memory manager:用于监视总体的服务器内存使用情况,以估计用户活动和资源使用,有助于查明性能瓶颈。监视 SQL Server 实例所使用的内存有助于确定:
       是否由于缺少可用物理内存存储高速缓存中经常访问的数据而导致瓶颈存在。如果是这样,SQL Server 必须从磁盘检索数据。
       是否可以通过添加更多内存或使更多内存可用于数据高速缓存或 SQL Server 内部结构来提高查询性能。
    Lock blocks:服务器上锁定块的数量,锁是在页、行或者表这样的资源上。不希望看到一个增长的值。
    Total server memory:sql server服务器当前正在使用的动态内存总量.

  • LR监控计数器整理(五)

    2008-11-04 09:23:42

    Processor

    监视“处理器”和“系统”对象计数器可以提供关于处理器使用的有价值的信息,帮助您决定是否存在瓶颈。


    %Processor Time:如果该值持续超过95%,表明瓶颈是CPU。可以考虑增加一个处理器或换一个更快的处理器。
    %User Time:表示耗费CPU的数据库操作,如排序,执行aggregate functions等。如果该值很高,可考虑增加索引,尽量使用简单的表联接,水平分割大表格等方法来降低该值。
    %Privileged Time:(CPU内核时间)是在特权模式下处理线程执行代码所花时间的百分比。如果该参数值和"Physical Disk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统。另外设置Tempdb in RAM,减低"max async IO","max lazy writer IO"等措施都会降低该值。
    此外,跟踪计算机的服务器工作队列当前长度的 Server Work Queues\ Queue Length 计数器会显示出处理器瓶颈。队列长度持续大于 4 则表示可能出现处理器拥塞。此计数器是特定时间的值,而不是一段时间的平均值。
    % DPC Time:越低越好。在多处理器系统中,如果这个值大于50%并且Processor:% Processor Time非常高,加入一个网卡可能会提高性能,提供的网络已经不饱和。

  • LR监控计数器整理(四)

    2008-11-04 09:22:41

    Physical Disk:


    %Disk Time %:指所选磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。如果三个计数器都比较大,那么硬盘不是瓶颈。如果只有%Disk Time比较大,另外两个都比较适中,硬盘可能会是瓶颈。在记录该计数器之前,请在Windows 2000 的命令行窗口中运行diskperf -yD。若数值持续超过80%,则可能是内存泄漏。
    Avg.Disk Queue Length:指读取和写入请求(为所选磁盘在实例间隔中列队的)的平均数。该值应不超过磁盘数的1.5~2 倍。要提高性能,可增加磁盘。注意:一个Raid Disk实际有多个磁盘。
    Average Disk Read/Write Queue Length:指读取(写入)请求(列队)的平均数。
    Disk Reads(Writes)/s: 物理磁盘上每秒钟磁盘读、写的次数。两者相加,应小于磁盘设备最大容量。
    Average Disksec/Read: 指以秒计算的在此盘上读取数据的所需平均时间。
    Average Disk sec/Transfer:指以秒计算的在此盘上写入数据的所需平均时间。
    Network Interface:
    Bytes Total/sec :为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。 


  • 网络时间&服务器时间

    2008-11-03 19:39:30

    网络时间是从发出第一个http请求到收到ACK的时间。
    服务器时间是从收到ACK到第一个字节返回的时间。

    名词解释:

    ACK是TCP首部中的确认标志,对已接受到的TCP报文进行确认。
    英文缩写: ACK (ACKnowledge Character)
    中文译名: 确认字符
    分  类: 传输与接入
    解  释: 在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。

  • 数据聚合解释

    2008-11-03 19:36:29

    为了使数据库减小和缩短在大方案中的处理时间,必须进行数据聚合。
    在自定义中要减小数据库大小可以增加粒度,最小值为1秒。
  • RTE的解释

    2008-11-03 14:13:35

    RTE:基于字符的应用程序,类似我们接触的DOS

  • 【收藏】lrs_save_param 使用方法

    2008-11-03 14:10:01

    在协议的winsock中,我们会经常使用到lrs_save_param函数
    lrs_save_param("socket0", LRS_LAST_RECEIVED, "RecvData", 200,100);
    从最后一次接受的buffer中取第200个字节之后的100个字节的数据,保存在参数RecvData中。
    之后对该参数怎么处理就是你的事了。
    要找到数据在buffer中的位置,在data.ws中选中那个buffer,按F7,找到你想要的数据和它的位置。 
    
    lrs_receive("socket2", "buf47", LrsLastArg);
    lrs_save_param("socket2", NULL, "param1", 67, 5);
    lr_output_message ("param1: %s", lr_eval_string("<param1>")); 
    lr_think_time(10);
    lrs_send("socket2", "buf48", LrsLastArg); 
  • 关于web的乱码处理

    2008-11-03 14:03:49

    我们使用LR在录制了web脚本后,发现会一些会是乱码,使得我们无法判断内容是什么,这样我们往往先检查下是否是字符的原因。

    若是字符原因,在recording options中的advanced里的support charset(utf_8)选定即可解决

    若不是也可以在word文档中自己先编写后,复制到LR中去调试

     

     

     

     

  • LR选项中设置了选择中文

    2008-11-03 09:57:18

    LR在选项中设置了选择中文,可以看到  web_add_auto_header("Accept-Language", "zh-cn");
  • LR监控计数器整理(三)

    2008-11-03 09:47:09

    Process:
    %Processor Time: 被处理器消耗的处理器时间数量。如果服务器专用于sql server,可接受的最大上限是80-85%
    Page Faults/sec:将进程产生的页故障与系统产生的相比较,以判断这个进程对系统页故障产生的影响。
    Work set: 处理线程最近使用的内存页,反映了每一个进程使用的内存页的数量。如果服务器有足够的空闲内存,页就会被留在工作集中,当自由内存少于一个特定的阈值时,页就会被清除出工作集。
    Inetinfo:Private Bytes:此进程所分配的无法与其它进程共享的当前字节数量。如果系统性能随着时间而降低,则此计数器可以是内存泄漏的最佳指示器。  

311/212>
Open Toolbar