每天进步一点点!

发布新日志

  • Can't start Quality Center原因

    2010-07-09 10:43:55

    昨天启动QC9.2时出现了Can't start Quality Center提示,我百思不得其解,用的好好的,怎么会突然这样呢。通过与测试群朋友的讨论后,才猛然发现自己改过本机器的密码,而在安装QC时曾输过本机密码。汗,只有改回原来的密码,再次启动,哈哈,起来了。
    不过唯一的缺陷是不知道怎么在QC配置里改密码,这样就不必改回原来丢弃的密码了。

    哈哈,现在解决了唯一的缺陷:
    在服务中找到Quality Center这个服务,重设置一下密码就可以了。就不必改回原来丢弃的密码了。
  • LR结果分析—TPS和吞吐率(转发)

    2010-06-10 16:12:05

    LR结果分析—TPS和吞吐率

    http://www.sina.com.cn  2009年09月09日 10:35  IT168.com
    文本Tag: 测试工具 LoadRunner

      【IT168 技术文档】针对吞吐率和TPS的关系,这个在结果分析中如何使用,就个 人经验和朋友讨论后,提出如下建议指导,欢迎同僚指正。

    LR结果分析—TPS和吞吐率

       TPS:transaction per second 服务器每秒处理的事务数。

      吞吐率:测试过程中每秒从服务器返回的字节数。

       从定义上来看,如果TPS很小,但是吞吐率比较大,说明服务器的返回的页面文件(字节数)是比较大的,此时根据页面细分图,如果存在页面问题,考虑页面 压缩。

      还应根据A1---A3,N1---N3实际考虑。

      如果A1或者A3比较大,说明webserver处理可能 存在问题,如果A2比较大,则说明DBserver处理存在问题,建议sql优化。

      当增大系统的压力(或增加并发用户数)时,吞吐率和 TPS的变化曲线呈大体一致,则系统基本稳定。

      若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓慢,甚至平坦,同时TPS也趋于 平坦,查看系统资源使用,如果资源使用率比较低,说明服务器硬件资源不存在问题,查看网络流量,估计网络带宽存在问题。

      同理若点击率 /TPS曲线出现变化缓慢或者平坦, 点击率(用户每秒发出的请求数)如果在压力增加时,趋于平坦,很可能是服务器响应时间增加,观察服务器资源使用情况,确定是否是服务器问题。

       TPS是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求 然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数,最终利用这些信息来估计得 分。客户机使用加权协函数平均方法来计算客户机的得分,测试软件就是利用客户机的这些信息使用加权协函数平均方法来计算服务器端的整体TPS得分。

       一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。 系统整体处理能力取决于处理能力最低模块的TPS 值。依据经验,应用系统的处理能力一般要求在10-100左右。不同应用系统的TPS有着十分大的差别,一般需要通过性能测试进行准确估算。

      
  • LR使用(转载)

    2010-06-08 10:31:09

     1.协议的选择
      Loadrunner的协议选择众多,想正确的选择脚本协议,首先要从Loadrunner的工作原理上深入的理解协议的作用和意义, Loadrunner启动后,在任务栏上有一个loadrunner agent process 进程,这个进程的一项重要的工作就是监视各种协议的客户端和服务器端的通信.只要是能支持的协议, Loadrunner在录制的工程中就可以通过脚本语言将通信工程录制下来,所以要明确被测软件的通信过程和所使用的协议, Loadrunner才能正确的录制脚本。

      a.选择单协议还是多协议的关键是你对应用的通信细节要清楚.可以多问问开发他们是怎么实现的.比如有个WEB系统需要测试,看上去选择单协议 就可以了,但是在和服务器交互的过程中,浏览器下载页面里的APPLET并且用APPLET和服务器建立了SOCKET传输一些数据.这种情况下就该选择 多协议了.还有一些邮件方面的应用一般都要选择多协议,邮件系统都会使用到发送和接受两种协议.有些时候不选择多协议,脚本也能运行.但你的脚本没有完全 反映出客户端和服务器端的交互过程.选择录制脚本的协议前,还是要多分析一下应用系统

      b.一般将应用软件分为B/S和C/S结构来选择协议, 对于B/S结构,可以选择WEB(HTTP/HTTML)协议;对于C/S结构,可以根据后端数据库的类型来选择,如SYBASECTLIB协议用于测试 后台数据库为SYBASE的应用,MS SQL SERVER协议用于测试后台数据库为SQL SERVER的应用;对于没有数据库的WINDOWS应用,可以选择WINDOWS SOCKETS这个底层的协议;这里需要说明的是,无论使用哪种协议,LOADRUNNER的测试流程都基本是一样的,只有在设定细节上有所不同,测试人 员只要对被测应用的技术架构熟悉了,就能够成功完成脚本的录制。

      2.脚本的录制
      当选择好脚本协议后,就可以对开始录制了,如果是B/S架构的测试对象,当然选择了web(http/html),接着输入要测试的URL地址,确定 就OK了。

      a.明确脚本的三个部分
      LOADRUNNER 将测试脚本分为3个部分,VUSER_INIT,VUSER_END和ACTION,其中VUSER_INIT和VUSER_END一般用于存放应用程序 初始化的脚本和注销关闭的脚本,在重复执行的时候,这两部分的内容只执行一次.而ACTION部分用于存放实际的操作脚本,这部分脚本可以多次执行,测试 人员还可以根据需要创建多个ACTION 脚本,但不能创建VUSER_INIT和VUSER_END.所以在录制的时候一定要明确:录制的流程是否要迭代,如果要一定要放入ACTION部分。

      b.录制时的脚本开发
      在录制的时候在屏幕上会有一个悬浮的控制脚本录制的工具栏,是脚本录制过程中测试人员和VUGEN交互的主要平台,每个可用的按钮都可以执行相应的操 作,如上图,测试人员可以新建Action,插入文本检查点,制定开始结束事务,也可以在需要测试的功能点插入集合点,或作一些必要的注释等等…..

      3.脚本的开发与加强
      该阶段也是脚本录制阶段最重要的部分,为了实现理想中的需求,你可以添加事务,插入集合点,调整运行时的设置,参数化数据,插入文本图片检查点,但是 在这之前必须要确保录制的脚本能够跑通,即回放没有问题,有如下提示图。

      a.添加事务
      除了从总体把握系统的性能问题外,测试工程师可能还要对业务中的某一个具体部分的数据进行分析,来检测该功能点的性能问题,为了达到这个目的,就要为 该功能点添加事务,将该功能点用开始与结束事务包起来,分析该事务来了解和把握该功能的性能。

      所谓事务(TRANSACTION),就是在脚本定义中定义的某段操作(ACTION),更确切的说,就是一段脚本语句.定义事务时,首先在脚 本中找到事务的开始和结束位置,然后分别插入一个事务起始标记,这样,当脚本运行的时候,LOADRUNER会自动在事务的起始点计时,脚本在运行到事务 结束点时计时结束,系统会自动记录这段操作的运行时间等性能数据;在脚本运行完毕后,系统会在结果信息中单独反映每个事务运行结果。

      事务的插入操作可以在脚本运行过程中进行,也可以在脚本录制完毕后进行,建议在脚本录制完毕后进行.如下图添加。

      也可以在脚本中插入事务,在树图列表下右键,选择在该项之前或之后添加事务,开始和结束的事务是成对出现,不然脚本会报错,如下图:

      b.插入集合点
      在控制台执行负载测试,设置多用户同时加载并发,并发过程仅仅体现在开始执行的那一刹那,随着服务器对请求的响应时间的不一致或系统环境条件的限制, 在运行过程中能集合到一点的可能性微乎其微,所以将一定数量的用户同时加载并不是真正意义上的并发。

      系统压力最大的情况是:所有用户都集中到系统瓶颈的某个点上进行操作,从脚本的角度来讲,这个点就是执行脚本的某一条或一段语句,为了真实模拟 这个最坏的情况,查看系统在最坏情况下的反映。

      为了实现测试一个业务中途的并发性能测试,LR中的集合点就孕育而生了,使跑在前面的用户在该点上等待,让后面的追赶上来, 将众多的Vuser集合到一起,来达到并发的效果.来帮助测试人员实现真正意义上的并发。

      插入集合点的方法:可以在录制的时候添加,也可以象添加事务一样,在树图列表下添加.当然如果熟悉集合点的语言的话在脚本中直接插入语言也可 以。

      c.运行时设置

      点击右上角图标,弹出运行时设置对话框,就可以对迭代次数和迭代逻辑进行设置,迭代之间的时间的设置,还可以对网络的速度,浏览 器,Internet协议的模拟。

      每个 Vuser 脚本都包括三部分:vuser_init、Run (Actions) 和 vuser_end。可以指示 Vuser 在运行脚本时重复执行 Run 部分。每次重复称为一次迭代。 运行多次迭代时,将不会重复执行 Vuser 脚本的 vuser_init 和 vuser_end 部分。

      迭代次数:迭代的次数。Vuser 将按指定的次数重复执行所有 Actions。注意:对于 LoadRunner Controller 和优化模块:如果在计划设置中指定了场景或会话步骤持续时间,则持续时间设置将覆盖 Vuser 迭代设置。这意味着,如果持续时间被设置为 5 分钟(默认设置),Vuser 将在 5 分钟内根据需要连续运行任意多次迭代,即使运行时设置仅指定一次迭代。

      运行多操作脚本时,可以指明执行操作的方法以及 Vuser 执行这些操作的方法:操作块:操作块是脚本内的操作组。您可以单独设置每个块的属性 - 其顺序、迭代和权重。顺序:您可以设置脚本内的操作顺序。还可以指明是按顺序还是随机执行操作。迭代:除了设置整个 Run 部分的迭代次数以外,还可以设置单个操作或操作块的迭代。该设置非常有用,例如,可以用来模拟一个商业站点,您在该站点执行了多次查询查找某个产品,但只 进行了一次购买。权重:对于随机运行其操作的操作块,您可以设置块内每个操作的权重或百分比。

      d.参数化脚本
      众多用户都使用相同帐户登陆或相同的数据来测试脚本,对系统造成的压力与实际情况会有所不同.而对于那些禁止一个用户多次登陆的系统,也就严重到无法 测试的地步了.为了解决这个问题,让系统更加真实的模拟多用户使用的实际环境,LOADRUNNER提供了对脚本进行参数化输入的功能;让每个虚拟用户都 拥有自己的帐户进行登录和运行。

      所谓的脚本参数化,就是针对脚本中的某些常量,定义一个或多个包含数据源的参数来取代,让场景中不同的虚拟用户在执行相同的脚本时,分别使用参 数数据源中的不同数据代替这些常量,从而达到模拟多用户真实使用系统的目的。

      明确需参数的数据,选中该数据,右键替换为新参数,打开属性—>用记事本编辑—>运行脚本,it is over。

      需要注意的是在参数化属性页面的设置比较复杂,下面就讲解下设置的细节:

    • Select next row :多个VU如何取值
    • Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取
    • Random:在每次循环里随机的读取一个,但是在循环中一直保持不变
    • Unique :每个VU取唯一的值。注意:使用该类型必须注意数据表有足够多的数。
    • Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录。通常用在有关联性的数据上面。
    • Update value on:多次迭代如何取值
    • once在所有的反复中都使用同一个值
    • each iteration则每次反复都要取新值,
    • each occurrence则只要发现该参数就要重新取值,也就是如果一个action中有多个该参数,每遇到一个就要重新取一个值
    • 一个参数在一个Action中出现多次时
    • Random+each iteration 该次迭代中某参数的取值方法为:本次迭代中参数第一次取的值,多次取值不变化
    • Random+each occurrence 该次迭代中某参数的取值方法为:在本次迭代中参数每次取值都通过Random来变化
    • Random+once 在所有迭代中某参数的取值受第一次取值的影响。第一次取值通过Random来变化,之后不再改变
       参数化数据的准备:可以通过一些工具来生成需要的数据,如果在数据库中有现成的数据也可以通过数据库导出来达到目的,只要选择数据向导,连接到数据库服 务器,输入SQL语句即可,如下图

      e.插入检查点
      LOADRUNNER检查点的功能主要用来验证某个界面上是否存在指定的TEXT或IMAGE等对象,在使用LOADRUNNER测试WEB应用时, 可以检查压力较大时WEB服务器能否返回正常的页面。

    • 定位要检查的页面
      定位需要检查的页面,最好将脚本视图切换到TREE VIEW方式,这样就可以直观地查看到LOADRUNNER录制时获取的每个页面了。在TREE VIEW视图中用鼠标单击页面左侧列表中页面对应的URL,就能迅速查看到准备检查的页面和页面上需要检查的图象或文本信息。
    • 插入文字检查点
      选择相应的URL,单击鼠标右键,在系统弹出的菜单中选择INSERT AFTER或INSERT BEFORE命令,在URL的脚本前面或后面插入函数,在ADD STEP对话框中可以插入很多的函数,如果想为WEB应用插入图像或文本检查点,需要选择WEB CHECKS下面的IMAGE CHECK或TEXT CHECK,在系统弹出的检查点属性对话框中,输入要查询的文字或图像名称后,系统会自动在TREE VIEW视图中的树型列表中插入类似的STEP。LOADRUNNER 还允许对要检查的文字内容和图像名称进行参数化,参数化的过程可以在插入检查点的 过程中实现,还可以在插入之后重新打开脚本实现。要想在插入检查点时就直接实现参数化,只需要在设置被检查对象的名称时单击ABC按钮,创建或选择参数输 入就可以了。
    • 设定与检查点有关的选项
      系统在执行时是否起用检查点,是由一个系统参数控制的,该参数的设定方法为:VUSER|RUN-TIME SETTINGS|PREFERENCES,如果想让检查点起作用,需要选中ENABLE IMAGE AND TEXT CHECK 复选框。
    • 查看检查点是否通过
      脚本运行结束后,要想查看检查点是否通过,可以在TREE VIEW视图下,用鼠标右键单击检查点步骤,选择GO TO STEP IN EXECUTION命令,则系统自动将光标定位到执行日志中获取检查点结果的一行上。

      4.LoadRunner 脚本中做关联 (Correlation)
      LR中的关联是为了解决脚本中随时变动的数据,一般都是服务器返回给客户端的随机数据,如生成的定单号,session,Cookie号等等,每个数 据之间没有任何联系,为了不因为这些数据的不同而导致脚本的不通过,LR提供了关联功能,它可以实时自动找出要关联的值,将这些动态数据联系起来。

      关联分为自动关联和手动关联,自动关联必须要在录制脚本之前开启自动关联项。

      a.启用auto-correlation

      点选VuGen的【Tools】>【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】>【Correlation】,勾选【Enable correlation during recording】,以启用自动关联。

      假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、 InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选 相对应的应用系统。或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。

      b.自动关联----Correlation Studio

      当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。

      使用Correlation Studio的步骤如下:

    • 录制脚本并执行;
    • 执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。
    • 扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。
    • 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。

    • 注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。

      c.手动关联
      有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。

      四.Mercury LoadRunner 控制器
      控制器是脚本录制完成后,执行压力负载测试的工具, 测试人员的工作就是了解被测应用的性能需求,从应用程序中找出一个或多个性能测试点,然后针对这些性能点分别进行测试,获取相关的性能指标结果,分析被测 应用,追溯性能问题产生的根源.要使用LR实现这一过程,就需要针对这些性能点建立一个个的场景,因此,LR的每个场景都定义了一个在性能测试活动中发生 的事件,它能控制虚拟用户的数量,测试脚本和运行脚本的LOAD GENERATOR.对于有经验的测试人员来说,定义场景是在计划阶段进行的,它优先于脚本的录制过程,并指导脚本的录制。只不过计划阶段的场景只能限于 纸面上,要想让LR这个测试工具实现自动的负载测试,需要在CONTROLLER中建立实实在在的场景。

      控制场景可以从程序中打开,然后选择保存好的脚本,也可以从Generator中直接连接到该脚本的控制场景,如下图:

      打开场景后,可能运行的场景有些单一,实际环境中可能在同一时间有多个功能模块一同运行,为了实现这个目的, 可以添加多个已经录制好的脚本,在控制场景中一同执行,添加的方法如下:

      在控制场景页面也有多项设置来达到测试需求,如:编辑计划,IP欺骗器,集合点策略,负载生成器,添加资源度量….

      1.编辑计划
      编辑计划是用来控制场景的运行时间和运行策略,它分为按场景计划和按组计划,按组计划是为多个场景运行,而限制其中某个场景而设定的项,这就但说明下 场景设置就OK了,在场景计划中分为加压,持续时间,减压三个阶段,分别讲了如何加压是所有的Vuser同时负载,还是隔多久加载多少个Vuser,持续 时间是为了流程完成为止还是运行时间的限制,减压和加压有点相似,就不多讲了,计划生成器如下图:

      2.IP欺骗器
      LR进行压力负载测试的时候,是让一台机器模拟成百上千的用户对服务器施压,这样就产生了一个问题,那就是所有用户向服务器发起请求的时候,使用的都 是同一个IP地址,即LOAD GENERATOR所在机器的固定IP地址,这是和实际运行环境不符的,而且有些应用系统在设计的时候会根据IP来分配资源,有些还限制同一个IP的多次 登陆过程。LR为了解决这个问题,使用了一种称为“IP欺骗(IP SPOOFER)”的技术。也就是让一个LOAD GENERATOR上的虚拟用户模拟从不同的IP来向服务器发起请求,以达到以假乱真的目的。设定欺骗器如下图:

      1>配置IP SPOOFER
      第一个单选按钮CREATE NEW SETTING,用于创建一个新的设置,首次运行时选用;   第二个单选按钮LOAD PREVIOUS SETTING FROM可以调用以前保存的设置;   第三个单选按钮RESTORE   ORIGINALSET不是用来创建动态IP,而是将设置恢复为原始状态,这个选项主要用于使用后释放IP,如果使用完毕后不释放IP的话,那么这些 IP会被一直占用,别人就无法使用了。

      2>输入WEB
      SERVER的IP地址,这里主要用来检测新的IP地址加到主机中后,SERVER的路由表是否需要更新,如果SERVER和CLIENT使用的是相 同的子网掩码,IP CLASS类型和网络,是无需更新的;

      3>在添加新的动态IP的时候,需要注意如下几个选项的含义:
      PRIVATE ADDRESS SPACES:选择测试环境的IP地址类型,关于IP地址类型的定义
      FROM IP:要使用IP段的第一个值;
      NUMBER TO:要使用的IP地址的数目。
      SUBMASK:子网掩码,一般采用默认设置就可以了;

      如果选中VERIFY THAT NEW IP ADDRESS ARE NOT ALREADY IN USE复选框,系统会在所选范围内检测每个IP地址,为了避免冲突,LOADRUNNER只添加那些没有被其他用户使用的IP地址。

      如果已经预先知道选择范围内的某些地址可能被占用,那么在NUMBER TO文本框中输入的IP地址的个数就要有相应的增加。

      4>启用IP欺骗
      在CONTROLLER窗口中,选择SCENARIO|ENABLE IP SPOOFER命令,就可以起用IP欺骗了,在IP欺骗启用后,在CONTROLLER状态栏中会显示相应的状态标识;

      3.集合点策略
      LOADRUNNER在运行场景的时候,允许测试人员根据项目需要自己设定集合点的并发策略,要设定一个集合点以何种方法运行,在创建或打开脚本中包 含集合点的场景时,选择SCENARIOI|RENDEZVOUS命令,可以查看场景中所有脚本中的集合点名称,所属脚本,当前状态和相关的虚拟用户列表 信息等,根据系统需求,还可以针对集合点的执行进行设定。设置窗口如下:

      单击禁用集合点按钮可以选定集合点是否启用;
      单击禁用Vuser按钮可以设定一个用户是否参与到集合点中;
      单击策略按钮可以设定集合点执行策略。

      在策略对话框中的VUSERS之间的超时值文本框中设定了一个超时时间,当第一个用户到达集合点时,系统开始计时。如果在这个设定的时间内没有 达到要求的集合点用户数,系统就不在等待,释放用户让场景继续执行;

      4.负载生成器
      LR对应用程序施压时,采用的方法就是让一台机器模拟很多用户,同时向被测用户发送请求或进行操作。这样,如果一台测试机器模拟的虚拟用户数过多,他 本身性能的下降会直接影响测试效果。为了避免这种情况,LR允许使用多台机器运行场景来均衡测试机器的负荷。只要一台机器安装了LOAD GENERATOR并启动了LOADRUNNER AGENT PROCESS进程,就可以被CONTROLLER统一调度来运行场景,CONTROLLER负载收集统一的测试信息和执行结果。

      如上图添加另一台安装LR的计算机既可,但是要想负载,被添加的机子必须开启LR代理服务器,然后设定负载策略,连接成功后,在某一场景的负载 生成器栏中选择该连接的机子就OK了。

      5. 添加资源度量
      为了能够实时的监控服务器因用户量的递增或因功能点性能问题而导致资源的变化,LR也提供了象Vuser图一样的资源图,只要在相应的区域右键添加度 量,将需要关注的资源添加进来即可.如下图

      1>在AVAILABLE列表中,单击要监视的图表,选择MONITOR|ADD MEASUREMENTS;或者在AVAILABLE GRAPH中先将准备监视的指标拖至右侧图表栏中,然后用鼠标右键单击该图表,在弹出的快捷菜单选择ADD MEASUREMENTS,系统会自动弹出相应的监视服务器对话框;单击上部的ADD按钮,在MONITORED SERVER MACHINES中添加要监视的服务器名称(或IP地址)和相应的系统平台;单击下部的ADD按钮在RESOURCE MEASUREMENTS ON列表中添加相应的计数器,这里可以选择一个或多个性能指标。如果添加成功的话,场景运行的时候,就可以在线监视所选择的指标数据了

      注意:必须以被监视机器的管理员身份登陆到CONTROLLER所在机器,才能添加被监视机器的性能计数器;

      2>常见的计数器

    1. MEMORY相关,内存问题主要检查应用程序是否存在内存泄露,如果发生了泄露,PROCESS\PRIVATE BYTES计数器和PROCESS\WORKING SET计数器的值往往会升高,同时AVALIABLE BYTES的值会降低.内存泄露应该通过一个长时间的测试来检查,主要测试当所有内存都耗尽时应用程序的反应情况;
    2. PROCESSOR相关,判断应用程序是否存在处理器的瓶颈
      如果PROCESSOR QUEUE LENGTH显示的队列长度保持不变(>=2),且处理器的利用率%PROCESSOR TIME超过90%,那么很可能存在处理器瓶颈;
      如果发现PROCESSOR QUEUE LENGTH显示的队列长度超过2,而处理器利用率却一直很低,那么或许更应该去解决处理器的阻塞问题,处理器一般不是瓶颈;
      如果系统由于应用程序代码效率低下或者系统结构设计有缺陷而导致大量的上下文切换(CONTEXT SWITCHES/SEC,显示的上下文切换次数)比较大,那么就会造成大量的系统资源;
      如果系统吞吐量降低并且CPU的使用率很高,并且此现象发生时切换水平在1500以上,那么意味着上下文切换的次数过高;
      还可以比较CONTEXT SWITCHES/SEC和%PRIVILEGED TIME来判断上下文切换是否过量;如果后者的值超过40%,且上下文切换的速率也很高,那么应该检查为什么会产生这么高的上下文切换;
    3. 网络吞吐量及带宽
      BYTES TOTAL/SEC: 判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较,相除结果应该小于50%;
    4. 磁盘相关
      判断磁盘瓶颈的方法是通过以下的公式来计算:
      每磁盘的I/O数=[读次数+(4*写次数)]/磁盘个数
      如果计算的每磁盘的I/O数大于磁盘的处理能力,那么磁盘存在瓶颈;
    5. WEB SERVER相关
    6. 数据库服务器相关

      6.使用测试管理工具进行统一管理
      LR和MERCURY QUALIY CENTER的完美结合,给用户组织和管理LOADRUNNER的测试脚本,场景和测试数据带来了极大的便利。QUALITY CENTER是MERCURY 提出的针对质量保证的解决方案。只要将LR连接到基于WEB的QUALITY CENTER,则场景的存储执行和测试结果的收集就会随时随地被MERCURY QUALITY CENTER的测试项目进行有效的管理;

      1>连接到QUALITY CENTER
      要想让LOADRUNNER使用一个QUALITY CENTER 对测试内容进行管理,首先必须通过URL连接到QUALITY CENTER,这个QUALITY CENTER 既可以是安装在本地的局域网上,也可以是通过广域网访问的测试管理平台;

      在CONTROLLER模块中,选择TOOLS|QUALITY CENTER CONNECTION 命令,弹出QUALITY CENTER CONNECTION 对话框,在SERVER文本框中输入安装了QUALITY CENTER的WEB服务器的URL地址,单击CONNECT按钮,系统会试图建立对QUALITY CENTER服务器的连接,如果连接建立成功,则会在PROJECT CONNECTION 一栏显示QUALITY CENTER的项目;

      在PROJECT CONNECTION 一栏输入相关的内容,即选定要连接的测试管理项目,单击CONNECT按钮,系统开始对相应的项目建立连接。一旦建立成功,则QUALITY CENTER的项目信息就变为只读状态;

      2>断开服务器或项目
      在连接状态中,可以随时单击DISCONNECT 按钮断开QUALITY CENTER服务器或项目的连接;

      3>打开/保存测试项目场景
      如果LOADRUNNER正在连接到一个测试管理工具上,那么在保存和打开场景的时候,系统弹出的对话框会有所不同,如果仍然希望在文件系统中打开/ 保存场景,可以单击对话框中的FILE SYSTEM按钮进行切换;关于测试管理工具如何管理和调用LOADRUNNER的场景,请参考TD。

      五. 利用ANALYSIS分析测试结果
      这个模块是最难最复杂,也是众多LR工程师最头痛的部分,为了更快更多的找出系统存在的性能瓶颈,必须对LR控制器生成的性能指标数据进行分析, LR的ANALYSIS模块是分析系统的性能指标的一个主要工具,它能够直接打开场景的执行结果文件,将场景数据信息生成相关的图表进行显 示.ANALYSIS集成了强大的数据统计分析功能,允许测试员对图表进行比较和合并等多种操作,分析后的图表能够自动生成需要的测试报告文 档;ANALYSIS作为LR的一个主要模块,是帮助测试人员分析系统性能瓶颈的得力助手;

      在ANALYSIS中包含了很多在场景运行过程中获取了很多和性能相关的数据的图表;针对每一个被测应用来说,到底哪个性能指标是影响性能的关 键了.了解常用的性能指标,熟悉使用ANALYSIS分析工具分析测试结果是确定系统瓶颈的关键.再次强调,不同的应用程序,影响其性能的因素也不同,要 分析被测软件的性能因素,首先要熟悉被测软件的技术架构; LR除了将获取的原始数据形成直观的图表外,还对数据进行了一些统计,例如在多数分析图表下方的图例列表中,给出了最大值,最小值,平均值,中间值和 STD等一些统计字段,便于用户分析。

  • 供开发人员降低bug出现几率的几点见解

    2010-05-05 17:12:57

    高质量代码有三要素:可读性、可维护性、可变更性。
        从测试人员角度来看待‘代码质量’就离不开‘bug的数量’,我觉得它们成反比,代码质量提高了bug数量就会减少,当然也不是绝对。
        ‘提高代码质量’我了解不多,我就从减少bug数量方面说一下自己的理解:
    (主要还是注重项目开发过程中的每个细节)
        1、明确需求,使开发信手拈来
         拿到需求规格说明书后,项目开发小组仔细衡量哪些功能点可以实现,哪些不能实现,实现方式是怎么样的,大概多长时间可以实现,小组人员达到一致后,再着手 开发,这时就不必在开发中反复围绕一个功能点讨论了,也不用再去反复修改某个功能点了,节省了开发时间,同时降低了bug出现几率。
        2、 提高警惕,使代码少出现bug
         测试人员根据需求编写好的测试用例拿出来让开发评审(测试用例编写应先于开发一步或同步),评审的过程中,相关开发人员会有某种操作可能会出现bug的意 识,在开发中就会加以注意,从而降低了bug出现几率。
        3、善于总结,使同种bug不再出现
         测试人员将测试出现的bug归类汇总,反馈给相关开发人员,来修改调试代码,然后开发人员再集体讨论最优解决方法,最后形成基础代码供调用,同时在开发代 码时避免该类bug再次出现!
  • VBScript中的文件读写

    2010-04-27 11:12:41

    •文本文件的读写
    代码示例
    Option Explicit
    Const ForReading= 1,ForWriting = 2,ForAppending = 8
    Dim fso,file,msg
    Set fso= CreateObject("Scripting.FileSystemObject")
    Set file = fso.OpenTextFile("c:\calc.txt",ForReading)
    While (Not file.AtEndOfLine)
    msg= msg& file.ReadLine& Chr(13) & Chr(10)
    Wend
    MsgBoxmsg
    file.Close
    Set file = Nothing
    Set fso= Nothing

    •Excel文件的读写
    代码示例
    Dim xlApp,xlWorkBook,xlSheet
    Dim iRowCount,iLoop,numAdd
    Set xlApp= CreateObject("Excel.Application")
    xlApp.Visible= True
    Set xlWorkBook= xlApp.Workbooks.Open("c:\data.xls")
    Set xlSheet= xlWorkBook.Sheets("Sheet1")
    iRowCount= xlSheet.usedRange.Rows.Count
    For iLoop= 2 To iRowCount
    numAdd= xlSheet.Cells(iLoop,1)
    Next
    xlWorkBook.Save
    xlWorkBook.Close
    xlApp.Quit
    Set xlSheet= Nothing
    Set xlWorkBook= Nothing
    Set xlApp= Nothing
    数据库文件的读写
    代码示例
    Dim Cnn,Rst,strCnn
    strCnn= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\calc.mdb;Persist Security Info=False“
    Set Cnn= CreateObject("ADODB.Connection")
    Cnn.OpenstrCnn
    Set Rst= CreateObject("ADODB.Recordset")
    Rst.Open"Select * from calc",Cnn
    Rst.MoveFirst
    Do While Not Rst.EOF
    MsgBoxTrim(Rst.Fields("TestResult"))
    Rst.MoveNext
    Loop
    Rst.Close
    Cnn.Close
    Set Rst= Nothing
    Set Cnn= Nothing
    XML文件的读写
    代码示例
    Dim xmlDoc, xmlRoot, rootChildItem, msg
    Set xmlDoc= CreateObject("Microsoft.XMLDOM")
    xmlDoc.async= False
    xmlDoc.Load"C:\calc.xml"
    If xmlDoc.parseError.errorCode<> 0 Then
    MsgBox"XML loaded failed. The reason is :" & xmlDoc.parseError.reason
    Exit Sub
    End If
    Set xmlRoot= xmlDoc.documentElement
    If Not xmlRoot.hasChildNodesThen Exit Sub
    For Each rootChildItemIn xmlRoot.childNodes
    If rootChildItem.nodeName= "TestCase" Then
    msg= msg& rootChildItem.firstchild.nodeValue& vbNewLine
    End If
    Next
    MsgBoxmsg

  • VBScript 过程

    2010-04-26 16:46:36

    在VBScript. 中,过程被分为两类:Sub过程和Function过程。
    –Sub 过程Sub过程是包含在Sub和End Sub语句之间的一组VBScript. 语句,执行操作但不返回值。Sub过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Sub过程无任何参数,则Sub语句必须包含空括号()。

    –Function 过程Function 过程是包含在Function 和End Function 语句之间的一组VBScript. 语句。Function 过程与Sub 过程类似,但是Function 过程可以返回值。Function 过程可以使用参数(由调用过程传递的常数、变量或表达式)。如果Function 过程无任何参数,则Function 语句必须包含空括号()。Function 过程通过函数名返回一个值,这个值是在过程的语句中赋给函数名的。Function 返回值的数据类型总是Variant。
    Sub语句
    –声明Sub过程的名称、参数以及构成其主体的代码。
    [Public[Default] | Private] Subname[(arglist)]
    [statements]
    [Exit Sub]
    [statements]
    End Sub
    •Function语句
    –声明Function过程的名称、参数以及构成其主体的代码。
    [Public[Default]| Private] Functionname[( arglist)]
    [statements]
    [name= expression]
    [Exit Function]
    [statements]
    [name= expression]
    End Function

    过程中的arglist 参数
    –[ByVal | ByRef] varname[( )]ByVal表示该参数按值传递。ByRef表示该参数按引用传递。varname代表参数的变量名称,遵循标准变量命名规则。
    •过程的声明
    –没有显式地指定使用Public 或Private,则Sub/Function过程默认为公用,即它们对于脚本中的所有其他过程都是可见的。Sub/Function 过程中局部变量的值在调用过程中不被保留。
    •过程的调用
    –使用Call 语句调用
    –直接输入过程名调用
    –支持递归调用
  • VBScript MsgBox函数的使用

    2010-04-26 15:23:50

    MsgBox Functionwindow.event.cancelBubble = true;langClick(this);filterClick(this);

    MsgBox Function

    Displays a message in a dialog box, waits for the user to click a button, and returns a value indicating which button the user clicked.

    MsgBox(prompt[, buttons][, title][, helpfile, context])

    Arguments

    prompt
    String expression displayed as the message in the dialog box. The maximum length of prompt is approximately 1024 characters, depending on the width of the characters used. If prompt consists of more than one line, you can separate the lines using a carriage return character (Chr(13)), a linefeed character (Chr(10)), or carriage return–linefeed character combination (Chr(13) & Chr(10)) between each line.
    buttons
    Numeric expression that is the sum of values specifying the number and type of buttons to display, the icon style. to use, the identity of the default button, and the modality of the message box. See Settings section for values. If omitted, the default value for buttons is 0.
    title
    String expression displayed in the title bar of the dialog box. If you omit title, the application name is placed in the title bar.
    helpfile
    String expression that identifies the Help file to use to provide context-sensitive Help for the dialog box. If helpfile is provided, context must also be provided. Not available on 16-bit platforms.
    context
    Numeric expression that identifies the Help context number assigned by the Help author to the appropriate Help topic. If context is provided, helpfile must also be provided. Not available on 16-bit platforms.

    Settings

    The buttons argument settings are:

    Constant Value Description
    vbOKOnly    0 Display OK button only.
    vbOKCancel    1 Display OK and Cancel buttons.
    vbAbortRetryIgnore    2 Display Abort, Retry, and Ignore buttons.
    vbYesNoCancel    3 Display Yes, No, and Cancel buttons.
    vbYesNo    4 Display Yes and No buttons.
    vbRetryCancel    5 Display Retry and Cancel buttons.
    vbCritical 16 Display Critical Message icon.
    vbQuestion 32 Display Warning Query icon.
    vbExclamation 48 Display Warning Message icon.
    vbInformation 64 Display Information Message icon.
    vbDefaultButton1    0 First button is default.
    vbDefaultButton2  256 Second button is default.
    vbDefaultButton3  512 Third button is default.
    vbDefaultButton4  768 Fourth button is default.
    vbApplicationModal    0 Application modal; the user must respond to the message box before continuing work in the current application.
    vbSystemModal 4096 System modal; all applications are suspended until the user responds to the message box.

    The first group of values (0–5) describes the number and type of buttons displayed in the dialog box; the second group (16, 32, 48, 64) describes the icon style; the third group (0, 256, 512, 768) determines which button is the default; and the fourth group (0, 4096) determines the modality of the message box. When adding numbers to create a final value for the argument buttons, use only one number from each group.

    Return Values

    The MsgBox function has the following return values:

    Constant Value Button
    vbOK 1 OK
    vbCancel 2 Cancel
    vbAbort 3 Abort
    vbRetry 4 Retry
    vbIgnore 5 Ignore
    vbYes 6 Yes
    vbNo 7 No

    Remarks

    When both helpfile and context are provided, the user can press F1 to view the Help topic corresponding to the context.

    If the dialog box displays a Cancel button, pressing the ESC key has the same effect as clicking Cancel. If the dialog box contains a Help button, context-sensitive Help is provided for the dialog box. However, no value is returned until one of the other buttons is clicked.

    When the MsgBox function is used with Microsoft Internet Explorer, the title of any dialog presented always contains "VBScript.:" to differentiate it from standard system dialogs.

    The following example uses the MsgBox function to display a message box and return a value describing which button was clicked:

    Dim MyVar
    MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
       ' MyVar contains either 1 or 2, depending on which button is clicked.
  • 软件测试过程模型-v、w、h

    2009-07-29 15:15:50

     
     

    1.软件测试过程模型-V模型
    是软件开发瀑布模型的变种,主要反映测试活动与分析和设计的关系;
    局限性:把测试作为编码之后的最后一个活动,需求分析等前期产生的错误直到后期的验收测试才能发现

    名称

    目标

    活动描述

    需求分析

    明白客户需要,表述客户需要

    与客户交流,了解客户需求,写出说明书

    概要设计

    搭构架,明确模块功能,各模块间交互的实现方法,数据传送方法等

    把客户需要细分,确定不同的功能模块,把各模块连接方法,数据传输方法确定。

    祥细设计

    表述出模块间组合功能实现方法,

    对各模块进行进一步分析,设计模块间组合功能实现过程,写出伪代码

    编码

    写程序

    按照设计好的功能模块功能需求,设计不同的功能模块,写出代码,写出连接模块的代码,

    单元测试

    测试需要的最小单元的功能

    按照设定好的最小测试单元(或者叫组件)进行按测试,确保各模块被正确的编译执行

    集成测试

    检查单元和单元间组合成后是否存在问题,如组合后的功能,接口等,

    将已经分别通过测试的单元模块按设计需求组合进行整体功能,性能等测试,

    系统测试

    把集成后的软件放到系统中进行测试,

    搭建不同的计算机软硬件系统,把被测软件放入其中进行的非功能性测试,主要包括安全可靠性,性能等

    验收测试

    验证系统是否达到了客户需求

    用户进行易用性,兼容性,安装测试等


    2.软件测试过程模型-W模型
    V模型的基础上,增加开发阶段的同步测试,形成W模型;测试与开发同步进行,有利用尽早的发现问题
    局限性:仍把开发活动看成是从需求开始到编码结束的串行活动,只有上一阶段完成后,才可以开始下一阶段的活动,不能支持迭代,自发性以及变更调整

    3.软件测试过程模型-
    H模型
    H模型中,软件测试过程活动完全独立,贯穿于整个产品的周期,与其他流程并发地进行,某个测试点准备就绪时,就可以从测试准备阶段进行到测试执行阶段;软件测试可以进行尽早的进行;软件测试可以根据被测物的不同而分层次进行

    测试模型使用软件

    在实际工作中应灵活地运用各种模型的优点
    V模型
    : 强调了在整个软件项目开发中需要经历的若干个测试级别,并与每一个开发级别对应;忽略了测试的对象不应该仅仅包括程序,没有明确指出对需求、设计的测试
    W模型
    : 补充了V模型中忽略的内容,强调了测试计划等工作的先行和对系统需求和系统设计的测试;与V模型相同,没有对软件测试的流程进行说明
    H模型
    : 强调测试是独立的,只要测试准备完成,就可以执行测试

  • mantis统计报表和图形报表出现乱码问题的解决方法(摘录)

    2009-03-10 15:26:32

    方法如下:
    1、修改/mantis/jpgraph-2.2/src/jpgraph_ttf.inc.php 注释掉99-106行
    // elseif( $aFF === FF_SIMSUN ) {
    // // Do Chinese conversion
    // if( $this->g2312 == null ) {
    // include_once 'jpgraph_gb2312.php' ;
    // $this->g2312 = new GB2312toUTF8();
    // }
    // return $this->g2312->gb2utf8($aTxt);
    // }

    2、修改/mantis/core/graph_api.php,添加'chinese_gbk' => FF_SIMSUN,
    function graph_get_font() {
    $t_font_map = array(
    'arial' => FF_ARIAL,
    'verdana' => FF_VERDANA,
    'courier' => FF_COURIER,
    'comic' => FF_COMIC,
    'times' => FF_TIMES,
    'georgia' => FF_GEORGIA,
    'trebuche' => FF_TREBUCHE,
    'vera' => FF_VERA,
    'veramono' => FF_VERAMONO,
    'chinese_gbk' => FF_SIMSUN,
    'veraserif' => FF_VERASERIF );
    注:如果这里面还包括一个FF_SIMSUN的赋值,要屏蔽掉那行,否则会引起冲突。

    3、修改config_defaults_inc.php
    $g_graph_font = 'chinese_gbk';

    然后不需要重启服务刷新一下mantis就可以正常显示了。
  • 测试的主要评测方法(摘录)

    2009-02-26 13:23:48

    简介 返回页首

    测试的主要评测方法包括覆盖和质量。

    测试覆盖是对测试完全程度的评测,它建立在测试覆盖基础上,测试覆盖是由测试需求和测试用例的覆盖或已执行代码的覆盖表示的。

    质量是对测试对象(系统或测试的应用程序)的可靠性、稳定性以及性能的评测。质量建立在对测试结果的评估和对测试过程中确定的变更请求(缺陷)的分析的基础上。

    覆盖评测 返回页首

    覆盖指标提供了“测试的完全程度如何?”这一问题的答案。最常用的覆盖评测是基于需求的测试覆盖和基于代码的测试覆盖。简而言之,测试覆盖是就需求(基于需求的)或代码的设计/实施标准(基于代码的)而言的完全程度的任意评测,如用例的核实(基于需求的)或所有代码行的执行(基于代码的)。

    系统的测试活动建立在至少一个测试覆盖策略基础上。覆盖策略陈述测试的一般目的,指导测试用例的设计。覆盖策略的陈述可以简单到只说明核实所有性能。

    如果需求已经完全分类,则基于需求的覆盖策略可能足以生成测试完全程度的可计量评测。例如,如果已经确定了所有性能测试需求,则可以引用测试结果来得到评测,如已经核实了 75% 的性能测试需求。

    如果应用基于代码的覆盖,则测试策略是根据测试已经执行的源代码的多少来表示的。这种测试覆盖策略类型对于安全至上的系统来说非常重要。

    两种评测都可以手工得到(公式如下所示)或通过测试自动化工具计算得到。

    基于需求的测试覆盖 返回页首

    基于需求的测试覆盖在测试生命周期中要评测多次,并在测试生命周期的里程碑处提供测试覆盖的标识(如已计划的、已实施的、已执行的和成功的测试覆盖)。

    • 测试覆盖通过以下公式计算:

    测试覆盖 = T(p,i,x,s) / RfT

    其中:
    T 是用测试过程或测试用例表示的测试 (Test) 数(已计划的、已实施的或成功的)。

    RfT 是测试需求 (Requirement for Test) 的总数。

    • 在制定测试计划活动中,将计算测试覆盖以决定已计划的测试覆盖,其计算方法如下:

    测试覆盖(已计划的) = Tp / RfT

    其中:
    Tp 是用测试过程或测试用例表示的已计划测试 (Test) 数。

    RfT 是测试需求 (Requirement for Test) 的总数。

    • 在实施测试活动中,由于测试过程正在实施中(按照测试脚本),在计算测试覆盖时使用以下公式:

    测试覆盖(已执行的) = Ti / RfT

    其中:
    Tx 是用测试过程或测试用例表示的已执行的测试 (Test) 数。

    RfT 是测试需求 (Requirement for Test) 的总数。

    • 在执行测试活动中,使用两个测试覆盖评测,一个确定通过执行测试获得的测试覆盖,另一个确定成功的测试覆盖(即执行时未出现失败的测试,如没有出现缺陷或意外结果的测试)。

      这些覆盖评测通过以下公式计算:

      测试覆盖(已执行的) = Tx / RfT

      其中:
      Tx 是用测试过程或测试用例表示的已执行的测试 (Test) 数。

      RfT 是测试需求 (Requirement for Test) 的总数。

       

    成功的测试覆盖(已执行的) = Ts / RfT

    其中:
    Ts 是用完全成功、没有缺陷的测试过程或测试用例表示的已执行测试 (Test) 数。

    RfT 是测试需求 (Requirement for Test) 的总数。

       

    如将以上比率转换为百分数,则以下基于需求的测试覆盖的陈述成立:

    x% 的测试用例(上述公式中的 T(p,i,x,s))已经覆盖,成功率为 y%

    这一关于测试覆盖的陈述是有意义的,可以将其与已定义的成功标准进行对比。如果不符合该标准,则此陈述将成为预测剩余测试工作量的基础。

    基于代码的测试覆盖 返回页首

    基于代码的测试覆盖评测测试过程中已经执行的代码的多少,与之相对的是要执行的剩余代码的多少。代码覆盖可以建立在控制流(语句、分支或路径)或数据流的基础上。控制流覆盖的目的是测试代码行、分支条件、代码中的路径或软件控制流的其他元素。数据流覆盖的目的是通过软件操作测试数据状态是否有效,例如,数据元素在使用之前是否已作定义。

    基于代码的测试覆盖通过以下公式计算:

    测试覆盖 = Ie / TIic

    其中:
    Ie 是用代码语句、代码分支、代码路径、数据状态判定点或数据元素名表示的已执行项目数。

    TIic (Total number of Items in the code) 是代码中的项目总数。

    如将该比率转换为百分数,则以下基于代码的测试覆盖的陈述成立:

    x% 的测试用例(上述公式中的 I)已经覆盖,成功率为 y%

    这一关于测试覆盖的陈述是有意义的,可以将其与已定义的成功标准进行对比。如果不符合该标准,则此陈述将成为预测剩余测试工作量的基础。

    质量评测 返回页首

    测试覆盖的评估提供对测试完全程度的评测,在测试过程中已发现缺陷的评估提供了最佳的软件质量指标。因为质量是软件与需求相符程度的指标,所以在这种环境中,缺陷被标识为一种更改请求,该更改请求中的测试对象与需求不符。

    缺陷评估可能建立在各种方法上,这些方法种类繁多,从简单的缺陷计数到严格的统计建模不一而足。

    严格的评估假定测试过程中缺陷达到的比率或发现的比率。常用模型假定该比率符合泊松分布。则有关缺陷率的实际数据可以适用于这一模型。生成的评估将评估当前软件的可靠性,并且预测继续测试并排除缺陷时可靠性如何增长。该评估被描述为软件可靠性增长建模,这是一个活跃的研究领域。由于该类型的评估缺乏工具支持,所以应该慎重平衡成本与其增加价值。

    缺陷分析就是分析缺陷在与缺陷关联关系的一个或多个参数值上的分布。缺陷分析提供了一个软件可靠性指标。

    对于缺陷分析,常用的主要缺陷参数有四个:

    • 状态:缺陷的当前状态(打开的、正在修复或关闭的等)。
    • 优先级:必须处理和解决缺陷的相对重要性。
    • 严重性:缺陷的相关影响。对最终用户、组织或第三方的影响等等。
    • 起源:导致缺陷的起源故障及其位置,或排除该缺陷需要修复的构件。


    可以将缺陷计数作为时间的函数来报告,即创建缺陷趋势图或报告;也可以将缺陷计数作为一个或多个缺陷参数的函数来报告,如作为缺陷密度报告中采用的严重性或状态参数的函数。这些分析类型分别为揭示软件可靠性的缺陷趋势或缺陷分布提供了判断依据。

    例如,预期缺陷发现率将随着测试进度和修复进度而最终减少。可以设定一个阈值,在缺陷发现率低于该阈值时才能部署软件。也可根据执行模型中的起源报告缺陷计数,以允许检测“较差的模块”、“热点”或需要再三修复的软件部分,从而指示一些更基本的设计缺陷。

    这种分析中包含的缺陷必须是已确认的缺陷。不是所有已报告的缺陷都报告实际的缺陷,这是因为某些缺陷可能是扩展请求,超出了项目的规模,或描述的是已报告的缺陷。然而,需要查看并分析一下,为什么许多报告的缺陷不是重复的缺陷就是未经确认的缺陷,这样做是有价值的。

    缺陷报告 返回页首

    Rational Unified Process 以三类形式的报告提供缺陷评估:

    • 缺陷分布(密度)报告允许将缺陷计数作为一个或多个缺陷参数的函数来显示。
    • 缺陷龄期报告是一种特殊类型的缺陷分布报告。 缺陷龄期报告显示缺陷处于特定状态下的时间长短,如“提出的”。在龄期类别中,缺陷还可以按其他属性分类,如“拥有者”。
    • 缺陷趋势报告按状态(新的、已打开的或关闭的)将缺陷计数作为时间的函数显示。趋势报告可以是累计的,也可以是非累计的。
    • 测试结果和进度报告显示对测试的应用程序进行若干次迭代和测试生命周期后的测试过程执行结果。

    许多此类报告对于评估软件质量具有很高的价值。一般测试标准中包括有关特定类别(如严重性级别)中打开的缺陷数的陈述。通过缺陷分布评估可以轻松地核对该标准。对测试需求进行过滤或分类,该评估可以侧重于不同的需求集。

    要有效生成此类报告,一般需要工具支持。

    缺陷密度报告 返回页首

    缺陷状态与优先级

    应该给定所有缺陷的优先级,通常可行的做法是设定四种优先级中的一种:

    1. 立即解决
    2. 高优先级
    3. 正常排队
    4. 低优先级

    一个成功测试的标准可以表示为缺陷在上述优先级上所应体现的分布方式。例如,对于一个成功的测试标准来说,可能不存在优先级为 1 的打开的缺陷,而且优先级为 2 的打开的缺陷要少于 5 个。例如下面的缺陷分布图:

     

     

    很明显该图显示的情况没有达到标准。请注意,该图需要通过过滤器才能只显示需要的打开的缺陷。

    缺陷状态与严重性

    缺陷严重性报告显示每种严重性级别的缺陷个数,例如致命错误、未执行主要功能、次要错误等严重性级别。

    缺陷状态与在实施模型中的位置

    缺陷起源报告显示缺陷在实施模型元素上的分布情况。

    缺陷龄期报告 返回页首

    缺陷龄期分析提供了有关测试有效性和缺陷排除活动的良好反馈。例如,如果大部分龄期较长的、未解决的缺陷处于有待确认的状态,则可能表明没有充足的资源应用于再次测试工作。

    缺陷趋势报告 返回页首

    趋势报告确定缺陷率并提供了一个出色的测试状态视图。在测试生命周期中,缺陷趋势遵循着一种比较好预测的模式。在生命周期的初期,缺陷率增长很快。在达到顶峰后,就随时间以较慢的速率下降。

     

     

    要发现问题,可以根据这一趋势复审项目时间表。例如,在四个星期的生命周期中,如果缺陷率在第三个星期中仍然增长,则项目很明显没有按时间表进行。

    这一简单的趋势分析假定:缺陷是立即关闭的,且在随后的工作版本中对修复进行测试,这样关闭缺陷的速率应该遵循与打开缺陷的速率相同的增减趋势。如果情况并非如此,则表明缺陷解决流程发生了问题;缺陷修复所需的资源或再次测试和确认修复所需的资源可能不足。

     

     

    该报告反映的趋势显示,在项目开始时,发现和打开新缺陷的速率很快,但随着时间推移,该速率不断降低。打开的缺陷的趋势与新缺陷的趋势相似,但稍微滞后一些。关闭的缺陷的趋势随着打开的缺陷的修复和核实而不断增长。这些趋势描述的是成功的工作。

    如果您的趋势与这些趋势差别显著,则表明存在问题,并可以确定可能需要附加资源以应用于开发或测试特定区域的时间。

    当与测试覆盖评测结合起来时,缺陷分析可提供出色的评估,测试完成的标准也可以建立在此评估基础上。

    性能评测 返回页首

    评估测试对象的性能行为时,可以使用多种评测,这些评测侧重于获取与行为相关的数据,如响应时间、计时配置文件、执行流、操作可靠性和限制。这些评测主要在评估测试活动中进行评估,但是也可以在执行测试活动中使用性能评测评估测试进度和状态。

    主要的性能评测包括:

    • 动态监测 - 在测试执行过程中,实时获取并显示正在执行的各测试脚本的状态。
    • 响应时间/吞吐量 - 测试对象针对特定主角和/或用例的响应时间或吞吐量的评测。
    • 百分位报告 - 数据已收集值的百分位评测/计算。
    • 比较报告 - 代表不同测试执行情况的两个(或多个)数据集之间的差异或趋势。
    • 追踪报告 -主角(测试脚本)和测试对象之间的消息/会话详细信息。

    动态监测 返回页首

    动态监测通常以柱状图或曲线图的形式提供实时显示/报告。该报告用于在测试执行过程中,通过显示当前的情况、状态以及测试脚本正在执行的进度来监测或评估性能测试执行情况。

    keymeas4.gif(4149 字节)

    例如,在以上柱状图中,有 80 个测试脚本正在执行相同的用例。图中显示,有 14 个测试脚本处于空闲状态,12 个处于查询状态,34 个处于 SQL 执行状态,4 个处于 SQL 连接状态,16 个处于其他状态。随着测试的进行,我们将看到各状态脚本的数量会发生变化。显示的输出将是正常执行且正在执行中的典型测试执行。但是,如果在测试执行过程中,测试脚本始终保持一种状态或没有显示任何变化,则表明测试执行发生问题或者需要实施或执行其他性能评测。

    响应时间/吞吐量报告 返回页首

    正如其名称的含义一样,响应时间/吞吐量报告评测并计算与时间和/或吞吐量(处理的事务数)相关的性能行为。这些报告通常用曲线图显示,响应时间(或事务数)在“y”轴上,而事件数在“x”轴上。

    keymeas5.gif(6939 字节)

    除了显示实际的性能行为外,它在计算并显示统计信息方面也很实用,如显示数据值的平均偏差和标准偏差。

    百分位报告 返回页首

    百分位报告通过显示已收集数据类型的全体百分位值,提供了另一种性能统计计算方法。

    keymeas6.gif(5644 字节)

    比较报告 返回页首

    比较不同性能测试的结果,以评估测试执行过程之间所作的变更对性能行为的影响,这种做法是非常必要的。比较报告应该用于显示两个数据集(分别代表不同的测试执行)之间的差异或多个测试执行之间的趋势。

    追踪和配置文件报告 返回页首

    当性能行为可以接受时,或性能监测表明存在可能的瓶颈时(如当测试脚本保持给定状态的时间过长),追踪报告可能是最有价值的报告。追踪和配置文件报告显示低级信息。该信息包括主角与测试对象之间的消息、执行流、数据访问以及函数和系统调用。

    © 1987 - 2001 Rational Software Corporation。版权所有。

  • 超好用的英语四词短句

    2009-02-26 13:14:28

     

      Are you by yourself? 你一个人来吗?

      Are you kidding me? 跟我开玩笑啊?

      Back in a moment! 马上回来!

      Boys will be boys! 本性难移!

      Come to the point! 有话直说!

      Do I have to? 我一定要做吗?

      Don't count on me! 别指望我!

      Don't fall for it! 别上当!

      Don't get me wrong! 你搞错了!

      Don't give me that! 少来这套!

      Don't let me down! 别让我失望!

      Don't over do it! 别做过头了!

    Drop me a line! 要写信给我!

    Easy come easy go! 来得容易去也快!

      Get a move on! 快点吧!

      Give me a break! 饶了我吧!

      Glad you like it! 很高兴你喜欢!

      Great minds think alike! 英雄所见略同!

      He always talks big! 他老是吹牛!

      He's a double crosser! 他是个骗子!

      I cross my heart! 我发誓是真的!

      I just made it! 我做到了!

      I watch my money! 视财如命!

      I'll be right back! 我马上回来!

      I'll check it out! 我去查查看!

      I’ll see to it! 我会留意的!

      I'm down and out! 我穷困潦倒!

      I’m in a hurry! 我赶时间!

      I’m not that bad! 我没那么差吧?

      I’m short on cash! 我缺钱!

      I’ve got the blues! 我很郁闷!

      If I were you...=if I were in your shoes如果我是你...

      It kills my eyes! 太好看了!

      It’s Greek to me! 我完全不懂!

      It’s no big deal! 没什么大不了的!

      It’s worth a try! 值得一试!

      Just wait and see! 等着瞧!

      Know what I mean? 明白我的意思吧?

      Let’s change the subject! 换个话题吧!

      My mouth is watering! 我要流口水了!

      No pain no gain! 吃一堑长一智!

      None of your business! 没你事!

      She’s under the weather! 她今天很忧郁!

      So far, so good! 还过得去!

      Speaking of the devil! 说曹操,曹操到!

      Stay away from me! 离我远点!

      That makes no difference! 不都一样吗?

      The walls have ears! 隔墙有耳!

      We better get going! 最好马上就走!

      We’re all for it! 我们都赞成!

      What’s on your mind? 你在想什么?

      You are the boss! 你是老大!

      You asked for it! 你自讨苦吃!

      You have my word! 我保证!

      You want a bet? 你敢打赌吗?

      You’re pulling my leg! 你开玩笑吧?

     

  • 很有哲理的英语。。。。。

    2009-02-26 13:13:29

     

    1.现在睡觉的话会做梦而现在学习的话会让梦实现

    This moment will nap, you will have a dream; But this moment study,you

    will interpret a dream.

    2.我无所事事地度过的今天是昨天死去的人们所奢望的明天

    I leave uncultivated today, was precisely yesterdayperishes tomorrow which person of the body implored.

    3.感到晚了的时候其实是最快的时候

    Thought is already is late, exactly is the earliest time.

    4.不要把今天的事拖到明天

    Not matter of the today will drag tomorrow.

    5.学习的痛苦是一时的而没有学习的痛苦是一辈子的

    Time the study pain is temporary, has not learned the pain islife-long.

    6.学习不是人生的全部但连学习都征服不了你还能做什么?

    The study certainly is not the life complete. But, sincecontinually life

    part of - studies also is unable to conquer, what butalso can make?

    7.学习不是因为缺少时间而是缺少努力

    Studies this matter, lacks the time, but is lacks diligently.

    8.所有人的成功都不是偶然的

    Nobody can casually succeed, it comes from the thoroughself-control and

    the will.郭澧葱

    9.无法避免的痛苦就去享受吧!

    Please enjoy the pain which is unable to avoid.

    10.早起的鸟儿有虫吃

    Only has compared to the others early, diligently diligently, canfeel the

    successful taste.

    11.成功并不属于每个人

    Nobody can casually succeed

    12.时间在流逝

    HOW time flies

    13.今天流下的口水将变成明天流下的泪水

    Now drips the saliva, will become tomorrow the tear

  • windowsXP下mantis的配置文件内容

    2009-02-26 12:56:34

    配置前的配置:

    apache2.2.10、php5.2.8、mysql5.0.18、JpGraphv2.3.3

    mantis-1.1.6

    其中mantis的配置文件内容如下:

    打开mantis地下的config_inc.php.samp文件复制并改名为config_inc.php。 这个文件就是mantis的重量级文件了。我们的配置几乎都集中在这里了,配置后的内容为:

    <?php 
     # --- database variables ---------
     # set these values to match your setup
     $g_hostname = 'localhost:3306';
     $g_db_username = 'root';
     $g_db_password = 'admin';
     $g_database_name = 'bugtracker';
     $g_db_type = 'mysql';
     $g_default_language ='chinese_simplified';
     $g_window_title = 'mantis BUG管理系统';
     $g_page_title = '欢迎使用Mantis BUG 跟踪管理系统 趣得网 无需注册 免费 

    发布';
     $g_show_queries_count = OFF;

     # --- email variables -------------

     $g_use_phpMailer = ON; #使用phpMailer

     $g_phpMailer_path = 'D:/mantisbt-1.1.6/core/phpmailer'; //phpMailer路 

     $g_phpMailer_method = 2; #使用SMTP服务

     $g_smtp_host = 'smtp.163.com'; #使用SMTP服务

     $g_smtp_username = '353339319';

     $g_smtp_password = '456852';

     $g_administrator_email = '353339319@163.com';

     $g_webmaster_email = '353339319@163.com';

     $g_from_email = '353339319@163.com';

     $g_return_path_email = '353339319@163.com';

     # --- file upload settings --------

     $g_allow_file_upload = ON; //使用上传文件功能

     $g_file_upload_method = DISK;

     $g_max_file_size = 100000000; # 100 MB #设置文件空间

     # --- jpgraph settings --------

     $g_use_jpgraph = ON; # 使用jpgraph

    $g_jpgraph_path = 'D:/mantisbt-1.1.6/core/jpgraph/src'.DIRECTORY_SEPARATOR.''.

    DIRECTORY_SEPARATOR;
    ; # 指定pgraph的路径

     $g_graph_font = 'chinese_gbk'; # 设置jpgraph图形字体
     # --- time settings --------

     $g_short_date_format = 'Y-m-d';
     $g_normal_date_format = 'Y-m-d H:i';
     $g_complete_date_format = 'Y-m-d H:i'; 
    ?>

  • windows下配置apache2.2.x和php5

    2009-02-26 12:01:40

    前几天配置了一下apache2.2.10的和php5的环境。从网上也借鉴了其他一些朋友的方法。最后总结归纳一下自己刚刚配置成功的流程。

     

    首先是需要的东西。

    apache2.2.10的下载地址:http://apache.mirror.phpchina.com/httpd/binaries/win32/apache_2.2.10-win32-x86-no_ssl.msi

    php5.2.6的下载地址:http://cn2.php.net/distributions/pecl-5.2.6-Win32.zip

    如果链接失效的话那么就去官方网站重新找最新版本的下载就可以了。下面说过程。

     

    首先是安装Apache2.2.10。其实具体安装步骤还是一样的,一直next和把自己想要配置的地方个别配置一下就可以了。

    最好在安装路径里不要有中文和空格。我的路径是D: \Apache2.2.10

    安装完后在安装目录下有个conf文件夹,打开httpd.conf文件进行配置。

    找到 DocumentRoot ,将其设置为你所要存放php, htm等网页文件的文件夹,如 DocumentRoot "D: /Apache2.2.10/htdocs"

    找到 DirectoryIndex ,在index.html后添加index.php, index.htm等,以单个空格将其分开

     

    然后就可以配置php

    php的压缩包解压。我是放在了D: \php

    其中D\php\下有个php.ini-recommended文件

    只要将文件重命名为php.ini即可,不用移动该文件

    系统变量下找到“Path”变量,选择,双击或点击编辑,将“;D:\php;D:\php\ext”加到原有值的后面,当然,其中的“D:\php” 是我的安装目录,你要将它改为自己的php安装目录
    extension_dir 改为php/ext所在目录,extension_dir = "D: \php\ext"

    doc_root 改为第一步中的同样目录。DocumentRoot "D: /Apache2.2.10/htdocs"

    找到 ;session.save_path = "/tmp" ,';'去掉,设置你保存session的目录,session.save_path = "D: /php/session_temp"(如果php下没有session_temp文件,你就需要新建一个)

    然后把下面几句前面的分号去掉,以更好支持Mysql and PHPmyadmin
    extension=php_mbstring.dll
    extension=php_gd2.dll
    extension=php_mysql.dll

      

    然后再次打开httpd.conf,添加下面内容(位置任意)
    LoadModule php5_module "D: /php/php5apache2_2.dll"
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .htm

     

    最后在你的php目录里找到php5ts.dll libmysql.dll则复制到c:\windows\system32下。然后重启apache

     

     测试PHP设置:

    D:\apache_2.2.10\htdocs目录下新建hello.php
    <html>
    <head><title>test</title></head>
    <body>
    <?php
    ?php echo "hello.php";
    ?>
    </body>
    </html>

    然后在 我们的浏览器中输入http://localhost/hello.php,如果能够正确的显示hello,php就说明我们的PHP配置是可以正常工作 的。

    然后在 我们的浏览器中输入http://localhost:8080/hello.php,如果能够正确的显示hello,php就说明我们的PHP配置是可以正常工作 的。

  • SQA测试过程(摘录)

    2009-02-10 10:46:11

    SQA测试过程

    测试生命周期

      测试计划 → 测试设计 → 测试开发 → 测试执行 → 测试评估

      测试计划就是定义一个测试项目的过程,以便能够正确的度量和控制测试。

     

    第一部分:测试计划

     

    测试计划的问题

      1、测试计划经常是等到开发周期后期才开始实行,使得没有时间有效的执行计划;

      2、测试计划的组织者可能缺乏Client/Server测试经验;

      3、测试的量度和复杂性可能太大,没有自动化工具,很难计划和控制。

    测试策略


      测试策略描述测试工程的总体方法和目标。描述目前在进行哪一阶段的测试(单元测试、集成测试、系统测试)以及每个阶段内在进行的测试种类(功能测试、性能测试、压力测试等)。

      测试策略包括

      1、要使用的测试技术和工具;

      2、测试完成标准;

      3、影响资源分配的特殊考虑例如测试与外部接口或者模拟物理损坏、安全性威胁。

      测试计划最关键的一步就是将软件分解成单元,写成测试需求。


      测试需求有很多分类方法,最普通的一种就是按照商业功能分类。把软件分解成单元元件有几个好处:

      1、测试需求是测试设计和开发测试用例的基础,分成单元可以更好地进行设计;

      2、详细的测试需求是用来衡量测试覆盖率的重要指标;

      3、测试需求包括各种测试实际和开发以及所需资源。

    怎样估计测试工作量

      1、效率假设:即测试队伍的工作效率。对于功能测试,这主要依赖于应用的复杂度,窗口的个数,每个窗口中的动作数目。对容量测试,主要依赖于建立测试所需数据的工作量大小。

      2、测试假设:为了验证一个测试需求所需测试动作数目。

      3、应用的维数:应用的复杂度指标。例如要加入一个记录,测试需求的维数就是这个记录中域的数目。

      4、所处测试周期的阶段:有些阶段主要工作都在设计,有些阶段主要是测试执行。

    测试资源


      1、人力资源

      测试经理

      为测试项目提供总体方向。开发测试计划、征集并监督测试人员、申请系统资源、监视并汇报工作进程、测试评估、测试需求的分解。

      测试工程师 ---- 设计和开发

      设计:对被测软件的详细了解、分解测试需求的技能、选择在C/S环境下用来验证测试需求的技术。

      开发:熟悉SQA、VB、和脚本语言。

      测试工程师 ---- 执行

      负责测试执行和记录结果。需要能够安装系统,网络知识,初始化数据库和其他初始条件。重要的是诊断能力。

      测试系统管理者

      每个测试项目必须指定一个专人负责管理SQA Suite。包括在服务器上安装存储库,安装打印机连接,执行备份,以及其他维护工作。管理者必须高度熟悉SQA,网络工作经验。

      2、系统资源

      安装SQA Suite的硬件和软件环境

      数据库服务器

      该服务器必须专用于 测试工作,能够重置某些初始值,包括系统日期和时间等。

    写测试计划的步骤:


      1、确定工程

      收集下列信息

    文档 已创建(是/否) 版本/日期
    需求详述    
    功能详述    
    项目计划    
    设计详述    
    原型    
    用户手册    

      定义新的工程,Adminà New Project。

      确定软件的结构,用Assetsà Software Structure选项定义软件结构。

      2、定义测试策略

    测试策略项 例子
    测试阶段 系统测试
    测试类型 功能测试
    测试技术 75%用SQA Suite自动测试,25%手工测试
    完成标准 95%测试用例通过并且最高级缺陷全部解决
    特殊考虑 测试必须在上午进行

      3、分解软件,写测试需求

      
    分析各种信息

      反复检查并理解各种信息,和用户交流,理解他们的要求。可以按照以下步骤执行:

      1、确定软件提供的主要商业任务

      2、对每个商业任务,确定完成该任务所要进行的交易。

      3、确定从数据库信息引出的计算结果。

      4、对于对时间有要求的交易,确定所要的时间和条件。这些条件包括数据库大小、机器配置、交易量、以及网络拥挤情况。

      5、确定会产生重大意外的压力测试,包括:内存、硬盘空间、高的交易率

      6、确定应用需要处理的数据量。

      7、确定需要的软件和硬件配置。通常情况下,不可能对所有可能的配置都测试到,因此要选择最有可能产生问题的情况进行测试,包括:最低性能的硬件、几个有兼容性问题的软件并存、客户端机器通过最慢的LAN/WANF连接访问服务器。

      8、确定其他与应用软件没有直接关系的商业交易。包括:

        管理功能,如启动和推出程序
        配置功能,如设置打印机
        操作员的爱好,如字体、颜色
        应用功能,如访问email或者显示时间和日期。

      9、确定安装过程,包括定置从哪安装、定制安装、升级安装。

      10、确定没有隐含在功能测试中的户界面要求。大多界面都在功能测试时被测试到。还有写没有测到,如:操作与显示的一致性,如使用快捷键等;界面遵从合理标准,如按钮大小,标签等。

      
    把需求组织成层次图

      4、估计测试工作量

      ∑(每个测试的时间*每个需求的测试的数目*测试需求的的数目)
      (测试设计、开发、….)

      5、确定资源

      人力资源

    职位 姓名 特殊责任/说明
    测试经理    
    测试工程师
    设计/开发(可以多人)
       
    测试工程师
    测试执行(可以多人)
       
    测试系统管理员    

      系统资源

    系统 名称/类型
    数据库服务器

    网络/子网

    服务器名称

    数据库名称

     
     
     
     
    SQA 测试存储库

    网络/子网

    服务器名称

     
     
     
    客户测试机

    包括专门的配置需求

    列表
     
    测试开发的PC机 列表

      6、创建工程调度表

    任务 相关工作量(天)
    整个SQA过程 38
    测试计划 12
    确定项目 1
    定义测试策略  
    决定测试需求  
    估计工作量  
    确定资源  
    调度测试活动  
    生成测试计划文档  
    测试设计 7
    分析测试需求  
    指定测试过程  
    指定测试用例  
    查看测试需求的覆盖率  
    测试开发 12
    建立测试开发环境  
    录制和回放原型过程  
    开发测试过程  
    测试和调试测试过程  
    修改测试过程  
    建立外部数据集合  
    重新测试并调试测试过程  
    测试执行 6
    设置测试系统  
    执行测试  
    验证测试结果  
    调查突发结果(unexpected result)  
    生成缺陷日记  
    测试评估 1
    回顾测试日记  
    评估测试需求的覆盖率  
    评估缺陷  
    决定是否达到测试完成的标准  

      7、书写测试计划

      1、介绍

        目的
        背景
        测试范围
        项目文件列表

      2、测试需求

      3、测试策略

        测试类型

        1、功能测试
        2、用户界面测试
        3、性能测试
        4、压力测试
        5、容量测试
        6、配置测试
        7、安装测试

        工具

      4、资源

        人力资源
        系统资源

      5、调度

      6、文档

        软件元件
        测试特性(Assets)
        测试日记
        缺陷报告

     

    第二部分:测试设计

     

    测试设计的问题

      1、不做测试设计,测试过程也是胡乱建立的。

      2、测试设计不详细,不是基于可量度的测试策略,例如测试计划覆盖一个集合或者测试需求的一个子集。

      3、测试过程没有采用最好的技术来检验Windows C/S结构的测试需求

    测试用例的选择规则


      1、选择与测试需求的实质部分最相关的测试用例。

      2、选择的测试用例应该不容易应用程序的改变的影响。

      下面是选择测试用例的几点具体规则:

      1、商业函数

      商业函数一般与数据库有关,要测试数据库的变化,有几种方法:
      1、如果数据库的的改变会反映在一个列表框中,那么就要选择验证列表框内容的测试用例。
      2、还可以检查交易完成后的确认对话框。可以检查对话框的标题。图象比较也可以检查确认对话框,但图象比较容易受其他因素影响。
      3、修改脚本,SQA Basic提供了强大的数据库支持。

      2、域的验证

      各种不同的域选择相应的测试用例。

      3、用户界面测试

      对象状态测试用例

      4、性能标准

      等待状态测试用例

      5、压力下的操作

      6、访问控制

      Object state test case

      7、配置测试

      不能选择图象测试用例(也分辨率有关)和文件测试用例(与驱动器有关)

      8、安装选项和验证

      对象状态用例和窗口存在用例,文件存在用例。

    书写测试设计的步骤

        生成测试需求报告
           ↓
         指定测试过程
           ↓
       指定测试用例(可选)
           ↓
        回顾测试覆盖率

     

    第三部分:测试开发

     

    输入:被测软件、基于测试需求的测试设计

    输出
    :测试过程和测试用例

    目标


      1、创建可以重用的测试过程和测试用例
      2、维护测试过程、测试用例与相关测试需求的一一对应。

    测试开发的问题


      1、测试开发很乱,与测试需求或测试策略没有对应性
      2、测试过程不可重复或不可重用
      3、测试过程被作为一个编程任务来执行,导致脚本太长,不能满足软件移植性的要求。

    错误处理


      当测试过程发生错误时,有几种解决办法:

      1、跳转到别的测试过程
      2、调用一个能够清除错误的过程
      3、退出过程,启动另一个
      4、退出过程和应用程序,重新启动启动Windows,在失败的地方重新开始测试

    测试开发的步骤


      1、设立开发环境

        SQA Suite
        连接到SQA存储库
        启动SQA Baisc或VB
        被测软件
        等等

      2、录制和回放原型过程

      原型过程指出所有未知窗口控制,使得他们都能象标准窗口那样动作或者没有特别的动作,把他们都划归为Generic类型。通过这个过程,SQA Robot就知道该怎样处理应用中的特殊控制。

      1、把recording option 中的Define Unknown Object as Type Generic选项设置为off
      2、使用的过程标识符要可以被覆盖,或者能被删掉。因为这只是个原型,用来教SQA Robot 录制的过程

      3、录制测试过程和测试用例

      1、录制模块测试过程和与测试需求最低层对应的测试用例;
      2、录制初始化过程;
      3、录制导航过程,把前面的过程串起来;

      4、测试和调试测试过程

      5、修改测试过程(可选)

      6、建立外部数据集合

      如果测试过程是用来循环一套输入和输出数据,就需要建立数据集合。

      7、重复测试和调试测试过程,回到4

     

    第四部分:测试执行

     

    测试执行的问题

      1、自动化测试没有有效的利用,使得手工测试太多。
      2、测试结果的捕获没有系统性,而且没有查看或调查
      3、缺陷报告必须用手工加入缺陷跟踪系统

    错误分类


      1、测试用例失败

        正常错误

      2、脚本命令失败

        当测试过程不能不能执行录制过程中的某个功能时,回产生这种错误,如鼠标单击按钮或选择菜单项等。它也能指示是缺陷还是测试过程的设计问题。

      3、致命错误

        导致测试停止,这种情况最好重起Windows。

    具体步骤:


      1、建立测试系统
      2、准备测试过程
      3、运行初始化过程
      4、执行测试
      5、从终止的测试恢复
      6、验证预期结果
      7、调查突发结果
      8、记录缺陷日记

     

    第五部分:测试评估

     

    测试评估的目标

      1、量化测试进程
      2、生成缺陷和测试覆盖率的总结报告

    测试评估的问题


      1、没有把测试覆盖率作为报告测试进程的根据,使得不知测试是否结束;
      2、没有做缺陷评估,缺陷评估是量度软件可行性的重要指标;
      3、不使用专门的软件工具进行数据输入任务和相应的评估活动,使得这些任务变得繁重累人。

    测试覆盖率


      评估测试完成多少的标准

    缺陷评估


      评估软件质量的重要指标,通常评估模型假设缺陷的发现是呈泊松分布的;严格的缺陷评估要考察在测试过程中发现缺陷的间隔时间长短。评估要估计软件当前的可靠性并预测随着测试的继续进行,软件可靠性会怎样提高。

      SQA Suite 提供四种形式进行缺陷评估:

      1、缺陷分布报告可以生成缺陷数量与缺陷属性的函数。如测试需求和状态。
      2、缺陷趋势报告可以看出缺陷增长和减少的趋势;
      3、缺陷年龄报告展示一个缺陷处于某种状态的时间长短
      4、测试结果进度报告展示测试过程在被测应用的几个版本中的执行结果以及测试周期。

    具体步骤


      1、回顾测试日记

      2、评估测试需求的覆盖率

      3、分析缺陷

      4、决定是否达到完成测试的标准,没有满足标准时

        1、再测试
        2、降低标准
        3、确定软件的一个满足标准的子集,看是否可以发布。

  • 站点测试 Web Testing(摘录)

    2009-02-10 10:32:32

    站点测试 Web Testing

    By Tim Van Tongeren


     

    介绍
      本文将 web 测试分为 6 个部分:

      本文的目的是覆盖 web 测试的各个方面,未就某一主题进行深入说明。

    用户界面
    使用 Web 浏览器作为应用程序的前台的一个原因就是它易于使用。用户知道如何浏览一个构建良好的网站。如果你注重这方面的测试,那么验证应用程序是否易于使用就非常重要了。很多人认为这是测试中最不重要的部分,但是如果你想通过网站赚钱,最好使你的网站使用起来更加方便。

    使用说明
    应该确认你的站点有使用说明。即使你认为你的网站很简单,也可能有人在某些方面需要征实一下。测试人员需要测试说明文档,验证说明是正确的。还可以根据说明进行操作,确认出现预期的结果。

    站点地图和导航条
    确认你测试的站点是否有地图。有些网络高手可以直接去自己要去的地方,而不必点击一大堆页面。另外新用户在网站中可能会迷失方向。站点地图和/或导航条可以引导用户进行浏览。需要验证站点地图是否正确。确认地图上的链接是否确实存。地图有没有包括站点上的所有链接。是否每个页面都有导航条? 导航条是否一致? 每个页面的链接是否正常? 导航条是否直观?

    内容
    对于开发人员来说,可能先有功能然后才对这个功能进行描述。大家坐在一起讨论一些新的功能,然后开始开发,在开发的时候,开发人员可能不注重文字表达,他们添加文字可能只是为了对齐页面。不幸的是,这样出来的产品可能产生严重的误解。因此测试人员和公关部门一起检查内容的文字表达是否恰当。否则,公司可能陷入麻烦之中,也可能引起法律方面的问题。测试人员应确保站点看起来更专业些。过分地使用粗体字、大字体和下划线可能会让用户感到不舒服。在进行用户可用性方面的测试时,最好先请图形设计专家对站点进行评估。你可能不希望看到一篇到处是黑体字的文章,所以相信您也希望自己的站点能更专业一些。 最后,需要确定是否列出了相关站点的链接。很多站点希望用户将邮件发到一个特定的地址,或者从某个站点下载浏览器。但是如果用户无法点击这些地址,他们可能会觉得很迷惑。

    颜色/背景
    由于 web 日益流行,很多人把它看作图形设计作品。不幸的是,有些开发人员对新的背景颜色更感兴趣,以至于忽略了这种背景颜色是否易于浏览。典型的站点是在紫色图片的背景上显示黄色的文本(如果你没有见过这样的站点,请浏览一下 GeoCitiesAOL 上的个人主页,有不少这样的)。这种页面显得"非常高贵",但是看起来很费劲。通常来说,使用少许或尽量不使用背景是个不错的选择。如果您想用背景,那么最好使用单色的,和导航条一起放在页面的左边。另外,图案和图片可能会转移用户的注意力。

    图片
    无论作为屏幕的聚焦点或作为指引的小图标,一张图片都胜过千言万语。有时,告诉用户一个东西的最好办法就是将它展示给用户。但是,带宽对客户端或服务器来说都是非常宝贵的,所以要注意节约使用内存。是否所有的图片对所在的页面都是有价值的,或者它们只是浪费带宽? 使用其它的文件格式(.GIF, .JPG) 是否能使图片的大小减小到 30k 以下? 通常来说,不要将大图片放在首页上,因为这样可能会使用户放弃下载首页。如果用户可以很快看到首页,他可能会浏览站点,否则可能放弃。

    表格
    需要验证表格是否设置正确。用户是否需要向右滚动页面才能看见产品的价格?把价格放在左边,而把产品细节放在右边是否更有效? 每一栏的宽度是否足够宽,表格里的文字是否都有折行?是否有因为某一格的内容太多,而将整行的内容拉长?

    回绕
    最后,需要验证的是文字回绕是否正确。如果说明文字指向右边的图片,应该确保该图片出现在右边。不要因为使用图片而使窗口和段落排列古怪或者出现孤行。

     

    功能测试
    Web 站点的功能是贵公司雇佣开发人员而不只是艺术家的原因。就是这一部分与服务器通讯并且最终完成任务。  

    链接
    链接是使用户从一个页面浏览到另一个页面的重要手段。对于每个链接,需要验证两件事情: 一是该链接将用户带到它所说明的地方,另外就是被链接页面是存在的。这句话听起来有些问题,但是有很多多站点的内部链接都是空的。这实在是无法忍受。

    表单
    当用户通过表单提交信息的时候,都希望表单能正常工作。如果使用表单来进行在线注册,要确保提交按钮能正常工作,当注册完成后应返回注册成功的消息。如果使用表单收集配送信息,应确保程序能够正确处理这些数据,最后能让顾客能让客户收到包裹。要测试这些程序,需要验证服务器能正确保存这些数据,而且后台运行的程序能正确解释和使用这些信息。

    数据校验
    如果系根据业务规则需要对用户输入进行校验,需要保证这些校验功能正常工作。例如,省份的字段可以用一个有效列表进行校验。在这种情况下,需要验证列表完整而且程序正确调用了该列表(例如在列表中添加一个测试值,确定系统能够接受这个测试值)。

    Cookies
    很多用户喜欢甜食,但是开发人员喜欢 web cookie (小甜饼)。如果系统使用了cookie,测试人员需要对它们进行检测。如果在 cookies 中保存了注册信息,请确认该 cookie能够正常工作而且已对这些信息已经加密。如果使用 cookie 来统计次数,需要验证次数累计正确。  

    应用程序特定的功能需求
    最重要的是,测试人员需要对应用程序特定的功能需求进行验证。尝试用户可能进行的所有操作:下订单、更改订单、取消订单、核对订单状态、在货物发送之前更改送货信息、在线支付等等。这是用户之所以使用网站的原因,一定要确认网站能像广告宣传的那样神奇。

     

    接口测试
    在很多情况下,web 站点不是孤立。Web 站点可能会与外部服务器通讯,请求数据、验证数据或提交订单。

    服务器接口
    第一个需要测试的接口是浏览器与服务器的接口。测试人员提交事务,然后查看服务器记录,并验证在浏览器上看到的正好是服务器上发生的。测试人员还可以查询数据库,确认事务数据已正确保存。

    外部接口
    有些 web 系统有外部接口。例如,网上商店可能要实时验证信用卡数据以减少欺诈行为的发生。测试的时候,要使用 web 接口发送一些事务数据,分别对有效信用卡、无效信用卡和被盗信用卡进行验证。如果商店只使用 Visa 卡和 Mastercard 卡, 可以尝试使用 Discover 卡的数据。(简单的客户端脚本能够在提交事务之前对代码进行识别,例如 3 表示 American Express4 表示 Visa5 表示 Mastercard6 代表Discover。)通常,测试人员需要确认软件能够处理外部服务器返回的所有可能的消息。  

    错误处理
    最容易被测试人员忽略的地方是接口错误处理。通常我们试图确认系统能够处理所有错误,但却无法预期系统所有可能的错误。尝试在处理过程中中断事务,看看会发生什么情况?订单是否完成?尝试中断用户到服务器的网络连接。尝试中断 web 服务器到信用卡验证服务器的连接。在这些情况下,系统能否正确处理这些错误?是否已对信用卡进行收费?如果用户自己中断事务处理,在订单已保存而用户没有返回网站确认的时候,需要由客户代表致电用户进行订单确认。

     

    兼容性测试
    需要验证应用程序可以在用户使用的机器上运行。如果您用户是全球范围的,需要测试各种操作系统、浏览器、视频设置和 modem 速度。最后,还要尝试各种设置的组合。

    操作系统
    你的站点能否在 MAC IBM 兼容系统上浏览? 有些字体在某个系统上可能不存在,因此需要确认选择了备用字体。如果用户使用两种操作系统,请确认站点未使用只能在其中一种操作系统上运行的插件。

    浏览器
    站点能否使用 NetscapeInternet Explorer Lynx 进行浏览? 有些 HTML 命令或脚本只能在某些特定的浏览器上运行。请确认有图片的替代文字,因为可能会有用户使用文本浏览器。如果您使用 SSL 安全特性,则只需对 3.0 以上版本的浏览器进行验证,但是对于老版本的用户应该有相关的消息提示。

    视频设置
    页面版式在 640x400600x8001024x768 的分辨率模式下是否显示正常? 字体是否太小以至于无法浏览? 或者是太大? 文本和图片是否对齐?

    Modem/连接速率
    是否有这种情况,用户使用 28.8 modem下载一个页面需要 10 分钟,但测试人员在测试的时候使用的是 T1 专线? 用户在下载文章或演示的时候,可能会等待比较长的时间,但却不会耐心等待首页的出现。最后,需要确认图片不会太大。

    打印机
    用户可能会将网页打印下来。因此网也在设计的时候要考虑到打印问题,注意节约纸张和油墨。有不少用户喜欢阅读而不是盯着屏幕,因此需要验证网页打印是否正常。有时在屏幕上显示的图片和文本的对齐方式可能与打印出来的东西不一样。测试人员至少需要验证订单确认页面打印是正常的。

    组合测试
    最后需要进行组合测试。600x800 的分辨率在 MAC 机上可能不错,但是在 IBM 兼容机上却很难看。在 IBM 机器上使用 Netscape 能正常显示,但却无法使用 Lynx 来浏览。如果是内部使用的 web 站点,测试可能会轻松一些。如果公司指定使用某个类型的浏览器,那么只需在该浏览器上进行测试。如果所有的人都使用 T1 专线,可能不需要测试下载施加。(但需要注意的是,可能会有员工从家里拨号进入系统) 有些内部应用程序,开发部门可能在系统需求中声明不支持某些系统而只支持一些那些已设置的系统。但是,理想的情况是,系统能在所有机器上运行,这样就不会限制将来的发展和变动。

     

    负载/压力测试
    测试需要验证系统能否在同一时间响应大量的用户,在用户传送大量数据的时候能否响应,系统能否长时间运行。可访问性对用户来说是极其重要的。如果用户得到“系统忙”的信息,他们可能放弃,并转向竞争对手。系统检测不仅要使用户能够正常访问站点,在很多情况下,可能会有黑客试图通过发送大量数据包来攻击服务器。出于安全的原因,测试人员应该知道当系统过载时,需要采取哪些措施,而不是简单地提升系统性能。

    瞬间访问高峰
    如果您的站点用于公布彩票的抽奖结果,最好使系统在中奖号码公布后的一段时间内能够响应上百万的请求。负载测试工具能够模拟 X 个用户同时访问测试站点。

    每个用户传送大量数据
    网上书店的多数用户可能只订购 1-5 书,但是大学书店可能会订购 5000 本有关心理学介绍的课本? 或者一个祖母为她的 50 个儿孙购买圣诞礼物(当然每个孩子都有自己的邮件地址) 系统能处理单个用户的大量数据吗?

    长时间的使用
    如果站点用于处理鲜花订单,那么至少希望它在母亲节前的一周内能持续运行。如果站点提供基于 webemail 服务,那么点最好能持续运行几个月,甚至几年。可能需要使用自动测试工具来完成这种类型的测试,因为很难通过手工完成这些测试。你可以想象组织100 个人同时点击某个站点。但是同时组织 100000 个人呢。通常,测试工具在第二次使用的时候,它创造的效益,就足以支付成本。而且,测试工具安装完成之后,再次使用的时候,只要点击几下。

     

    安全性测试
    即使站点不接受信用卡支付,安全问题也是非常重要的。Web 站点收集的用户资料只能在公司内部使用。如果用户信息被黑客泄露,客户在进行交易时,就不会有安全感。

    目录设置
    Web 安全的第一步就是正确设置目录。每个目录下应该有 index.htmlmain.html 页面,这样就不会显示该目录下的所有内容。我服务的一个公司没有执行这条规则。我选中一幅图片,单击鼠标右键,找到该图片所在的路径"…com/objects/images"。然后在浏览器地址栏中手工输入该路径,发现该站点所有图片的列表。这可能没什么关系。我进入下一级目录 "…com/objects" ,点击 jackpot。在该目录下有很多资料,其中引起我注意的是已过期页面。该公司每个月都要更改产品价格,并且保存过期页面。我翻看了一下这些记录,就可以估计他们的边际利润以及他们为了争取一个合同还有多大的降价空间。如果某个客户在谈判之前查看了这些信息,他们在谈判桌上肯定处于上风。

    SSL
    很多站点使用 SSL 进行安全传送。你知道你进入一个 SSL 站点是因为浏览器出现了警告消息,而且在地址栏中的 HTTP 变成 HTTPS。如果开发部门使用了SSL,测试人员需要确定是否有相应的替代页面(适用于3.0 以下版本的浏览器,这些浏览器不支持SSL。当用户进入或离开安全站点的时候,请确认有相应的提示信息。是否有连接时间限制?超过限制时间后出现什么情况?

    登录
    有些站点需要用户进行登录,以验证他们的身份。这样对用户是方便的,他们不需要每次都输入个人资料。你需要验证系统阻止非法的用户名/口令登录,而能够通过有效登录。用户登录是否有次数限制? 是否限制从某些 IP 地址登录? 如果允许登录失败的次数为3,你在第三次登录的时候输入正确的用户名和口令,能通过验证吗? 口令选择有规则限制吗?  

    日志文件
    在后台,要注意验证服务器日志工作正常。日志是否记所有的事务处理? 是否记录失败的注册企图? 是否记录被盗信用卡的使用? 是否在每次事务完成的时候都进行保存? 记录IP 地址吗? 记录用户名吗?

    脚本语言
    脚本语言是常见的安全隐患。每种语言的细节有所不同。有些脚本允许访问根目录。其他只允许访问邮件服务器,但是经验丰富的黑客可以将服务器用户名和口令发送给他们自己。找出站点使用了哪些脚本语言,并研究该语言的缺陷。最好的办法是订阅一个讨论站点使用的脚本语言安全性的新闻组。

     

    结论
    无论你在测试 internetintranet 或者是 extranet 应用程序,web 测试相对于非 web 测试来说都是更具挑战性的工作。用户对 web 页面质量有很高的期望。在很多情况下,就像业务功能一样,页面用于维护和发展公共关系,所以第一印象非常重要。

  • 测试用例制定的原则

    2009-02-10 10:19:57

    测试用例要包括欲测试的功能、应输入的数据和预期的输出结果。测试数据应该选用少量、高效的测试数据进行尽可能完备的测试;基本目标是:设计一组发现某个错误或某类错误的测试数据,测试用例应覆盖方面:

    1、    正确性测试:输入用户实际数据以验证系统是满足需求规格说明书的要求;测试用 例中的测试点应首先保证要至少覆盖需求规格说明书中的各项功能,并且正常。

    2、    容错性(健壮性)测试:程序能够接收正确数据输入并且产生正确(预期)的输出, 输入非法数据(非法类型、不符合要求的数据、溢出数据等),程序应能给出提示 并进行相应处理。把自己想象成一名对产品操作一点也不懂的客户,在进行任意操作。

    3、    完整(安全)性测试:对未经授权的人使用软件系统或数据的企图,系统能够控制的程度,程序的数据处理能够保持外部信息(数据库或文件)的完整。

    4、    接口间测试:测试各个模块相互间的协调和通信情况,数据输入输出的一致性和正确性。

    5、    数据库测试:依据数据库设计规范对软件系统的数据库结构、数据表及其之间的数据调用关系进行测试。

    6、 边界值分析法:确定边界情况(刚好等于、稍小于和稍大于和刚刚大于等价类边界值),针对我们的系统在测试过程中主要输入一些合法数据/非法数据,主要在边界值附近选取。

    7、 压力测试:输入10条记录运行各个功能,输入30条记录运行,输入50条记录运行。。。进行测试。

    8、等价划分:将所有可能的输入数据(有效的和无效的)划分成若干个等价类。

    9、错误推测:主要是根据测试经验和直觉,参照以往的软件系统出现错误之处。

    10、效率:完成预定的功能,系统的运行时间(主要是针对数据库而言)。

    11、可理解(操作)性:理解和使用该系统的难易程度(界面友好性)。

    12、可移植性:在不同操作系统及硬件配置情况下的运行性。

    13、回归测试:按照测试用例将所有的测试点测试完毕,测试中发现的问题开发人员 已经解决,进行下一轮的测试。

    14、比较测试:将已经发版的类似产品或原有的老产品与测试的产品同时运行比较,或与已往的测试结果比较

    说明:针对不同的测试类型和测试阶段,测试用例编写的侧重点有所不同。

    1、  其中第1、2、6、8、9、13项为模块(组件、控件)测试、组合(集成)测试、系统测试都涉及并重点测试的方面。

    2、  单元(模块)测试(组件、控件)测试:重点测试第5项。

    3、  组合(集成)测试:重点进行接口间数据输入及逻辑的测试,即第4项。

    4、  系统测试:重点测试第3、7、10、11、12、14项。

    5、  其中压力测试和可移植性测试如果是公司的系列产品,可以选用其中有代表性的产品进行一次代表性测试即可。

    6、  GMPS基础测试用例设计完成后,其他的测试项目只编写设计与之不同部分的测试用例。

    7、  对于每个测试项目测试的测试用例不是一成不变的,随着测试经验的积累或在测试其他项目发现有测试不充分的测试点时,可以不断的补充完善测试项目的测试用例。

  • LoadRunner脚本中的乱码问题以及解决办法(摘录)

    2009-02-05 16:22:42

    相信有不少人在使用LoadRunner的过程中都遇到过这样的问题:在录制下来的脚本的中文信息出现了乱码。关于乱码问题,可能大家在网上也能搜到不少相关的解决办法,我在这里就不多说了,大家自己去试验一下吧,到底哪个办法有效也就只有谁用谁知道了!我这里只举一个自己遇到的实际例子来说这个问题,也许不是解决这个问题的唯一办法,但至少也是其中的一个吧。
        被测系统采用Ajax技术,通过录制下来的脚本看起来像下面的样子(省略函数其它部分,下同):
        web_custom_request("CALL-H001I",
            "EncType=text/xml; charset=UTF-8",
            "BodyBinary =<request><meta><verb>CALL</verb><tid>H001I< /tid></meta><data><assuid/><assutype>1</assutype> <mortkind>04</mortkind><goodsasassuflag>0</goodsasassuflag> <assuname>浣忔埧</assuname><papertype>01< /papertype>
    <paperno>鏆傛棤鍙风爜</paperno><paperrecedate/><papergrantorgan/><turncashabil>1</turncashabil>
    <incrensuabil>1</incrensuabil><assuamt>1000000</assuamt>
    <otherassuamt>1000000.00</otherassuamt><assuleftamt/>< custid>A110102641122043#1</custid><custname>闇嶈景榫"
    """x99"
            "</custname><repaynum>1</repaynum><firstmortrate/> <secondmortrate/><mortstate>0</mortstate><note/>< housetype>0</housetype><houseframesign/><houseformsign> 01</houseformsign><housestylesign/><houseaddr>鍘﹂棬< /houseaddr><housearea>100</housearea><compdate/><houseagreno/>
    <carmarksign>A1</carmarksign>
    <carmodel/><carno/><carengino/><carcolor/><caroutyear/><carrejeyear/>
    <bankid>442000050</bankid>
    <operid>031</operid></data></request>"r"n"
            "",

            LAST);
        从上面脚本的黑体部分可以看出,LoadRunner向服务器提交的请求body部分,输入的中文字段被变成了诸如“浣忔埧” 这样的乱码。遇到这样的情况,相信大多数人和我最开始一样,只能不加理会,直接点击回放,然后我们很高兴地发现,脚本回放成功了!这些乱码是可以被LR识别的,而且到应用系统中查看运行的结果,也没有问题,显示的是正确的中文。但是且慢!先不要高兴得太早,我们很快就会意识到:如果这个字段我们是需要进行参数化的怎么办?我们应该如何造出这种乱码的字呢?
        首先,我们直接用正常的字去参数化,这里只举其中的一个例子来说明,比如<assuname>这个字段,我们用参数值“汽车”直接在脚本中替换“浣忔埧”,脚本回放失败。
    然后就想到会不会是所有的中文字段都需要用才行呢?于是把所有的乱码都用简体字替换,脚本回放还是失败。
        通过以上的两点试验,说明直接参数化的方法是行不通的,我们必须另找办法。
    在LoadRunner中,为我们提供了一个字符串编码转换的函数lr_convert_string_encoding,用法如下:

        int lr_convert_string_encoding ( const char *sourceString, const char *fromEncoding, const char *toEncoding, const char *paramName);

        该函数有4个参数,含义如下:

        sourceString:被转换的源字符串。

        fromEncoding:转换前的字符编码。

        toEncoding:要转换成为的字符编码。

        paramName:转换后的目标字符串。

        在本例中可以看到,我们需要把字符编码转换为UTF-8格式,因此用法如下:

        lr_convert_string_encoding("汽车",LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");

        这样一来,就成功地完成了字符串的编码转换。此时我们就可以对"汽车"这个参数进行参数化,参数化的方法很简单,地球人都知道!于是最终的脚本编码看起来像这样:

       lr_convert_string_encoding("lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");

        完整的示例代码如下:

        char string[5000];
        char tmp[10];

        lr_convert_string_encoding(lr_eval_string("{name}"),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,"str");

        strcpy(tmp,lr_eval_string("{str}"));                     
               sprintf(string,"BodyBinary=<request><meta><verb>CALL</verb><tid>H001I</tid></meta>
    <data><assuid/><assutype>1</assutype><mortkind>04</mortkind><goodsasassuflag>0</goodsasassuflag>
    <assuname>%s< /assuname><papertype>01</papertype><paperno>鏆傛棤鍙风爜 </paperno><paperrecedate/><papergrantorgan/><turncashabil> 1</turncashabil><incrensuabil>1</incrensuabil><assuamt> 1000000</assuamt><otherassuamt>1000000.00</otherassuamt> <assuleftamt/><custid>A110102641122043#1</custid><custname> 闇嶈景榫""x99</custname><repaynum>1</repaynum>< firstmortrate/><secondmortrate/><mortstate>0</mortstate> <note/><housetype>0</housetype><houseframesign/>< houseformsign>01</houseformsign><housestylesign/><houseaddr> 鍘﹂棬</houseaddr><housearea>100</housearea>< compdate/><houseagreno/>
    <carmarksign>A1</carmarksign><carmodel/>
    <carno/><carengino/><carcolor/><caroutyear/><carrejeyear/><bankid>442000050</bankid>
    <operid>031</operid>
    </data></request>"r"n",tmp);

        web_custom_request("CALL-H001I",
            "EncType=text/xml; charset=UTF-8",
            string,
            LAST);
  • 人性的经典总结54句

    2009-01-16 17:06:24

    1、一个人炫耀什么,说明内心缺少什么。

    2、一个人越在意的地方,就是最令他自卑的地方。

    3、人都有以第一印象定好坏的习惯,认为一个人好时,就会爱屋及乌,认为一个人不好时,就会全盘否认。

    4、人越是得意的事情,越爱隐藏,越是痛苦的事情越爱小题大作。

    5、这个世界既不是有钱人的世界,也不是有权人的世界,它是有心人的世界。

    6、婚姻的杀手有时不是外遇,而是时间。

    7、当你再也没有什么可以失去的时候,就是你开始得到的时候。

    8、学习要加,骄傲要减,机会要乘,懒惰要除。

    9、童年的无知可爱,少年的无知可笑;青年的无知可怜;中年的无知可叹,老年的无知可悲。

    10、人允许一个陌生人的发迹,却不能容忍一个身边人的晋升。因为同一层次的人之间存在着对比、利益的冲突,而与陌生人不存在这方面的问题。

    11、一个女人喜欢一个男人时,她希望听到谎言;当一个女人厌恶一个男人时,她希望听到真理。

    12、如果你借太多的钱给一个人,你会令此人变成坏人。

    13、现代的婚姻是情感的产物,更是竞争的结晶。

    14、敌人变成战友多半是为了生存,战友变成敌人多半是为了金钱。

    15、有所得是低级快乐,有所求是高级快乐。

    16、天才失败了就是蠢才!

    17、世界上1%的人是吃小亏而占大便宜,而99%的人是占小便宜吃大亏。大多数成功人士都源于那1%。

    18、人如果靠吃饭活着,那饭不叫饭,叫饲料。

    19、中国人学美国人容易,中国人学中国人难。

    20、一个人幸运的前提,其实是他有能力改变自己。

    21、人的成长要接受四个方面的教育:父母、老师、书籍,社会。有趣的是,后者似乎总是与前面三种背道而驰。

    22、经营自己的长处,能使你人生增值;经营你的短处,能使你人生贬值。

    23、生命犹如一片绿叶,随着时间的流逝,慢慢变的枯黄,但他的叶脉还是那么清晰可见。

    24、把事情变复杂很简单,把事情变简单很复杂。

    25、如果是棵小草,即使在最好的企业里,你也长不成大树。果真如此,不如历经风雨,把自己培养成名贵花卉。

    26、二十一世纪工作生存法则就是:建立个人品牌,把你的名字变成钱。

    27、怕爹是孝顺,怕老婆是爱情。

    28、没有不合格的学生,只有不合格的家长。

    29、地球是运动的,一个人不会永远处在倒霉的位置。

    30、我们可以躲开大家,却躲不开一只苍蝇。生活中使我们不快乐的常是一些芝麻小事。

    31、有一种人只做两件事:你成功了,他妒嫉你;你失败了,他笑话你。

    32、笨男人+笨女人=结婚;笨男人+聪明女人=离婚;聪明男人+笨女人=婚外情;聪明男人+聪明女人=浪漫爱情。

    33、任何一个傻瓜都会引诱一个姑娘;但是知道怎样离开她只有成熟男人才能做到。

    34、人有两只眼睛,全是平行的,所以应当平等看人;人的两只耳朵是分在两边的,所以不可偏听一面之词;人虽只有一颗心,然而有左右两个心房,所以做事不但要为自己想,也要为别人想。

    35、企业一定要有偷不去、买不来、拆不开、带不走,溜不掉的独特资源。

    36、失言就是一不小心说了实话。

    37、真诚并不意味着要指责别人的缺点,但意味着一定不恭维别人的缺点。

    38、人的本性就是贪婪,但没有贪婪社会就不会进步。

    39、恋爱是想一个人的心,婚姻是拴一个人的心,爱情是吞一个人的心。

    40、最好的进攻就是进攻自己。

    41、人生的意义不在于拿一手好牌,而在于打好一手坏牌。

    42、成功是一种观念,致富是一种义务,快乐是一种权利。

    43、竞争,其实就是一种友谊,在对手的帮助下提高你的聪明度,害怕竞争的人已经输给了对手。

    44、钱可以帮穷人解决问题,却帮富人制造问题。

    45、把爱情投资在一个人身上,冒险;把爱情投资在许多人身上,危险。

    46、世界上只有想不通的人,没有走不通的路。

    47、真正的财富是一种思维方式,而不是一个月收入数字。

    48、一个人想平庸,阻拦者很少;一个人想出众,阻拦者很多。不少平庸者与周围人关系融洽,不少出众者与周围人关系紧张。

    49、婚后的男女莫不“喜出”“望外”。

    50、三流的化妆是脸上的化妆;二流的化妆是精神的化妆;一流的化妆是生命的化妆。

    51、“危机”两个字,一个意味着危险,另外一个意味着机会,不要放弃任何一次努力。

    52、是英雄表现出来,是人才体现出来,是蠢才显现出来。

    53、“总”要为爱人着想,“经”得起爱人唠叨,“理”应对爱人谦让,男人应当“总经理”。

    54、三人行,必有我师, 三剑客,必有一强, 三角恋,必有一伤

  • 比尔。盖茨给职场新人的10句话

    2009-01-16 17:03:11

    1.人生是不公平的,习惯去接受它吧。

    2.这个世界不会在乎你的自尊,这个世界期望你先做出成绩,再去强调自己的感受。

    3.你不会一离开学校就有百万年薪,你不会马上就是拥有移动电话的副总裁,两者你都必须靠努力赚来。

    4.如果你觉得你的老板很凶,等你当了老板就知道了,老板是没有工作任期保障的。

    5.在速食店煎个汉堡并不是作贱自己,你的祖父母对煎汉堡有完全不同的定义。

    6.如果你一事无成,不是你父母的错,所以不要只会对自己犯的错发牢骚,从错误中去学习。

    7.在你出生前,你的父母并不像现在这般无趣,他们变成这样是因为忙着付你的开销,洗你的衣服,听你吹嘘自己有多了不起,所以在你拯救被父母这代人破坏的热带雨林前,先整理一下自己的房间吧。

    8.在学校里可能有赢家和输家,在人生中却还言之过早,学校可能会不断给你机会找到正确的答案,真实人生中却完全不是这么回事。

    9.人生不是学期制,人生没有寒假,没有哪个雇主有兴趣协助你寻找自我,请用自己的空暇做这件事吧。

    10.电视上演的并不是真实的人生,真实人生中每个人都要离开咖啡厅去上班。

Open Toolbar