发布新日志

  • 在Jmeter中使用Mysql的CONCAT提取测试数据

    2011-06-21 11:18:52

     

    在测试过程中,有时候需要通过查询数据库来获得想要的数据信息,但是使用JmeterJdbc请求查询出来的数据,使用正则表达式提取时,非常不方便,这个时候,可以使用一些函数,将查询结果转换为方便提取的格式,然后使用正则表达式提取。

     

    以下例子是使用Mysql CONCAT 函数

     

    select CONCAT('"name":',name,'') from `test`.`user` 

     

    正则表达是:"name":(.*)

     

    select CONCAT('num=',count(1),'') from `test`.`user` 

     

    正则表达是:num=(.*)

  • 使用Jmeter的BeanShell Sampler生成需要的参数

    2011-06-21 11:03:03

        在Jmeter中个,有时候需要使用一些数据,但是通过jmeter自身或者通过关联无法得到,这个时候,可以使用Jmeter的BeanShell Sampler,然后使用BeanShell脚本语言生成需要的数据,举例如下:

    ------以下代码是生成当前时间1小时之前的时间

    import bsh.EvalError;
    import bsh.Interpreter;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public static String dateAdd(String d) {
           if (d == null)
              return null;
           SimpleDateFormat format = new SimpleDateFormat("HHmmss");
           Date date = null;
           try {
              date = format.parse(d);
           } catch (Exception ex) {
           }
       
          
           long time = (date.getTime() / 1000);
           time = time - 1 * 3600;// 60 * 60 ;
           Date result = new Date();
           result.setTime(time * 1000);
          
           if (result != null) {
        String stime=format.format(result);
        System.out.print(stime);
                                     return stime;

           }
           return null;
        }
    dateAdd("${__time(HHmmss,)}");

  • Jmeter学习之监视器的使用!

    2011-03-13 21:25:21

    使用jmeter的tomcat监视器功能,可以通过向tomcat的status页面发送get请求,得到资源使用信息,然后转换为只直观的图像方式,这样的话,就可以监视到服务器的资源使用情况,不过需要注意的是,要使用tomcat监视器功能,就必须在要监视的服务器上装有tomcat。

    在服务器上配置tomcat6.0的相关操作如下:

    一、下载apache-tomcat-6.0.26

    下载地址:http://tomcat.apache.org/download-60.cgi

    下载后,安装成功。因为Tomcat 5.5 以后的binary 核心安装版不再集成Tomcat Administration Web Application,需要独立下载安装。不过在网上查到可以使用Tomcat 5.5 的Administration Web Application在Tomcat 6.0.26下配置成功

    二、下载Tomcat 5.5.29 的admin application:
    下载地址:http://tomcat.apache.org/download-55.cgi

    将解压后的conf和server文件夹覆盖到步骤一安装的tomcat目录

    三、下载Apache Commons Modeler,Logging组件,解压后将commons-modeler-XXX.jar、commons-logging-XXX.jar拷贝到Tomcat 6.0.26安装目录下的lib目录中。

    1.commons-modeler下载地址:

    http://commons.apache.org/downloads/download_modeler.cgi

    2.commons-logging下载地址:

    http://commons.apache.org/downloads/download_logging.cgi

     

    四、配置$CATALINA_HOME/conf/tomcat-users.xml.配置如下:

     

    <?xml version='1.0' encoding='utf-8'?>

    <tomcat-users>

      <role rolename="manager"/>

      <role rolename="admin"/>

      <user username="admin" password="admin" roles="admin,manager"/>

    </tomcat-users>

     

    注意:这里需要配置两个角色,admin角色负责Tomcat Administration管理,manager角色负责Tomcat Manager管理。


    五、重启Tomcat,在浏览器中输入http://127.0.0.1:8080/admin,如果能看到 Tomcat

    Web Server Administration Tool 的登录界面,即安装成功。若不成功,可以查看

    Tomcat 6.0.26安装目录下logs目录里的日志文件如(admin.2007-12-14.log),看看是出了什么问题。

    成功安装好tomcat后,配置Jmeter的监视器,具体步骤如下

    1.       配置http授权管理器

    如果要请求道tomcat的status页面,则需要访问status页面的权限,所以首先需要配置http授权管理器,添加http授权管理器后,在用户名和密码处分别填写在配置tomcat时,配置的admin权限的用户名,密码。

    2.       配置http请求。

    此处配置的http请求,就是请求服务器的tomcat的status页面,所以服务器地址填写要监视的服务器地址或IP,端口号填写设置的端口号,一般是8080,协议填写http,方法填写get,路径填写/manager/status,同时需要填写一个随请求发生的参数XML,值填写ture。

    3.       配置定时器

    因为我们这里的http请求只是为了获取服务器的资源情况,而不是向服务器加压,因此需要配置一个定时器,比如每5秒发送一次请求,获取一次服务器资源情况,因此固定定时器线程延迟时间可以设置为5秒

    4.       添加监视器结果

    5.       
  • 用Jmeter做接口测试

    2010-08-29 10:02:40

        最近做接口测试,服务层的代码先是用junit写,因为项目时间紧,加上流程经常变化,单元测试代码写的很粗糙,需要不停的准备不同的测试数据,不能进行自动化的执行,一个方面是流程确实需要不同的测试数据,另外一个方面是,测试代码中没有对测试数据进行处理,所以会造成这样的情况,不过为了测试流程的正常性,这些进行测试也是可以的。

        在开发代码都稳定后,是用这样的测试方法肯定是不行的,也考虑过重构单元测试代码,但是因为项目调用到好几个服务,但是只有三个入口,而测试的主要目的是进行接口测试,单元测试只是辅助开发进行测试,所以如何进行更优化的接口测试是主要的。

        因为对Jmeter熟悉,再加上之前是用Jmeter做过HTTP协议的接口测试,所以考虑用jmeter来做接口测试,主要是使用Jmeter的java请求,编写相应的测试代码,在jmeter的代码中,调用入口方法,而方法需要的参数通过java请求的参数传递,这样可以使用参数化对传递的参数进行参数化,为了快速查找问题,在代码中,使用Jmeter提供的方法设置了请求的数据以及相应的数据,而为了验证测试结果是否通过,在代码中取得发放返回值,然后和期望值进行比较,如果一致,则测试结果为真,否则为测试失败。

        当然仅仅是在代码中对方法返回结果进行比较还不够,还需要到数据库去验证相应的数据是否存在,是否修改,这就用到了jmeter的beenshell断言,另外,因为测试结果也会在web页面中体现,所以也增加了http请求,设置断言,断言web页面的值和期望一致。

        通过以上方法,可以实现使用Jmeter进行接口测试,然后通过和ANT集成,每次在修改底层代码后,跑一遍测试脚本,基本上可以确认是否存在问题。

        另外使用jmeter准备的测试脚本,可以用来做性能测试,或者用来准备数据也是非常的方便!

        以上只是对流程进行描述,没有相应的代码,看的也学会云里雾里,后面会把代码贴上来!

  • 使用Beanshell Assertion实现Jmeter测试结果和数据库比对

    2010-08-12 20:03:02

        在使用jemeter的过程中,有时候希望能够将jmeter的响应结果直接和数据库进行比对,可以使用Beanshell Assertion实现Jmeter测试结果和数据库比对,参考如下


    import java.sql.*;
    import java.util.*;
    import java.lang.*;
    import org.apache.regexp.*;

    String drive = "com.mysql.jdbc.Driver";
    String url = "jdbc:mysql://19x.16x.xx.xx:3306/";
    String dbName = "Name";
    String user = "user";
    String pass = "pass";

    String Myvar = vars.get("Param");

    String query = "SELECT MyDescription From Mytable Where Mycriteria = '" + Myvar + "'";
    Connection Mycon = null;
    Statement Mystmt = null;
    ResultSet Myrset = null;

    String[] Comp = new String[24];
    RE rex;
    boolean found;

    String Mypattern;
    byte[ ] Myarr = (byte[ ])ResponseData;
    String Myresp = new String(Myarr);

    Mycon = DriverManager.getConnection(url+dbName, user, pass);
    Mystmt = Mycon.createStatement();
    Myrset = Mystmt.executeQuery(query);

    int a=1; int b=0;
    while (Myrset.next())
    {
    Comp[b] = Myrset.getString(1);
    print(" "+ (a) +" " + Comp[b]);

    Mypattern = Comp[b];
    rex = new RE(Mypattern);
    found = rex.match(Myresp);
    print(Mypattern + (found ? " DOES MATCH " : " DOESN'T MATCH ") + "Response Returned\n");

    if (found==false) 
    { Failure = true;
    FailureMessage = "The Values in the Response do not match the expected data."; }

    a=a+1; b=b+1;
    }

    Myrset.close();
    Mystmt.close();


        以上代码可以根据实际情况修改,可以实现数据库验证!
         
  • Jmeter培训计划

    2010-08-09 18:18:27

    一家国外网站的关于Jmeter的培训课程,看看有多少是自己不会的,可以研究研究!

    Introduction

    Why use JMeter?

    Overview of functional/regression/stress testing principles

    Designing a basic test plan

    How to identify your testing needs

    Defining the steps of your test

    Creating your first JMeter test

    Introducing the JMeter GUI

    The basic elements of a JMeter test plan

    Building a functional test with your Internet browser

    Executing your functional test

    Reading the results of your test

    The power of JMeter

    Comprehensive overview of the available JMeter components and functions

    Implementing an advanced functional test using the key JMeter functions and components

    Designing and implementing your own practical example to "test" a website of your choice

    Regression testing

    Using your functional tests for regression testing

    Future proofing your tests

    Stress testing

    Analysing your website traffic

    Identifying what you need to test

    Mimicking the real world in JMeter

    Extracting and reading the results

    Other key features

    Stress testing a database

    Using JMeter from the command line

    Editing a test plan in a text/XML editor

    Performance Testing Fundamentals

    Stress testing

    Load testing

    Soak testing

    Running multiple threads

    Setting rump-up period

    Threads and users

    Distributed Testing

    Configuring servers

    Gathering results

    Submitting Forms

    Extracting form. ID or checksums

    Generating sequence or random data

    Getting data from database

    Recording forms with a JMeter proxy server

    Submitting data recorded in log files

    Managing Sessions

    Session managers

    Session per thread

    Session per user

    Load Distribution

    Using Apache log files to determine distribution

    Analysing distribution and creating appropriate test plans

    Timers

    Gaussian Random Timer

    Other Resources and Load Time

    Images

    Java scripts

    JMeter and HTTP headers policy (browser and proxy caching)

    Resource Monitoring

    Monitoring and analysing CPU resources

    Monitoring database queries

    Monitoring memory utilization

    Monitoring network traffic

    Running monitoring tools periodically

    Analysing and Interpreting Load Test Results

    Running tests at night and creating periodical reports

    Statistics available from JMeter

    Sample, Average, Median, Deviation, Throughput

    Response time graphs

    Margins of Error

    Analysing results with Excel

    Interpreting statistical results

    Finding the bottlenecks

    Regression and correlations

    Distributed (Remote) Testing

    Preparing remote environment

    Running distributed

    Gethering and analysing results

    Using distributed testing with load balancers

    Variables

    Creating user variable

    Extracting data from a web page to a variable

    Functions

    Using functions

    Function helper

    Using BeanShell Scripting

    Short introduction to BeanShell

    Creating samplers

    BeanShell listener

    __BeanShell function

    Testing Application with Real Data

    Configuring Apache Web Server to record appropriate data

    Access Log Sampler

    Security issues

     

  • Eclipse下编译jmeter2.4源代码

    2010-07-31 00:28:26

    1,下载jakarta-jmeter-2.4_src.zip和jakarta-jmeter-2.4.zip解压。


    2,下载3个jar包,(很重要要不会有n多的错误),分别是mail.jar,jms.jar,activation.jar


    3,将jakarta-jmeter-2.4.zip下的lib中的jar包拷到jakarta-jmeter-2.4_src.zip下的lib目录中并加上下载的三个jar包。并且修改commons-logging1.1.jar为commons-logging.jar。然后在lib目录下新增三个空文件夹ext,junit,api.(主要是为了对应Jmeter的eclipse.classpath。)
    4,打开eclipse,新建java工程,命名,选择import,选择从文件导入,选择jakarta-jmeter-2.4_src.zip解压后的目录,选择除src目录以外的所有目录。之后再导入src目录(因为新建java工程是已经有src目录了),所以要分别导入。
    6,关闭eclipse将jakarta-jmeter-2.4_src.zip下的eclipse.classpath中的内容复制一份替换工程下的.classpath的内容,然后重新开启eclipse,选择工程编译,这个时候,会有一些编译的错误,主要是jar包不存在或者jar包的版本名称不一致,下载相应的jar包或者修改jar包名称,使之符合.classpath描述信息,直至编译不报错。

    7,jmeter源代码org.apache.jmeter.assertions.SMIMEAssertion会报错,主要是缺少org.bouncycastle对应的包,下载该包。

    8,此时可正常编译,编译通过后,使用ANT正常编译(需要本机安装ANT,并且需要设置jdl环境变量)

    9,ant编译通过后,选择org.apache.jmeter.NewDriver设置运行配置,在Arguments" 标签中,工作目录不选择默认,而选择其他设置/{工程目录}/bin,其他默认。或者可以参考http://people.apache.org/~mkostrze/jmeter-eclipse/index.html 

    10.设置成功后,就可以运行或者debugJmeter。


     

  • JMeter 2.4发布

    2010-07-30 21:11:40

    JMeter 2.4主要改进包括:
    1.升级了对Java版本的要求,目前需要最低Java 1.5的支持。
    2.改进了HTTP代理功能,支持记录HTTPS session的功能。
    3.升级了JUnit对现在JUnit4的支持注解
    4.增加了JSR223(javax.script)测试元素的内容
    5.改进了MailReader类以支持多种协议
    6.增加了SMTP 的示例代码
    7.支持用户自定义线程组功能的实现
    8.增加了树形结果展示的选项,包括检索功能和正则表达式测试。
    9.提高了StatCalculator,聚合报表的性能,运行时这些功能的需要的内存变得更小
  • Jmeter问题记录

    2010-07-06 18:27:01

        论坛的Jmeter板块中有好多朋友问一些问题,对于一些可以使用文字回答,并且自己能够回答的问题,记录在此:

    1. Mysql数据库的压力测试聚合报告里给出 Error% 为62% 设置了150个线程 报错62%信息提示是 超时

    答:这个原因是因为连接超时,因为jmeter的JDBC Connection Configuration 默认设置的 Max Number of Connections是10,Pool TimeOUT是10000ms,你可以增大Max Number of Connections,或者增大Pool TimeOUT。

    2. JMeter读取CSV中中文都是乱码,HTTP请求中,发送参数,如果是中文最后显示乱码。

    答:同请求一起发生的参数中,编码字段是否勾选,如果没有勾选,勾选,看是否可以纠正。

  • Jmeter测试ORACLE数据库并发---索引的优点

    2010-07-03 17:00:19

    1,测试验证用到的简单的sql语句:
    /* Formatted on 2010-6-29 11:56:58 (QP5 v5.115.810.9015) */
    SELECT   *
      FROM   (SELECT   row_.*, ROWNUM rownum_
                FROM   (SELECT   "order_date"
                          FROM   "test"
                         WHERE   "order_no" =
                                    TRUNC (DBMS_RANDOM.VALUE (24, 50024))) row_
               WHERE   ROWNUM <= 20)
    WHERE   rownum_ > 0

    2,数据准备说明
    a,本次对一个有5个字段的表test进行基本测试,验证两种情况:一,字段order_no有索引;二,字段order_no无所有,有无索引时做相同的测试验证
       b,相应时间单位:ms
       c,测试验证分同时并发和分钟并发两种情况验证
       d,表中有50000条数据
    3,测试得到的数据

    同时并发(Ramp-Up Period=0)---单位ms
    10并发 50并发 80并发 100并发
    无索引 756 2109 3053 3723
    有索引 357 385 413 430


    分钟并发(Ramp-Up Period=60)---单位ms
    200并发 500并发 1000并发 1500并发
    无索引 255 260 10702 33163
    有索引 4 3 1 4


    4,结论总结
    1,500以下的并发,有无索引,用户不会有太明显的感觉,因为他们的执行时间都不会大于0.3s
    2,以“较高(500~3000)”并发频率对50000数据的表进行简单的查询,此时有无索引就会有明显的差别,可以达到5s以上
    3,以“极高(>3000)”并发频率对50000数据的表进行简单的查询,此时相应时间就会很慢,很慢

        结合实际应用考虑,一些简单的表(字段不太多,结果不复杂),在单个用户反复执行sql语句时,有无索引对用户来说可能体验不到响应时间上的差异,而对于多用户并发对这个表做操作时,有无索引的差异就会很明显:在“较低”频率并发情况下,由于表比较简单,响应时间很小,看不出大的差异,当并发频率“较高”,如大于500时,这种差异就会很明显,如上面1500的并发,响应时间相差3s,依此类推,如果表字段很多,嵌套结构复杂,有无索引并发执行的差异将会很大。
  • Jmeter测试结果文件的分析

    2010-05-08 12:30:57

      在性能测试过程中,我们往往需要将测试结果保存在一个文件当中,这样既可以保存测试结果,也可以为日后的性能测试报告提供更多的素材。

      Jmeter中,结果都存放在.jtl文件。这个.jtl文件可以提供多种格式的编写,而一般我们都是将其以csv文件格式记录,这样做是因为csv文件格式看起来比较方便,更重要的是这样做可以为二次分析提供很多便利。

      我这里所说的二次分析是指除了使用Listener之外,我们还可以对.jtl文件进行再次分析。

      a.设置jtl文件格式

      我们从jmeter官方网站中下载下来的Jmeter解压后是可以直接使用的。但是,使用默认配置生成的jtl文件内容并不能满足我们的需要。于是我们必须进行必要的设置。在2.2版本中,如果要修改jtl设置必须要到jmeter.properties文件中设置;但是在2.3版本中,我们只需要在界面上设置就可以了。你只需要选择某个Listener,点击页面中的configure按钮。此时,一个设置界面就会弹出来,建议多勾选如下项:Save Field Name,Save Assertion Failure Message。

      b.jtl文件中的各项

      经过了以上设置,此时保存下来的jtl文件会有如下项:

      timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,Latency

      请求发出的绝对时间,响应时间,请求的标签,返回码,返回消息,请求所属的线程,数据类型,是否成功,失败信息,字节,响应时间

      其中聚合报告中的,吞吐量=完成的transaction数/完成这些transaction数所需要的时间;平均响应时间=所有响应时间的总和/完成的transaction数;失败率=失败的个数/transaction数

      温馨提示:在jmeter2.2和2.3版本中,都存在的一个问题是当我们重新打开jmeter,使用某个Listener来查看jtl文件时,jmeter是会报错的。因此当你使用命令行方式完成了一个场景的测试后,你得到的只是一堆保存在jtl文件中的原始数据。所以知道聚合报告中的各项的来源是可以方便大家摆脱测试工具来进行结果的分析。 

      总的来说,对于jmeter的结果分析,主要就是对jtl文件中原始数据的整理,我是使用一些小脚本进行相关的分析的,不知道你打算怎么做呢?

      反正实践后,你总能找到一条属于自己的数据分析之路。

  • Jmete中的Java Reuest的使用方式

    2010-01-24 16:53:58

        使用Jmete中的Java Reuest,可以对编写的java类或者方法进行测试,Jmeter没有自带编译器,需要借助第三方编译器才能实现,因此使用Java编译器编写测试代码,将测试代码和需要测试的类都放入Jmeterlib文件夹下,然后再Jmeter中添加Java Reuest,就可以进行相应的测试了,下面结合一个实际的例子说明了如何使用Java Reuest

     

    1.     打开Java编译器,新建一个项目"JavaRequest",然后新建一个包"Jmeter.JavaRequest".

    2.        "JavaRequest"项目中,引入ApacheJMeter_core.jar""ApacheJMeter_java.jar这两个JAR文件.(具体的引入方法参考各个Java编译器的使用方法)

    3.         "Jmeter.JavaRequest"包中新建一个类,名字叫"TestJmeterRequest",这个类要继承"AbstractJavaSamplerClient",如果项目引入步骤二中的两个文件,就可以找到"AbstractJavaSamplerClient"类了.

    4.       "TestJmeterRequest"类在继承"AbstractJavaSamplerClient"类的同时也会继承四个方法,分别是"getDefaultParameters","setupTest","runTest""teardownTest"方法."getDefaultParameters"方法主要用于设置传入的参数;"setupTest"方法为初始化方法,用于初始化性能测试时的每个线程."runTest"方法为性能测试时的线程运行体;"teardownTest"方法为测试结束方法,用于结束性能测试中的每个线程.

    5.       具体实现代码如下:

    package Jmeter.JavaRequest;

     

    import org.apache.jmeter.config.Arguments;

    import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;

    import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;

    import org.apache.jmeter.samplers.SampleResult;

     

    public class DataBase extends AbstractJavaSamplerClient {

      private static String label = "databaseTest";

      private String sql1;

      private String sql2;

        private SampleResult results;

        private String testStr;

       

      public void setupTest(JavaSamplerContext arg0)

      {

            System.out.println("setupTest");

            results = new SampleResult();

            testStr = arg0.getParameter("testString", "");

            if (testStr != null && testStr.length() > 0) {

                   results.setSamplerData(testStr);

            }

      }

     

      public SampleResult runTest(JavaSamplerContext arg0)

     

      {

            sql1 = arg0.getParameter("host");

     

            sql2 = arg0.getParameter("port");

     

            SampleResult sr;

     

            sr = new SampleResult();

     

            sr.setSampleLabel(label);

     

            try

     

            { // 这里调用我们要测试的java类,这里我调用的是一个DatabaseTest

     

                 DatabaseTest datatest=new DatabaseTest();;

                 //datatest.main(null);// 调用要测试的方法

                 datatest.initialConnection();

     

                 sr.sampleStart(); // 记录程序执行时间,以及执行结果

     

                 sr.setSuccessful(true);

     

                 System.out.println("send over!");

     

            } catch (Throwable e)

     

            {

                 System.out.println("Exception is " + e.getMessage());

     

                 sr.setSuccessful(false);

     

            } finally

     

            {

                 sr.sampleEnd();

            }

     

            return sr;

      }

     

      public void teardownTest(JavaSamplerContext arg0)

     

      {

      }

     

      public Arguments getDefaultParameters()

     

      {

            Arguments params = new Arguments();

             params.addArgument("sql1", "");

             params.addArgument("sql2", "");

            return params;

     

      }

     

    }

    6.     把上面的例子打包,然后把生成的"TestJavaRequest.jar"文件拷贝到Jmeter的安装目录lib\ext.

    7.       运行Jmeter,添加一个线程组,然后在该线程组下面添加一个Java请求(Sampler),Java请求的类名称中选择刚创建的类"Jmeter.JavaRequest. TestJavaRequest ",然后添加一个监听器(聚合报告),设置一下模拟的用户数就可以测试了.如果测试不成功,Jmeter会在它自己个输出框中抛出这个字符串.
          
    使用Jmeter自定义Java测试代码,配合Jmeter自带的函数,就可以实现出LoadRunner"Java Vuser"协议的绝大多数功能.

  • Jmeter请求_TCP协议

    2009-04-15 17:31:46

    最近在测试一款类QQ的聊天工具,需要对该聊天工具进行一些性能测试,因为发送请求的协议是使用TCP协议,所以就考虑使用jmeterTCP协议来试验是否能够成功,因为之前也没有使用过TCP协议,经过几天的实践,终于可以成功发送请求,并且收到服务器响应,相关记录如下:

    1. TCP协议

    2. 注意要点

      a 服务器地址和端口一定要填写正确

      b 要发送的文本框中输入tcp协议内容

      c.re_use connection表示重复发送连接请求

      d. 登录配置中的用户名和密码,如果TCP请求不需要用户吗密码,可以不用填写。

    3. 响应内容

      响应结果中会返回TCP请求的应答包,可以根据响应内容来查看请求是否正确被响应

     

  • 用jmeter测试https应用

    2008-12-17 15:16:01

      该文为转载

     

        实验室的项目是做关于web servicesecurity产品,主要是对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^_^

        接着设置客户端的trustStorejmeter需要它来信任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倍多的时间,赞,终于有数据可以说服老师了,哈哈。

     

  • Jmeter应用评估

    2008-08-28 11:30:58

    本文非原创,转载自网络,尊重作者版权

    综述:

    在客户端程序上,与LR相比,jmeter只有一个主程序,脚本设计、场景设计、运行监视、报告结果均在一起完成,没有独立的调试器,所以脚本实际上跟场景是一体的;

    在概念上,jmeter的测试计划可以对应LR的测试场景,而线程组可以对LR的测试脚本,与LR不同的是,jmeter的线程组既可以设置各自的并发用户数,也可以设置各自的运行时间;jmeter使用各种取样器作为请求的发生器,比如我们会经常用到的“HTTP请求”取样器,可以对应到LR的请求函数“web_url”(get)“web_submit_data”(post);使用逻辑控制器来实现“if”“swith”“for each”“while”来实现逻辑语法;定时器可以实现think time;报表中的Throughput对应LR中的TPSKB/sec对应LR中的Throughput,这一点可能容易混淆。

    在结构上,jmeter使用各种元件组成脚本,代码为树形结构(.jmx脚本为xml格式)。

    在功能上,jmeter没有独立的调试器,必须运行来进行脚本的调试;没有目标场景,但从用户手册的说明上来看,应该可以通过元件组合实现目标场景;只有针对响应时间的统计图形展现,没有针对事务数的统计图形展现;资源监视模块只针对tomcat5以上),解析tomcatstatus返回的xml来实现,没有Linux资源监控。

     

    脚本功能:

    利用代理服务器截取协议包方式,脚本形式为xml,解析执行,没有单独的调试器。代理服务器可以生成“HTTP请求”取样器脚本以及定时器。

     

    Jmeter脚本由各种jmeter元件组成。这些元件有:取样器、配置元件、定时器、逻辑控制器、前置处理器、后置处理器、断言、报告。

     

    取样器:生成压力的元件,如产生http请求、ftp请求等

    配置元件:与脚本中的配置有关,如用户变量、cookies设置、http头设置等

    定时器:产生延时(think time

    逻辑控制器:对代码做逻辑控制,如if条件判断、for循环等

    前置处理器:取样器操作前的处理,如用户参数、URL rewrite

    后置处理器:取样器操作后的处理,如提取响应信息(关联数据)等

    断言:即检查点,支持正则

    报告:结果展现,如响应数据、服务器监控数据等

     

    参数化文件:两种读取方式——CSV Data Set Config元件和函数:

    CSV Data Set Config元件提供比较丰富的参数设置:编码方式、分隔符、循环使用、共享模式;这里有一个注意点:Allow quote data”选项选为“true”的时候对全角字符的处理出现乱码。利用设置共享模式可以实现在LR中的“Sequential”和“Unique”,对应选项为:“Sequential”用“Current thread”;“Unique”用“Current thread group”(当前的线程组内)或“All treads”(所有的线程组中)。

    StringFromFile”和“CSVRead”函数也可以实现读取参数化文件,“StringFromFile”的方式类似于“Unique”,而“CSVRead”很特别,是每个线程只读取一行作为参数,无论循环多少次,各个线程依次读取。

     

    其它参数化,函数实现:

    1.              使用线程名作为参数:“threadNum”函数,返回格式为“线程组名称+空格+线程组编号+横线+线程编号”;

    2.              使用机器名作为参数:“machineName”函数;

    3.              使用时间作为参数:“time”函数;

    4.              使用随机数作为参数:“Random”函数

     

    检查点:jmeter提供的断言种类很丰富,支持正则表达式的多种匹配规则。

     

    压力产生的元件是取样器,其中最常用的是“HTTP请求”。利用逻辑控制器元件可以实现条件判断、循环等算法。

    另外jmeter提供了后置处理器元件建立关联,常用的是“正则表达式提取器”元件,提取响应返回的数据产生关联数据,进行后续处理或用于后面的请求。

     

    场景设置:

    没有目标场景

    线程组可理解为LR Controller中的单个脚本,多个线程组就是多个脚本,可以通过禁用/启用操作来控制执行的线程组。

    可以设置逐步增加压力,也可以设置一次性加压。

    设置集合点:通过“Synchronizing Timer”这个定时器,可以设置多少个并发用户集合到一起。

    监控资源:使用“监视器结果”来监控,但目前只支持tomcat5以上);原理:该功能是通过解析tomcat的管理status返回的xml实现的;监控得到的结果是负载、内存、线程。

    可以通过逻辑控制器,以及不同的配置原件来模拟不同的业务场景

      

  • 用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倍多的时间,赞,终于有数据可以说服老师了,哈哈。

  • 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”函数如下图所示:

     

301/212>
Open Toolbar