发布新日志

  • 用jmeter测试https应用

    2008-06-30 12:01:19

        公司需要测试一个https加密的网站,可以用Jmeter进行测试的时候,查看执行结果树的时候,总是出现重定向错误,于是上网搜索资料,查询到如下的一篇文章,根据里面的说明,修改jmeter的启动文件,居然成功了,于是转载在这里

        实验室的项目是做关于web service的security产品,主要是对soap消息进行加密签名。上一次的性能测试是将单纯调用web service和应用我们的security产品后的web service进行对比,然而差距还是相当明显的,尤其是在高并发的时候,毕竟中间的加密和签名过程是相当消耗时间的。上次review的时候,老师就说性能有很大的程度可以提高,我本来想说基本没太多的空间可以优化(除了之后会加入的线程池,应该会有小幅度性能提升),但是苦于没有数据支持。正好这两天为了准备开题,一直在看一些文章,看到网上有人提到,SSL + WS-Security = Web Service安全保障,主张用https的方式来传输soap消息。虽然不是什么很好的方法,不过不是正好拿来作为产品测试对比的对象嘛。

        tomcat上已经配置好了axis,通过http访问soap消息是没有问题了。但是还没有配置https,所以按着官方文档开始干活了。首先用keytool生成服务器段的keystore:

    keytool -genkey -alias tomcat -keystore ktomcat.keystore

        注意,alias的密码要与keystore的密码一致,tomcat文档上是这么说的。接着是修改了server.xml:

    <Connector
               port="8443" protocol="HTTP/1.1" minSpareThreads="5" maxSpareThreads="75"
               enableLookups="true" disableUploadTimeout="true"
               acceptCount="100"  maxThreads="200"
               scheme="https" secure="true" SSLEnabled="true"
               keystoreFile="ktomcat.keystore" keystorePass="changeit"
               clientAuth="false" sslProtocol="TLS"/>

        重启tomcat之后,输入https://localhost:8443进行验证(注意是8443哦,我一开始居然傻乎乎的输入8080^_^)

        接着设置客户端的trustStore,jmeter需要它来信任tomcat服务器段的证书

    keytool -export -alias tomcat -keystore ktomcat.keystore -file tomcat.crt
    keytool -import -alias tomcat -file tomcat.crt -keystore tclient.keystore

        tomcat上的https配置成功之后,就开始jmeter的配置了,默认情况下用jmeter是不可以访问我们配置的https应用的,不过却可以访问像google等网站上的https应用,原因很简单,我们自己生成的证书是不被信任的。jmeter的官方网站有一个很大的陷阱,上面说只要修改jmeter.properties参数,将SSL Configuration部分内的注释去掉就可以了,如下

    #---------------------------------------------------------------------------
    # SSL configuration
    #---------------------------------------------------------------------------

    #Classname of the ssl provider to be used (to enable testing of https urls)
    #And the package name where Stream Handlers can be found
    #These provided defaults can be uncommented, and they will work if you are using
    #Sun's JSSE implementation.

    ssl.provider=com.sun.net.ssl.internal.ssl.Provider
    ssl.pkgs=com.sun.net.ssl.internal.www.protocol

    #The location of the truststore (trusted certificates) and keystore ( if other than the default.
    #you can uncomment this and change the path to the correct location.
    javax.net.ssl.trustStore=/home/flyerhzm/software/jakarta-jmeter-2.2/tclient.keystore
    javax.net.ssl.keyStore=/home/flyerhzm/software/jakarta-jmeter-2.2/kclient.keystore

    #The password to your keystore
    javax.net.ssl.keyStorePassword=changeit

        不过结果还是失败,尝试了好多次,总是报SSLHandshakeException。如果是通过浏览器访问的话,浏览器都会提醒你对方的证书不合法,是否要信任它,但是java是不会询问你,而是直接抛出异常。但是如果设置了trustStore的话,就会信任对方的证书啦,太奇怪了。

        google了一下有关SSLHandshakeException,网上有说可以用-D方式添加应用参数,于是打开了jmter启动文件,修改最后一句话为:

    java $JVM_ARGS $ARGS -jar `dirname $0`/ApacheJMeter.jar -Djavax.net.ssl.trustStore=/home/flyerhzm/software/jakarta-jmeter-2.2/tclient.keystore -Djavx.net.ssl.trustStorePassword=changeit "$@"

        居然成功了,呵呵。可恶,配置文件jmeter.properties居然不起作用,害我辛苦到现在。

        趁热打铁,测试了一下通过https访问web service,果然比应用我们的security产品要多消耗1倍多的时间,赞,终于有数据可以说服老师了,哈哈。

  • QTP中连接MYSQL数据库

    2008-06-30 11:22:36

    QTP中连接MYSQL束手无策,其实根本原因是默认的我们的操作系统中ODBC驱动里默认不支持开源的MySQL驱动。

    要解决这个问题的方法非常简单,安装一个相关的驱动就能解决问题了。这里给出这个驱动程序的下载地址: MyODBC-3.51.11-2-win.exe

    安装完毕后,到控制面板--管理工具--数据源ODBC--系统DSN”把它添加进来,步骤如下:

    1. 点击添加,弹出系统中存在的数据库驱动选择框,在这里面选择刚才添加的mysql数据库驱动   MyODBC-3.51.11 Driver 然后点击完成,弹出连接配置页面,填写data source名称,数据库服务器名  用户名,密码  然后选择要连接的数据库

    2. 配置完成后,点击测试,如果连接正确,会显示测试成功,测试成功后,点击确定,完成配置

    3. QTP中,选择Insert——CheckPoint(也可以是Output Value)——DataBase CheckPoint——Specify SQL statement manually——Create——机器数据源,选择在步骤2建立好的数据源,然后在 SQL statement中输入SQL语句

    4. 点击完成,会弹出执行SQL语句后的数据表,设置好要输出的数据,或者是要检查的数据.

    5. 点击完成,完成QTP连接MySql数据库的配置

     

  • centos5.1的网络设置

    2008-06-21 13:17:23

        最近因为公司配置管理人员离职,关于配置管理的内容交接给我,在这里记录一些我在配置管理过程中逐步学习的过程,希望能够对大大家有用

        因为公司项目是运行在linux下的,必须要对linux有一定的了解,找那个一台PC,安装了centos5.1的linux,进行我的学习试验。

         首先需要能远程访问linux系统,所以,需要设置linux的网络地址,设置网络地址可以通过图形界面设置,在终端使用setup命令进入到图形设置页面,然后选择网络设置,进行设置,也可以通过命令行进行设置,无论是采用哪种方式,都是将设置的内容写入到某个文件中。

          1.需要修改的文件常有

    /etc/sysconfig/network
    /etc/sysconfig/network-scrīpts/ifcfg-eth0
    /etc/resolv.conf
    /etc/hosts

     

    2. 以下是我的设置

     

    (1)vi /etc/sysconfig/network

    这里主要是指定了网关

    NETWORKING=yes
    NETWORKING_IPV6=no
    GATEWAY=192.168.1.1
    HOSTNAME=localhost.localdomain

     

    (2)vi /etc/sysconfig/network-scrīpts/ifcfg-eth0

    这里主要指定IP获得方式(static),ip地址,子网掩码,网络类型

    # Broadcom Corporation NetXtreme BCM5721 Gigabit Ethernet PCI Express
    DEVICE=eth1
    #BOOTPROTO=dhcp
    BOOTPROTO=static
    IPADDR=192.168.1.9
    NETMASK=255.255.255.0
    TYPE=Ethernet
    HWADDR=XX:XX:XX:XX:XX:XX
    网卡地址,这个不同的机器有不同的地址
    ONBOOT=yes

     

    (3)vi /etc/resolv.conf

    指定DNS

     

    search localdomain
    nameserver 192.168.1.1

    nameserver 202.103.24.68

     

             (4)vi /etc/hosts

    我没设置,是用来定义主机名的。

    启动网卡命令1
    设置完后用
    ifup eth0
    命令启动网卡

    启动网卡命令2
    [root@linux ~]#service network restart
    start
    启动
    stop
    停止
    restart
    再启动
    reload
    和再启动一样(..
    status
    状态表示
    如果服务器软件采用rpm的方式安装,以上的内容大多数都对应。

     

  • JMeter使用之常见问题问答

    2008-06-05 15:28:29

        说明:这些问答是从网上转载的,自己修改了其中的一些内容,如果大家兴趣,可以将大家在使用Jmeter的时候碰到的问题写下来,我们一起补充到这个问答里面,共同努力完善jmeter的资料。

     

    1.  JMeter的工作原理是什么?
    向服务器提交请求;从服务器取回请求返回的结果。


    2.   JMeter的作用?
         JMeter
    可以用于测试静态或者动态资源的性能(文件、ServletsPerl脚本、java对象、数据库和查询、ftp服务器或者其他的资源)。JMeter 用于模拟在服务器、网络或者其他对象上附加高负载以测试他们提供服务的受压能力,或者分析他们提供的服务在不同负载条件下的总性能情况。你可以用 JMeter提供的图形化界面分析性能指标或者在高负载情况下测试服务器/脚本/对象的行为。


    3.   怎样能看到jmeter提供的脚本范例?
    \JMeter\jakarta-jmeter-2.0.3\xdocs\demos目录下。


    4.   怎样设置并发用户数?
       
    选中可视化界面中左边树的Test Plan节点,单击右键,选择Add-> Thread Group,其中Number of Threads参数用来设置发送请求的用户数目。


    5.  JMeter的运行指示?
        Jmeter
    在运行时,右上角有个单选框大小的小框框,运行是该框框为绿色,运行完毕后,该框框为白色。

     

    6.  User Parameters的作用是什么?
        
    提高脚本可用性

     

    7.   result里会出现彩色字体的http response code,说明什么呢?

    Http response codehttp 返回值,彩色字体较引人注目,可以使用户迅速关注。象绿色的302就说明在这一步骤中,返回值取自本机的catch,而不是server

     

    8.             8.                怎样计算Ramp-up period时间?

    Ramp-up period是指每个请求发生的总时间间隔,单位是秒。如果Number of Threads设置为5,而Ramp-up period10,那么每个请求之间的间隔就是105,也就是2秒。Ramp-up period设置为0,就是同时并发请求。


    9.    Get 和Post的区别?
       
    他们是http协议的2种不同实现方式。Get是指serverRequest URL取得所需参数。从result中的request中可以看到,get可以看到参数,但是post是主动向server发送参数,所以一般看不到这些参数的。


    10.  哪些原因可能导致error的产生?
        a.   Http
    错误,包括不响应,结果找不到,数据错误等等;
        b.   JMeter
    本身原因产生的错误。


    11. 为什么Aggregate Report结果中的Total值不是真正的总和?
    JMeter
    给结果中total的定义是并不完全指总和,为了方便使用,它的值表现了所在列的代表值,比如min值,它的total就是所在列的最小值。下图就是total在各列所表示的意思。

    12.  JMeter
    Thread Number是提供多个不同用户并发的功能么?
    不是,Thread Number仅仅是指并发数,如果需要实现多个不同用户并发,我们应该采用其它方法,比如通过在jmeter外建立csv文件的方法来实现。


    13.  同时并发请求时,若需要模拟不同的用户同时向不同的server并发请求,怎样实现呢?
       
    方法很灵活,我们可以将不同的serverthread里面预先写好。或者预先将固定的变量值写入csv文件,这样还可以方便修改。然后将文件添加到User Parameters


    14.   User Parameter中的DUMMY是什么意思?
         
    当其具体内容是${__CSVRead(${__property(user.dir)}${FILENAME},next())}时用来模拟读文件的下一行。


    15.   当测试对象在多server间跳转时,应该怎样处理?
       
    程序运行时,有些http和隐函数会携带另外的server IP, 我们可以从他们的返回值中获取。


    16.   为何测试对象是httphttps混杂出现?
        Https
    是加密协议,为了安全,一般不推荐使用http,但是有些地方,使用https过于复杂或者较难实现,会采用http协议。


    17.   Http和https的默认端口是什么?
        Apache server (Http)
    的默认端口是80
        SSL (Https)
    的默认端口是443


    18.   为何在run时,有些页面失败,但是最后不影响结果?
       
    原因较多,值得提及的一种是因为主流页面与它不存在依赖关系,所以即使这样的页面出错,也不会影响运行得到正常结果,但是这样会影响到测试的结果以及分析结果。


    19. 为什么脚本刚开始运行就有错误,其后来的脚本还可运行?
       
    Thread Group 中有相关设置,如果选择了continue,即使前面的脚本出现错误,整个thread仍会运行直到结束。选择Stop Thread会结束当前thread;选择Stop Test则会结束全部的thread。推荐选项是Stop Thread

    20.     
    Regular Expression Extractor会看到Template的值是$1$, 这个值是什么意思呢?
        $1$
    是指取第一个()里面的值。如果Regular Expression的数值有多个,用这种方法可以避免不必要的麻烦。


    21.    Regular Expression中的(.*)是什么意思?
       
    那是一个正则表达式(regular expression)。’.’等同于sql语言中的’?’,表示可有可无。’*’表示0个或多个。’()’表示需要取值。(.*) 表达任意长度的字符串。


    22.   在读取Regular Expression时要注意什么?
       
    一定要保证所取数值的绝对唯一性。


    23.   怎样才能判断什么样的情况需要添加Regular Expression Extractor
       
    检查Http Request中的Send Parameters, 如果有某个参数是其前一个page中所没有给出的,就要到原文件中查找,并添加Regular Expression Extractor到其前一pagehttp request中。


    24.   在自动获取的脚本中有时会出现空的http request,是什么意思呢?
       
    是因为在获取脚本时有些错误,是脚本工具原因。在run时这种错误不参与运行的。


    25.    在运行结果中为何有rateN/A的情况出现?
        
    可能因为JMeter自身问题造成,再次运行可以得到正确结果。


    26.   常用http错误代码有哪些?
        400
    无法解析此请求。
        403
    禁止访问:访问被拒绝。
        404
    找不到文件或目录。
        405
    用于访问该页的 HTTP 动作未被许可。
        410
    文件已删除。
        500
    服务器内部错误。
        501
    标题值指定的配置没有执行。
        502 Web
    服务器作为网关或代理服务器时收到无效的响应。


    27.    Http request中的Send Parameters是指什么?
       
    是指code中写定的值和自定义变量中得到的值,就是在运行页面时需要的参数。


    28.    Parameters在页面中是不断传递的么?
       
    是的。参数再产生后会在页面中一直传递到所需页面。所以我们可以在动态参数产生时捕获它,也可以在所需页面的上一页面捕获。(但是这样可能有错误,最好在产生页面获取)


    29.   
    在使用JMeter 测试时,是完全模拟用户操作么?造成的结果也和用户操作完全相同么?
       
    是的。JMeter完全模拟用户操作,所以操作记录会全部写入DB. 在运行失败时,可能会产生错误数据,这就取决于脚本检查是否严谨,否则错误数据也会进入DB,给程序运行带来很多麻烦。

  • Jmeter正则表达式使用(带实例)

    2008-06-04 17:04:47

    其中:

    引用名称:填写该正则表达式的被引用的名称,可以填写一个有意义的名称

    正则表达式:填写一个正确的正则表达式,该正则表达式可以唯一定位要获取的值,如果和该正则表达式匹配的值有多个,则会出现混乱

    模板:此处填写$1$,如果有两个表达式,则可以设置为$1$$2$

    如果在测试过程中,某个测试用例产生的值,会在下一个测试用例中同样会传递,而这两个测试用例是一个完整的过程,同样可以利用正则表达式来实现值的传递,比如对于酒店预定,预定成功后会产生一个订单号,而该订单号在后面的订单查询或者订单处理中同样会用到,则可以利用正则表达式将该订单号提取出来,在执行订单查询处理的请求中,可以以参数的形式传递正则表达式的引用名称。

    使用正则表达式的在做东航项目的联调中广泛使用,在CRS中设置价格,设置价格名称,价格设置中都要用到酒店代码,房型代码,价格体系代码,而为了使得所设计的脚本能够一次编写多次使用,就不能将这些内容固定,而利用正则表达式,每次执行脚本,在添加完酒店,价格体系,房型的时候则将利用正则表达式提取相关的代码。

    利用正则表达式,在需要将多个项目联合起来组成一个完整的测试流程中,而且不同项目的某些数据会公用,在这样的测试计划中使用起来非常适合。

     

  • Jmeter做功能测试的优点和不足

    2008-06-03 09:59:31

      利用Jmeter做功能测试有以下优点:

    Ø         不依赖于界面,如果服务正常启动,传递参数明确就可以添加测试用例,执行测试

    Ø         测试脚本不需要编程,熟悉http请求,熟悉业务流程,就可以根据页面中input对象来编写测试用例。

    Ø         测试脚本维护方便,可以将测试脚本复制,并且可以将某一部分单独保存。

    Ø         可以跳过页面限制,向后台程序添加非法数据,这样可以测试后台程序的健壮性。

    Ø         利用badboy录制测试脚本,可以快速的形成测试脚本

    Ø         Jmeter断言可以验证代码中是否有需要得到的值

    Ø         使用参数化以及Jmeter提供的函数功能,可以快速完成测试数据的添加修改等

    利用Jmeter做功能测试有以下缺点:

    Ø         使用Jmeter无法验证JS程序,也无法验证页面,所以需要手工去验证。

    Ø         Jmeter的断言功能不是很强大

    Ø         就算是jmeter脚本顺利执行,依旧无法确定程序是否正确执行,有时候需要进入程序查看,或者查看Jmeter的响应数据。

    Ø         Jmeter脚本的维护需要保存为本地文件,而每个脚本文件只能保存一个测试用例,不利于脚本的维护。

    Jmeter和其他功能测试工具在使用中的比较:

    Ø         Jmeter比较适用于数据添加,数据修改,数据查询的测试,使用其他测试工具虽然也可以完成该类测试,但是利用Jmeter添加数据更快,更方便,而且不依赖于界面,只要添加数据的参数不改变,无论界面是否有变动,都不影响针对数据的操作。

    Ø         Jmeter不需要要关注对象是否被识别的问题,而其他测试工具在录制过程中,很容易出现页面对象不能被录制工具识别的问题,因此适用Jmeter,省略了很多关于对象操作的麻烦,更易于使用。

    Ø         Jmeter的适用更主要的是依赖于对被测项目的认知和熟悉,而对于Jmeter自身的适用技巧要求并不是很高,而其他测试工具,关于工具本身需要较长时间的学习。

    Ø         Jmeter能够对复杂的业务逻辑进行处理,而对这些复杂业务逻辑的处理,主要是运用Jmeter自身所带的配置元件来达到,对录制的脚本的修改不大,而使用其他测试工具,要实现复杂业务逻辑的测试,则需要对录制的脚本进行修改,需要工具使用人员有一点的编程能了,因此,使用Jmeter进行测试对测试人员编程能力的要求不高,同时节省大量的修改脚本的时间。

    Ø         其他测试工具的测试脚本可以通过CVS等版本控制工具进行管理,而Jmeter的测试脚本的管理不知道是否可以纳入版本控制,因此,其他测试工具比较适用于大型的,系统的功能测试中,而Jmeter比较适用于随机的,扩展开发不多的项目,也就是说Jmeter使用起来更灵活。

    Ø         其他测试工具有大量的验证点可用,并且能够对界面上的内容进行验证,可以验证更多的内容,测试能够更完全,对于界面变动不大的项目,可以通过修改脚本实现更加全面的自动化测试,而Jmeter提供的断言功能有限,并且不依赖于界面,无法完界面相关内容的验证,用Jmeter测试更需要人工测试,人工确认。

    Ø         Jmeter用作一个辅助测试工具,可以很大的提高测试人员的效率,而其他测试工具当作辅助测试工具并不能达到和jmeter同样的功能。

    Ø         Jmeter做功能测试的脚本可以同样用来做性能测试,这是其他大多数功能测试工具所不能具备的。

  • Jmeter使用之常用函数介绍

    2008-05-31 20:35:40

      “_csvRead”函数

    csvRead函数是从外部读取参数,csvRead函数可以从一个文件中读取多个参数。

    下面具体讲一下如何使用csvread函数:

    1.      新建一个csv或者text文件,里面保存要读取的参数,每个参数间用逗号相隔。每行表示每一组参数,每列表示每种参数

    比如

    admin,123

    manager,456

    2.  打开Jmeter的函数助手,选择csvread函数,如下图所示:

    其中:

    CSV file to get values from | *alias要读取的文件路径,应该是绝对路径

    CSV文件列号| next| *alias从第几列开始读取,注意第一列是0

    点击生成按钮,则生成了函数,在上图中则为:${__CSVRead(D:\login.txt,1)}csvread就是从login.txt文件中读取第一列的参数。以此类推。

    3.  将生成的参数拷贝到需要参数化的参数的值一项中,如果要修改要读取的参数的列,则可以直接在参数值中修改数字而不用重新在csvread函数生成中修改。

    4 . jmeter执行的时候,如果有多个线程,顺序读取第一行的数字,如果线程组多余文件中的行数,则循环读取。

    5.  利用该功能,可以实现不同参数需要不同参数值的问题,只需要在需要参数化的地方将生成的CSVRead函数字符串粘贴过去,然后修改表示第几列的数字就可以了。

     

    “_ StringFromFile”函数

    功能:这个函数是从一个文件中取到一个字符串,这个函数和LoadRunner中的File变量差不多,不过LoadRunner可以直接从数据库中查询记录,自动生成文件,而Jmeter需要我们借助第三方工具生成文本作用:可以用来实现参数化http请求发送的参数,使得在Jmeter运行时参数化了的参数在每个线程读取不同的内容。如果某个参数每次发送请求的时候不能重复才可以存储到数据库中,则用这个功能十分方便。

    使用:

    1. 首先需要一个文本文件,可以手工生成,也可以通过数据库查询工具查出结果,然后拷贝到一个文本文件中。

    2. 点击Jmeter选项,选择函数助手对话框(或者使用快捷键“CtrlF”),在选择一个功能的下拉框中选择_ StringFromFile”

    3. 设置_ StringFromFile”函数的值,具体如下:

    ü          输入文件的全路径:输入前面生成的文件的完整路径,即文件路径+文件名.扩展名(文件路径可以写成相对路径或绝对路径,默认读取位置为/bin下)

    ü          函数名称:输入某个名称,用于存储在测试计划中其他的方式使用的值。

    ü          文件开始结束序号:第三,第四个参数是文件开始的序号,也就是文件读取的其起始行数。第四个参数是文件的结束序号,也就是要读取文件的最后行。假如咱们生成的文本文件有200行,如果开始序号设置成50,结束行设置成150,那么这个函数会按顺序从第50行,一直读取到150行,如果测试的循环次数超过了文件行数,比如循环了102次,那么最后一次循环读取的文件内容和第一次的一样,函数会自动循环读取。文件的起始序号和结束序号也可以不用设置,这样函数会从第一行读取到最后一行,然后再循环读取。

    4. 注意:该函数每次读取文件中的一行,如果线程组中有多个线程,则每个线程顺序读取一行,如果有多次循环,则每次循环顺序读取一行

     “_Random”函数

    功能:这个函数是从某个数字段随机读取数据替换参数,可以利用在测试需要添加多条数据记录而且某些字段需要唯一性的测试脚本中,随机生成的参数是数字

    作用:可以用来实现参数化http请求发送的参数,使得在Jmeter运行时参数化了的参数在每个线程去不同的随机数。如果某个参数每次发送请求的时候不能重复才可以存储到数据库中,则用这个功能十分方便。

    使用:

    1.        点击Jmeter选项,选择函数助手对话框(或者使用快捷键“CtrlF”),在选择一个功能的下拉框中选择“_Random”

    2.        配置“_Random”函数,第一个参数是一个范围内的最小值,即所要取的随机数的最小值,我们设置成1;第二个参数是一个范围内的最大值,即所要取的随机数的最大值,我们设置成100;第三个参数是函数名称,即用于存储在测试计划中其他的方式使用的值,我们设置成Random。设置好上面的三个参数后,点击生成按钮,这样就会在对话框的最下面生成一个字符串“${__Random(1,100,Random)}”,在我们编写的脚本中,找到要替换的参数,把它的值换成前面生成的字符串就可以了,然后每次运行的时候,这个参数会变成一个1100之间的随机数。

    _counter”函数

    功能:这个函数是一个计数器,用于统计函数的使用次数,它从1开始,每调用这个函数一次它就会自动加1,它有两个参数,第一个参数是布尔型的,只能设置成“TRUE”或者“FALSE”,如果是TRUE,那么每个用户有自己的计数器,可以用于统计每个线程歌执行了多少次。如果是FALSE,那就使用全局计数器,可以统计出这次测试共运行了多少次。第二个参数是函数名称

    格式:${__counter(FALSE,test)}

    使用:我们将“_counter”函数生成的参数复制到某个参数下面,如果为TRUE格式,则每个线程各自统计,最大数为循环数,如果为FALSE,则所有线程一起统计,最大数为线程数乘以循环数

    “_time”函数

    功能:Jmeter运行时取当前时间到变量,利用该功能,可以将某个参数增加time函数,然后用该参数作为查询条件查询,然后以该参数作为断言,这样可以使得断言更精确,因为时间实时变化的,使用该方法,需要注意的是,要先添加一个全局的用户参数,具体在断言操作中有描述。

    格式:${__time(MMddmmss,TEST)}

    使用:添加jmetertime函数,选择选项——函数助手,然后选择__time函数,如下图所示:

    在“ormat string for SimpleDateFormat (optional)”中输入值“MMddhhmmss”,表示取月日时分秒。

    然后,点击生成,则生成了time参数。

    _intSum”函数

    功能:用于计算多个整数的和,可以是计算正整数和负整数的和,它有N个参数,最少有3个参数,最多不限。最后一个参数是函数名称,前面的其它参数是要求和的整数。这个函数在函数对话框中只显示3个参数,如果要计算多个整数,可以通过添加参数实现,不过最后一个参数一定要是函数名称。再添加的参数会在函数名称后面,这个时候,需要我们手动将函数名称参数放到最后一个。

    格式:${__intSum(1,100,test)}

    使用:添加“_intsum”函数如下图所示:

     

  • 安装gcc编译环境

    2008-05-30 17:04:41

    1.   安装gcc编译环境

    linux终端上安装VMtool ,安装过程进行时 提示以下内容

    What is the location of the "gcc" program on your machine? 

    出现这个是因为你安装Vmware的时候选择的是编译安装,没有GCC的支持不行,必须装上编译环境。 你可以在终端先输入gcc --version,如果提示错误,说明你没有安装GCC支持,如果能够得到gcc的版本信息,则说明你安装了GCC而虚拟机软件无法找到GCC位置,那你另打开一终端输入命令rpm -ql gcc,并记下安装位置,然后在What is the location of the "gcc" program on your machine? 后面输入位置就行了。如果你没有安装gcc,则可以通过下面的方法安装gcc

    如果你安装的linux操作系统是.ISO文件,则用虚拟光驱打开这个问题,如果是光盘,则在光盘中搜寻,找到gcc-3.2.2-5.i386.rpm现在将它从ftp传到你的linux,拷贝到/root/install目录

      [root@masenger root]# cd install

      [root@masenger install]# ls

      gcc-3.2.2-5.i386.rpm telnet-server-0.17-25.i386.rpm

    安装gcc :

      [root@masenger install]# rpm -ivh gcc-3.2.2-5.i386.rpm

      warning: gcc-3.2.2-5.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      error: Failed dependencies:

      cpp = 3.2.2-5 is needed by gcc-3.2.2-5

      glibc-devel >= 2.2.90-12 is needed by gcc-3.2.2-5

    由此看见需要glibc-devel至少2.2.90版本. 在光盘上搜索后找到它.把它从ftp传到我的linux,拷贝到/root/install目录

      [root@masenger install]# ls

      gcc-3.2.2-5.i386.rpm glibc-devel-2.3.2-11.9.i386.rpm telnet-server-0.17-25.i386.rpm

    安装glibc-devel :

      [root@masenger install]# rpm -ivh glibc-devel-2.3.2-11.9.i386.rpm

      warning: glibc-devel-2.3.2-11.9.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      error: Failed dependencies:

      kernel-headers is needed by glibc-devel-2.3.2-11.9

      kernel-headers >= 2.2.1 is needed by glibc-devel-2.3.2-11.9

      由此看见需要kernel-headers至少2.2.1版本. 在光盘上搜索后找到它.但是你发现没有叫kernel-headers .但是有一个glibc-kernheaders-2.4-8.10.i386.rpm

      把它从ftp传到我的linux,拷贝到/root/install目录

      [root@masenger install]# ls

      gcc-3.2.2-5.i386.rpm glibc-kernheaders-2.4-8.10.i386.rpm

      glibc-devel-2.3.2-11.9.i386.rpm telnet-server-0.17-25.i386.rpm

    安装kernel-headers :

      [root@masenger install]# rpm -ivh glibc-kernheaders-2.4-8.10.i386.rpm

      warning: glibc-kernheaders-2.4-8.10.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      Preparing…… ########################################### [100%]

      1:glibc-kernheaders ########################################### [100%]

    安装glibc-devel :

      [root@masenger install]# rpm -ivh glibc-devel-2.3.2-11.9.i386.rpm

      warning: glibc-devel-2.3.2-11.9.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      Preparing…… ########################################### [100%]

      1:glibc-devel ########################################### [100%]

    安装gcc :

      [root@masenger install]# rpm -ivh gcc-3.2.2-5.i386.rpm

      warning: gcc-3.2.2-5.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      error: Failed dependencies:

      cpp = 3.2.2-5 is needed by gcc-3.2.2-5

      又提示你需要cpp至少3.2.2-5版本.在光盘上搜索后找到它.

      把它从ftp传到我的linux,拷贝到/root/install目录

    安装cpp:

      [root@masenger install]# rpm -ivh cpp-3.2.2-5.i386.rpm

      warning: cpp-3.2.2-5.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      Preparing…… ########################################### [100%]

      1:cpp ########################################### [100%]

    安装gcc :

      [root@masenger install]# rpm -ivh gcc-3.2.2-5.i386.rpm

      warning: gcc-3.2.2-5.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e

      Preparing…… ########################################### [100%]

      1:gcc ########################################### [100%]

      到此为止,gcc就装好了

    另外你可以到网网络上去下载最新版本的gcc (当时我下的是3.4.3)下载地址: ftp://gcc.gnu.org/pub/mmkey.com

      编译时间要一个多小时。耐心等待吧

    2.   Existing lock /var/run/yum.pid: another copy is running错误解决

     

    如果在安装软件包过程中出现以下错误

    Existing lock /var/run/yum.pid: another copy is running. Aborting.错误,

    Loading “installonlyn” plugin

    Existing lock /var/run/yum.pid: another copy is running. Aborting.
    如果出现上述错误,可以通过以下方法解决,在终端中输入

    [root@localhost ~]#  rm -f /var/run/yum.pid
    [root@localhost ~]# /etc/init.d/yum-updatesd stop
    停止 yum-updatesd [确定]

    列出仓库可用包

    yum list available

    升级系统

    # yum update

    检查系统可用更新

    # yum check-update

  • 虚拟机中安装VMtool

    2008-05-30 16:57:37

     

    1>在图形界面窗口中安装

    1.启动虚拟机

    2.用超级用户root登录

    3.登录成功后,Ctrl+Alt ,取出鼠标,点选菜单栏,虚拟机安装VMware工具 → Install
    4.
    待虚拟系统挂载了光盘后,弹出cdrom文件夹或者点击进入/mnt/cdrom中,在文件夹/mnt/cdrom中有两个文件VMwareTools-5.0.0-13124.i386.rpmVMwareTools-5.0.0-13124.i386.tar(一般TAR软件包兼容性更好,我们就用它了,双击VMwareTools-5.0.0-13124.i386.tar弹出文件打包器,内有文件夹vmware-tools-distrib,按上面解压缩按钮,浏览到需要解压到的目录这里选在/root/ 文件夹中(也就是你桌面上那个叫做“root的主目录),开始解压

    5.右击桌面选择输入"新建终端",在里面键入cd /root/vmware-tools-distrib,回车。再输入./vmware-install.pl ,即可按装VMware Tools,以后一路回车即可,以下大家都懂,重启即可。

    6.这下鼠标可以自由的出入宿主机和虚拟机了,显示屏幕的尺寸也变为可调,
    刷新速度也变快了,安装成功!

     

    2>在命令行下面安装

       1.进入虚拟机系统,击菜单上的安装VM   TOOLS”(此时相当与把vmtool的安装碟子插入了cdrom  

    2.使用以下命令将cdrom的内容mount到系统上来   mount   /dev/cdrom  (有时候/dev/cdrom设备文件也可以是/dev/hdc  

    3.  cd mnt 进入/mnt文件夹,把里面的vm.....tar.gz拷贝到某个文件夹下  

    4. 进入vm.....tar.gz所在的文件夹下,将用tar zxvf vm.....tar.gzvm.....tar.gz解压,解压后会产生vmware-tool-distrb的文件夹

    5. 进入vmware-tool-distrb文件夹,执行./vmware-install.pl进行安装

  • linux关机和重启命令

    2008-05-28 17:31:48

        Linux中常用的关机和重新启动命令有shutdownhaltreboot以及init,它们都可以达到关机和重新启动的目的,但是每个命令的内部工作过程是不同的,下面将逐一进行介绍。

    1.     shutdown

    shutdown命令用于安全关闭Linux系统。有些用户会使用直接断掉电源的方式来关闭Linux,这是十分危险的。因为LinuxWindows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失,使系统处于不稳定的状态,甚至会损坏硬件设备。

    执 行shutdown命令时,系统会通知所有登录的用户系统将要关闭,并且login指令会被冻结,即新的用户不能再登录系统。使用shutdown命令可以直接关闭系统,也可以延迟指定的时间再关闭系统,还可以重新启动。延迟指定的时间再关闭系统,可以让用户有时间储存当前正在处理的文件和关闭已经打开的 程序。

    shutdown命令的部分参数如下:

    [-t] 指定在多长时间之后关闭系统

    [-r] 重启系统

    [-k] 并不真正关机,只是给每个登录用户发送警告信号

    [-h] 关闭系统(halt

    shutdown命令的工作实质是给init程序发送信号(signal),要求其切换系统的运行级别(Runlevel)。系统的运行级别包括:

    0:关闭系统

    1:单用户模式,如果没有为shutdown命令指定-h-r参数而直接执行,则默认将切换到此运行级别

    2:多用户模式(不支持NFS

    3:多用户模式(支持NFS),一般常用此种运行级别

    5:多用户模式(GUI模式)

    6:重新启动系统

    2.     halt

    halt是最简单的关机命令,其实际上是调用shutdown -h命令。halt执行时,杀死应用进程,文件系统写操作完成后就会停止内核。

    halt命令的部分参数如下:

    [-f] 没有调用shutdown而强制关机或重启

    [-i] 关机或重新启动之前,关掉所有的网络接口

    [-p] 关机时调用poweroff,此选项为缺省选项

    3. reboot

    reboot的工作过程与halt类似,其作用是重新启动,而halt是关机。其参数也与halt类似

    4. init

    init是所有进程的祖先,其进程号始终为1init用于切换系统的运行级别,切换的工作是立即完成的。init 0命令用于立即将系统运行级别切换为0,即关机;init 6命令用于将系统运行级别切换为6,即重新启动。

  • 如何修改linux计算机名

    2008-05-28 17:16:49

     

    1. open a shell, tpye the command below:

    [root@localhost]#hostname localhostmw

    2. edit the file:/etc/sysconfig/network, change the value of 'HOSTNAME':

    [root@localhost]#vi /etc/sysconfig/network

    NETWORKING=yes

    HOSTNAME=localhostmw

    3. edit the file:/etc/hosts, change the ip address and your hostname

    [root@localhost]#vi /etc/hosts

    # Do not remove the following line, or various programs

    # that require network functionality will fail.

    #127.0.0.1      localhost.localdomain   localhost

    192.168.0.110   xiaodao       xiaodao

    4.  改了以后要重启网络

    service network restart

     

  • Jmeter和loadrunner的异同

    2007-12-20 20:45:04

     1.jmeter 的架构跟loadrunner原理一样,都是通过中间代理,监控&收集并发客户端发现的指令,把他们生成脚本,再发送到应用服务器,再监控服务器反馈的结果的一个过程.

    2.分布式中间代理功能在Jmeter中也有,这个分布式分理是指可设置多台代理在不同PC,通过远程进行控制,即通过使用多台机器运行所谓的 Agent 来分担 Load Generator 自身的压力,并借此来获取更大的并发用户数.loadrunner也有些功能.

    3.Jmeter 安装简单,只需要解压jmeter文件包到C盘上就可以了,其实是没有安装.要是你想执行调试测试脚本,前提是:装上jdknetbean插件.loadrunner安装包有1G多,在一台P3.0,1G内存的PC上安装要一个多小时.要是装过较旧的盗版还不能再装新版,解决办法倒是有,但麻烦且花时间.

    4.Jmeter 没有IP欺骗功能,IP欺骗是指在一PC台上多个IP地址来分配给并发用户.这个功能对于模拟较真实的客户环境来说,是较有用.loadrunner有此功能.

    5.Jmeter也提供了一个利用本地Proxy Server(代理服务器)来录制生成测试脚本的功能,但是这个功能并不好用,测试对象的个别参数却要手工增加上去,还得附带装个IE代理,GoogleToolbarDownloader这些插件来捕捉参数.但是有一个工具bodboy,利用这个工具可以录制操作,然后选择将脚本保存为Jmeter脚本,然后利用Jmeter可以打开并修改脚本

    6.jmeter的报表较少,对于要分析测试性能不足以作为依据.如要知道数据库服务器或应用程序服务的CPU,memory等参数,得在相关服务器上另外写脚本记录服务器的性能.

    7.Jmeter做性能测试,主要是通过增加线程组的数目,或者是设置循环次数来增加并发用户,而loadrunner可以通过在场景中选择要设置什么样的场景,然后选择虚拟用户数。

    8.jmeter可以通过逻辑控制器实现复杂的测试行为,相当于loadrunner中的测试场景

    9.Jmeter可以做web程序的功能测试,利用jmeter中的样本,可以做灰盒测试,loadrunner主要用作性能测试

    10 jmeter是开源的,但是使用的人较少,网络上相关资料不全面,需要自己去揣摩,而loadrunner是商业软件,如果是正版,有技术支持,同时,网络上的资料相当多。

    11.jmeter的脚本修改,主要是对jmeter中各个部件的熟悉程度,已经相关的一些协议的掌握情况,而不依赖于编程,而loadrunner除了复杂的场景设置外,还需要掌握函数,修改脚本。

  • 测试者存在的问题

    2007-12-20 10:17:03

    以下内容为转帖,只因为我感觉真实的反映了实际情况,所以在这里帖出来,希望可以时时提醒自己!

    一、根基不牢

    问题:利用等价类划分的方法,对某问题设计测试用例。

    分析:98%以上的应聘者只知道按照有效等价类和无效等价类进行划分,殊不知此种分类方法只是等价类划分的一个典型应用而已,等价类划分远非只能划分为有效和无效两类。根据种种划分依据,还可以进一步划分很多其他类别。

    问题:根据事件描述,画出对应的因果图。

    分析:标准答案中只画了两条恒等,两条非,一个与,一个或。如此简单的问题,上百名应聘者中竟然无一人答对,痛心啊。黑盒测试方法就那么几种,既然你已知这个名,怎么就不知道多看几眼。

    小结:

    上面提到的是软件测试的最基本的方法,作为从业测试实际工作已经有1-2年的应聘人员,未能真正领悟,实属不应该,心浮气躁,忽视了你身边最简单,也是最厉害的技能。根基不牢,怎么可能把测试做深。

    二、专业不精

    问题:音视频文件都有哪些格式,这些格式之间有什么差别?

    分析:此问题是问那些做过多媒体方面测试的,但是我们的应聘者向来都是拿来主义,别人给我什么媒体文件我就用什么做测试,而根本不管不问。为什么MIDI文件比WAV文件小那么多?我们如何知道扩展名是.Mpeg的文件是Mpeg1格式的还是Mpeg2格式的?,面对这些问题,应聘者默默无语,只是无奈的笑笑。不去看别人,想想自己测试涉及的专业,是否把那个行业知识搞清楚了呢?

    问题:测试脚本运行不畅如何调试?

    分析:此问题是问那些标明自己熟练掌握WinRunnerRobotQTP等测试工具的应聘人员,但是当真正问到他们关于脚本的具体调试时,有7成以上人员表示他们只是参加测试培训老师讲过,或者自己在网上看过相关资料,另外有2成以上人员表示他们虽然用过,但是只是简单的录制回放,根本不会自己调试。可能是迫于无奈吧,简历里面什么都不写,可能面试的机会都没有,但是简历如此夸大的来写,终归是浪费自己的面试时间和路费。

    小结:

    从事测试仅1-2年时间,要想测试也精通,专业也精通确实不易,但是不说精通,至少也该知道个60%才对的起你的测试工作。一两年时光如此荒废,静下心来反思一下,身边还有哪些技能我们应该掌握扎实一点呢。

    三、无测试体系概念,忽视理论

    问题:请说出软件测试的定义,BUG的定义。

    分析:99%的人不能说出这两个测试名词的定义,只是在给我解释测试是为了发现bug之类的片面理解,残留的几个人也说得不够准确。这两个词目前尚不能说业内已经有了成熟统一的定义,但是无论是对是错,身为测试人员已经数年,自己竟然说不出这两个词的概念,多少也说不过去啊。有些人和我说,理论名词概念不重要,我会做测试就是了。想想金庸老先生早就告诉我们,武功仅有招式是不够的,必须配合上什么心法口诀才能行。你只会测试执行的招式,却不懂测试理论的心法,怎么能够修炼成上乘的软件测试呢?

    问题:请介绍一下你们的测试流程,流程和过程有什么不同,为什么好的测试需要好的流程?

    分析:但凡做过12年测试的人都能给我说出他们先做什么后做什么,但是当我继续问这是否可以叫做过程?流程和过程有什么差别,应聘者一棒子被打晕,继续追问为什么好的测试需要好的流程的时候,早已经找不到东南西北了。每天公司各项制度叫你做什么你就做什么,让你怎么做你就怎么做,完全不管不顾为什么,那么自己岂不成了没头脑的工具。这样你能干的工作别人也能做,自己的优势不就没有了吗。

    小结:

    目前测试业内流传着学院派和实践派的说法,学院派的理论给人的感觉往往是好听但不实用,而实践派的知识,往往能够立即见效。所以眼下测试培训往往实践派的更受欢迎。继续引用金庸先生的观点,练武分练内气宗,练外剑宗,但是真正的高手是内外兼修。如果我们不想只做普通的测试小弟子的话,就要理论实践并重,方能有所作为。

    四、周边知识知之甚少

    问题:能给我介绍一下软件工程中的瀑布模型吗?

    分析:又是8成应聘者不会回答,都是曾在遥远的学生时代有所耳闻,现今早已忘得一干二净了。软件测试因何而生——软件危机,软件危机导致软件工程的兴起,软件工程中又包含软件测试,就好像鱼儿活在水里,如果没有软件工程这个水,哪里能够养活这软件测试的鱼,如果我们对于身边的软件工程不够了解,怎么可能在里面自由的畅游呢。

    问题:用你最熟悉的开发语言实现sum=1+2+3+…+100

    分析:保守统计7成以上的应聘者写出来的程序无法执行或者运行结果错误,更少有人能够一气呵成,而且精准。这道编程题难吗?肯定不难,那么为何答错,自己没有真正写过程序,即使写过几行,也早就是如烟往事了。做测试一定需要懂开发吗?这个问题讨论以久,当然不一定,但是如果要做好测试,做深测试,分析问题原因,提出问题解决方案,编写测试脚本或工具,哪一个又能离开软件开发呢?

    小结:

    我们学习测试也应该有个先后顺序,有步骤。掌握周边知识的紧迫程度可能不如测试知识和行业知识。但是对于我们已经从业1-2年的测试人员来说,学校里面学到的知识不应该丢,之后的发展中,周边知识的学习也应该开始了。周边知识的范畴其实很广,还包括各种其他测试理念的学习,机械工业出版社翻译的那套测试丛书就很不错,观点众多而新颖,博众家之长,集大成,向来都是大家风范。

    五、缺乏必要的责任心、细心、耐心、虚心等

    问题:请数出下图中三角形的个数(平面图,有几根弧线做干扰)

    分析:我总是问自己,这道题真有这么难吗?连中小学生都能数对的十几个三角形,到了我们这二十几岁的年轻人手中,正确率才1%,为什么?其实就是现在我们已经很少有人能够静下心来,耐心细致的去做事情了。很多应聘者告诉我她的优点就是踏实,坐的住,正适合这繁琐的测试工作。我需要的不是坐在那里不做事或者做错事的人,而是需要能够按时保质量完成测试工作的测试人员。

    问题:你离职的原因?

    分析:这是面试中最常见的问题了。应聘者往往也是充分准备,理由多种多样,但是看看应聘者的工作记录统计,70%应聘者平均跳槽频率是1/次(实习情况除外),不会都那么凑巧吧,赶上什么公司倒闭,每隔一年就会想一次自己学不到东西,需要去外面看看。而在我看来,真正的原因更多的应该是希望通过跳槽提高工资,或者因为自身水平不足被公司炒鱿鱼吧。

    小结:

    我并不认为所有的人都适合做测试。非技术素质方面,这点或者那点不足够优秀也很正常,心浮气躁也可以理解。但是作为用人单位,理解归理解,却也不会用不胜任岗位,或性价比不高的人员。那么对于此类应聘者,我的忠告就是,要么你另谋高就,要么你就放低姿态,培养好你必备的素质后再谈。

    六、缺乏诚信

    这一点本应该被归在上一条素质中,但是这点的重要性我认为远超过了上一条所列各项,因此单独提出。相关表现主要体现在:

    报自己历史工薪;

    笔试题目作弊;

    编造离职原因;

    虚报学历,工作经验;

    夸大自己工作技能等。对于严重缺乏诚信的,一旦发现,其他表现再好,也无济于事了。

     

  • Jmeter——监视器结果

    2007-12-19 18:55:42

    监视器结果Monitor Result)是为Tomcat 5设计的,用来实时反映服务器的性能情况,如果你的AppServer不是Tomcat 5,使用监视器结果得不到结果,但是任何servlet container都可以移植status servelet并使用此monitor,如果需要对其他的AppServer使用该Monitor,需要移植Tomcat 5status servelet

    添加JMeter监视器结果利用的是Tomcat本身的特性,就是直接访问Tomcat服务器的/manager/status,获得相应的服务器状态数据并进行呈现。因此,在JMeter中添加监视器结果来监视服务器状态的步骤如下:

    1.                  增加一个HTTP RequestSampler

    2.                  选中该新增的HTTP Request,修改其属性:

    修改“名称”为服务器状态(非必须)

    修改“路径”为manager/status,必要时给出服务器的IP地址和Port的值

    增加一个参数 ,该参数的名称为大写的XML,值为小写的true

    选中下方的用作监视器

    如下图所示:

     

    3.                  增加一个“http授权管理器”因为访问Tomcat的应用服务器的/manager/status需要给出用户名和口令。如下图所示

     

    4.                  添加一个监视器结果的节点

    执行后,会在监视器结果中的性能页面显示图。其中healthy/Warning/非活动是根据服务器上的可用线程数/最大可用线程数得出,而Load用来衡量应用服务器的压力状况。

  • 测试的路该怎么走

    2007-12-16 22:47:51

    写这篇文章的目的,只是说说自己对测试的一些认识,可能认识是片面的,也是错误的,希望可以得到大侠们的指点。也说说自己的一些困惑,希望能够和朋友们一起探讨,努力学习测试的知识。

     

    做了一年多测试,因为在上学的时候没有开设过测试课程,做测试,所有的理论知识都是自己看书学习的,国内的那些测试书籍市面上见的都基本看过了,对测试的流程,测试的方法,测试的概念已经算是有了很深的了解,但是,总是觉得,自己的理论知识不够扎实,对测试的理解不是很透彻,在实际的工作过程中,总是会碰到自己在看书的过程中没有涉及到的一些东西,自己也知道,所有的理论知识都不能解决实际中的问题,理论只能为实际的工作提供一个指导。

    国内的测试是刚刚开始,这个从国内的测试书籍的多少以及内容就可以看出来,国内的测试书籍,系统性讲述测试理论的就那么一两本,而且,基本都是参考国外资料编写的,基本上来说,就是讲了测试的概念性的东西,而没有讲述具体如何去做测试的问题。

    做了一年多,渐渐的感觉,自己所了解的测试知识是越来越不够用,虽然我一直都在学习,一直都在寻找比较优秀的测试书籍,但是,就国内的资料来说,很少有讲的比较好的,能够提供一个完整的方法论的。

    于是,我想,软件测试在这两年算是比较热门的职业,但是,如果仅仅是目前的理论知识来支撑,那么是不可能成为一个测试资深的专业人员。那么,我们有必要去寻找一些国外的书籍,一些国外的关于测试理论的测试资料,这样就有一个问题,国外的测试资料,简单的,或者说是概念性的知识,基本上都已经被翻译或者在国内的测试资料中有翻译,而对于一些不太适合国内实际情况的,一些关于具体怎么在项目中使用测试理论的知识体系,很大部分并不是适合国内的实际,如果学习这些,并不能很好的筛选,增加了获取知识的困难度。

    那么,当测试人员到这个时候,就遇到了一个瓶颈,测试的路该怎么走,这个一个问题。

    做测试,很多情况下都会提出自动化测试,自动化测试是有很多的好处,这是无容质疑的,但是,自动化测试需要投入一定的成本,比如人力,工具,组织管理等等,并不是说,自动化测试就是使用破解的商业测试工具去录制脚本,修改脚本,回放脚本就可以实现,也不是说,只是会使用测试工具,就算是可以进行自动化的测试了。

    我使用过QTP,也使用过RFT,在我使用的过程中,我深切感觉到了,要做好自动化测试,使得自动化测试真正能够起到作用,并不是说会使用工具就可以的了,QT如果仅仅用来录制操作,然后回放,或者,用QTP的录制回放功能,可以做一些比较重复的工作,比如,可以造数据,但是,因为QTP太依赖于界面,如果要真正使得QTP使用于测试,那么,就必须要修改脚本,或者说,需要构建测试框架。而对于RFT来说,它的脚本语言是基于java的,要设计好的脚本,需要东java程序,相当于说,入门比较高,而且,现在国内的开发比测试普遍工资高,如果会编写程序,则会去做开发,或者做白盒测试。

    通过上面的说明,产生一个问题,那就是,需要有专门的人员去维护脚本,而很多时候,国内的测试并没有专业的脚本设计人员,很多时候,测试的人员可能即要做手工测试,又要做脚本录制,维护,就算是有一两个专门的脚本设计人员,就目前国内的情况,会脚本设计的测试人员是稀缺性资源,行情看好,流动性较大,可能有的时候,企业刚刚做了自动化测试,结果,脚本设计人员走了,自动化测试也就搁浅了,继续回到了手工测试时代。

    而对于一些性能测试工具,如果仅仅会使用工具并不是能够完成性能测试的,只要做测试的都知道,性能测试是最复杂,也是最需要基础知识,业务知识,并且需要多个部门配合的测试工作,仅仅是会使用测试工具,是远远不够的。也就是说,学好了性能测试的工具,并不是说就可以做性能测试的。

    功能测试,性能测试自动化,在国内并不能得到一个很好的应用,而对于白盒测试工具,在国内做白盒倒是使用的比较多,但是,自动化并不是仅仅只有白盒,那么,如果是这样,测试的路又该怎么走呢?

     

  • LoadRunner 录制常见错误解决方法

    2007-12-12 22:02:10

    录制脚本为空

     

    LR录制是客户端与服务器的数据交互,只有在有交互的时候才可以录制到脚本

     

    1. 交互方式不一样,通过客户端的server进行交互,scrīpt中选择最后一个track processes created as COM local servers  [选择scrīpt里的最后一个选项]

     

    2. 非客户端与服务器的交互的一种操作,在页面上点前进或后退,如果页面是从缓存中取出来的,那么也就没有和服务器数据交互,所以也录制的为空脚本.   [windows注册表中禁用缓存]

     

    3. 协议选择错误,b/s不一定走http协议,还可能是https(http+ssl).   [最基础的错误]

     

    录制出错

     

    1.  选择internet里选项里的连接里的局域网设置的代理不能选,因为LR在录制的时候会动态选择

     

    2.  网页里的恶意代码,检测的时候响应LR录制脚本[用工具检测恶意代码,然后卸载恶意代码,eg:Ad_Aweare]

     

    3. 防病毒软件和防火墙,在录制时暂时关闭

     

    4. 因为LR自身原因报错或者有些脚本不能录制下来[录制是最好选用scrīpt view,此时会报错,但能写下脚本,是因为LR无法解析,可以手工修改,tree view 就直接停止了

     

    Loadrunner不支持默认的浏览器

     

    有时候,我们上网的时候,不小心会将某个浏览器设置为默认的浏览器,而我们不知道,这个时候,我们用loadrunner进行录制的时候,会提示loadrunner不支持系统设置的默认的浏览器,因此,需要我们重新选择浏览器,我们可以利用Reconding optiom中的Browser选项设置支持的浏览器,我们还可以利用下面的方法,将IE设置为默认的浏览器,因为loadrunner是支持IE的。设置方法如下:

     

    IE“工具(T)”菜单→“Interner选项”→“程序选项卡里,确保检查Internet Explorer是否为默认的浏览器选项打上。然后在你启动IE时,如果IE非默认浏览器就会出现提示窗是否把IE设置为默认。

  • Jmeter——CSV Data Set Config

    2007-12-12 14:39:30

    利用Jmeterhttp请求的时候,如果我们要添加不同的数据,而每一条数据都不一致,我们将每一天数据作为一个测试用例,则我们可能需要为每个测试用例建立一个http请求,十分麻烦,比如,就登录来说,有用户,密码,每个用户的用户名,密码都不一致,如果我们要建立多个用户登录的请求,每个用户使用不同的用户名和密码,我们可能要将每个用户名单独作为一个http请求,这样十分不方便。

    我们是否可以将所有的用户名和密码写入一个文件,然后将http请求中的用户名和密码参数化,读取写有用户名和密码的文件呢?

    利用JmeterCSV Data Set Config,可以实现这个功能,具体如下:

    1. 新建一个文本文件,里面保存要登录的用户名,密码,文件内容如下:

    admin,123

    manager,456

    test,test

    说明:这里用英文逗号为分隔符,也可以用其他为分隔符,在CSV Data Set Config中可以设置。

    2. 右键点击Jmeter中需要参数化的某个请求,选择添加——配置原件——CSV Data Set Config,会添加一个CSV Data Set Config,需要设置相关的一些内容,具体如下:

    Filename:文件名,,指保存信息的文件目录,可以相对或者绝对路径(比如:D:\ceshi.Txt

            Variable Names:参数名称(如:有几个参数,在这里面就写几个参数名称,每个名称中间用分隔符分割,分隔符在下面的“Delimitet”中定义,为了和文件中的“,”对于,这里也用“,”分割每个参数名,(比如:use,password

    Delimitet:定义分隔符,这里定义某个分隔符,则在“Variable Names”用这里定义的分隔符分割参数。

    Recycle on EOF是否循环读入,因为CSV Data Set Config一次读入一行,分割后存入若干变量中交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入

    设置CSV Data Set Config如下图所示:

    3. 在需要使用变量的地方,比如在登录操作中,需要提交的表单字段包含用户名密码,我们就可以用${变量名} 的形式进行替换,例如${user}${password}

    4.  附带说一下,通常有用户认证的地方都要用到cookie或者session,那么最好在测试计划中加入一个http cookie 管理器,直接添加一般不需要任何设置,否则可能会出现登录失败(在测试结果中,如果看到多次请求不同页面返回的字节数却是相同的,那多半是登录失败了)

    5.  最后,添加后,可以通过添加-监视器-查看结果树(请求部分)”, 来检验参数化是否成功,运行线程组,如果失败,那么检查一下文本的路径,变量大小写等等,手册上说使用相对文本路径时,要以测试配置文件(默认是jmeterbin目录)的目录为参考,但是我试过似乎不行,换成绝对路径就可以了

     

    说明:以上内容部分参考网络资料,但是核心内容为原创,请转载者注明出处,也欢迎大家一起探讨Jmeter的使用。

    JmeterQQ群:43429627

     

  • testlink安装Client doesnot support authentication protoco问题解决

    2007-12-11 19:12:43

    安装testlink ,配置好app  PHP  mysql后,安装testlink,出现提示:Client doesnot support authentication protoco问题解决:

     

    出错如下图

     

     

    错误原因:Mysql-server4.1.17版本以上时采用了新的加密策略,而他的PHP mysql-client只用的3.23,因此在向server请求conn时出现密码错误

     

    解决方法:

    选择开始菜单程序——mysql——mysql command line client

     

    打开mysql命令行输入root密码

     

    登录mysql ,输入命令:SET PASSWORD FOR

     

    再输入命令:'root(用户名)'@'localhost(主机名)' = OLD_PASSWORD('123'(新密码));

     

    再输入命令:UPDATE mysql.user SET Password = OLD_PASSWORD('123'(新密码));

     

    再输入命令:WHERE Host = ' localhost(主机名)' AND User = 'root(用户名)'

     

    再输入命令:FLUSH PRIVILEGES;

     

    重启电脑,

  • Jmeter断言的操作(带实例)

    2007-12-11 17:06:07

    jmeter进行测试的时候,有时候,我们需要确定Jmeter究竟有没有正确工作,因为有时候,我们利用监听器查看的时候,监听器返回的结果是正确的,但是,实际上,我们发送的请求中的有些参数可能是错误的,系统并没有按照我们预期的方式进行相应,比如,一般典型的 web 应用一般都会:

     

    1. 有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到 session 中。

    2. 有一个 filter,它拦截请求,检查每个请求相关的 session 中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提供安全信息。

     

    在这种配置下应用前面介绍的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。

     

    如果我们要确定Jmeter有没有按照我们的预期进行工作,我们应当考虑使Jmeter提供的断言,加到Sampler里面可以对返回的结果进行判断,例如判断HTTP返回结果里面是否含有某个字符串。如果断言为真,JMeter会标记请求为成功,否则标记为失败。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。

     

    要在JMeter中添加断言,我们首先要知道我们期望返回什么结果,比如我们利用jmeter测试http请求,向程序添加数据,同时,Jmeter又有查询的http请求,那么,我们当然要验证我们利用jmeterhttp请求,是否成功添加了数据,这个时候,我们可以在查询的http请求中添加断言,如下图所示:

     

     

    我们一般选择响应断言,如下图所示:

     

    我们可以根据自己的需要选择要测试的响应字段,文本,还是代码,一般选择响应文本,然后,我们选择匹配规则,一般选择“包含”,如果要精确匹配,则可以选择“匹配”,但是选择“匹配”,因为响应的内容一般还包含其他的信息,比如html语言标签,所以很难准确匹配。然后在在要册似乎的模式下面,添加你要响应的内容。

     

    添加好断言后,要添加一个监听器,以监听响应断言,选择添加——监听器——断言结果,则,如果在执行的时候,http请求返回的数据符合添加的断言内容,断言结果则为运行成功的灰色,否则,则为运行失败的红色。

     

    以下是一个添加断言的例子,在这个例子中,主要是添加一条数据,然后再查询该数据,如下图所示:

    在这个测试计划中,我们添加房型的时候,传递的roomTypeBean.roomID值是一个带参数的值,因为这个值是唯一的,所以,我们利用jmetertime参数,给它一个参数化的值,这样每次添加的时候,该值都会根据时间的不同而变化。然后,在查询的时候,我们可以将这个值当作查询的条件,这样,每次执行,只要添加了数据,则查询的时候,就能够查询到新添加的数据,然后,在查询的时候,我们可以将这个值当作是断言。

     

    因为Jmeter是根据测试计划中的元件顺序执行的,如果直接在查询的时候,将添加的时候,参数化的值当作断言,则因为取time的时间不一致,断言结果肯定是错误的,我们要先定义一个基于线程组的用户参数,将time函数当作一个用户参数,然后再在添加和查询,以及断言的时候,调用定义的用户参数,则可以解决这个问题。

     

    添加jmetertime函数,选择选项——函数助手,然后选择__time函数,如下图所示:

    在“ormat string for SimpleDateFormat (optional)”中输入值“MMddhhmmss”,表示取月日时分秒。然后,点击生成,怎生成了time参数。

     

    然后再在线程组中定义一个用户参数,具体是添加——前置处理器——用户参数,出现添加用户参数的界面,如下图所示:

     

    在用户参数中,名称写你参数名称,如“current”,用户,输入在函数助手中生成的time参数${__time(MMddhhmmss,)}

     

    添加好用户参数后,在添加和查询的时候,在需要参数化的地方输入定义的用户参数,具体格式是${参数名},比如,上面我们定义的参数名是curent,则参数值应该是${curent},在断言中,断言内容也应该是${curent}这个。

     

     

  • Jmeter做性能测试——HTTP请求

    2007-12-04 15:13:07

    建立线程组

    Jmeter测试最多的是http请求,要创建这个测试计划,你要做的第一步就是添加线程组元件,这个线程组会告诉JMeter你想虚拟的用户数量,发送请求的频率以及发送请求的数量。继续,首先,选中测试计划,右键单击选择添加菜单,然后再选择线程组打开线程组配置页面如下图所示:

    下一步,你需要修改缺省的值,如果你还没有选中它的话,在这个树里选中线程组。你现在应该可以在JMeter窗口的右边看到线程组控制面板(见下图)。

    首先给这个线程组起一个有意义的名字,在名字域里,输入“测试”.

    然后,在线程数里输入5,下一个输入域,Ramp_Up Period,保持不变。这个值是告诉JMeter在开始各个线程之间延迟多长时间。例如,如果你输入5JMeter将会在5秒前完成该线程里的所有操作。因此,如果我们有5个线程和5Ramp_Up Period,延迟在开始线程之间会是1 秒(5个线程/5=1秒)。如果你设置此值为0JMeter则会立刻开始此线程的所有操作。

    最后,清除循环次数的复选项“永远”,然后输入2。这个值是告诉JMeter你的测试重复多少次。如果你输入1,那么JMeter只会运行一次你的测试。要不停的运行你的测试计划,选中“永远”复选框。

    在大多应用里,你必须手工接受你在控制面板里做的改动,但是,在JMeter里,控制面板能自动地接受你的变动如同你改动它们一样。如果你更改元件的名字,树将在你离开控制面板后被更新,以新文本显示(例如,当选择其它树元件)。

    添加HTTP请求

    这里利用一个虚拟的网址来说明如何建立http请求。给新添加的测试线程组添加第一个HTTP请求(添加->取样器-> HTTP请求)。然后填写其属性,如下图所示:

    说明:

    名称: HTTP 默认请求值 该元素的名称

      服务器名称或IPl测试服务器的IP或者名字

      端口号:80 服务器提供服务的端口号,服务器是Tomcat,所以端口号是80

      协议: http 发送测试请求时使用的协议,通常都用HTTP协议

    方法:http请求中使用的方法,如get post等。你要测试服务器对http请求的相应,你首先需要确定该http请求中使用的是什么方法,确定方法:查看网页源代码或者jsp,查找“method”,代码中method后面的值就是http请求中使用到的方法

      路径: 此处填写你要测试的页面的路径,不包括服务器地址

      同请求一起发送的参数:因为我测试的是登录,故添加了四个同请求一起发送的参数。要确定同请求一起发送的参数,你也需要查看网页源代码或者jsp,查找“input”,将该标签中的name值作为参数名,而将相应的value作为参数值。如下图所示:

    添加监视器来查看测试结果

    你还要给测试计划添加一个监视器。来将所有的HTTP请求结果存储到一个文件中并且显现出数据的可视模型。

    选择登录元件,然后添加一个图形结果监视器(添加->监视器->图形结果)。然后,你需要指定一个目录和一个输出的文件名。你可以输入到文件名域里,也可以选择“浏览”按钮来浏览目录并输入文件名。

     

1064/6<123456>
Open Toolbar