zoukankan      html  css  js  c++  java
  • jmeter笔记

    jmeter 学习


    log:写入信息到jmeber.log文件,使用方法:log.info(“This is log info!”);

    vars - (JMeterVariables):操作jmeter变量,这个变量实际引用了JMeter线程中的局部变量容器(本质上是Map),它是测试用例与BeanShell交互的桥梁,常用方法:   

    a) vars.get(String key):从jmeter中获得变量值
    
    b) vars.put(String key,String value):数据存到jmeter变量中  

    props - (JMeterProperties - class java.util.Properties):操作jmeter属性,该变量引用了JMeter的配置信息,
    可以获取Jmeter的属性,它的使用方法与vars类似,但是只能put进去String类型的值,而不能是一个对象。对应于java.util.Properties。

    用于存取jmeter 全局静态变量
    
        a) props.get("START.HMS");  注:START.HMS为属性名,在文件jmeter.properties中定义
    
        b) props.put("PROP1","1234");
    
    设置全局变量 : props.put(key,value) ${__setProperty(REGNAME,${REGNAME},)};
    
    引用全局变量 : props.get(key) ${__property(变量名)}
    

      

    ${__setProperty(property name,property value,True/False)} 设置全局变量 注:该函数的参数无需使用双引号引用################
    该函数用来给JMeter属性设置值,默认返回值为空字符串,所以函数在任何地方被调用都是有效的
    Property Name:要设置的属性名,必要属性
    Property Value:要设置的属性的值,必要属性
    True/False:原值是否要返回,非必要属性;当设置为“true”,将返回原始值
    作用域:跨线程组调用,可以在任意地方调用,但不能跟在import xxx后面

    ${__P(property name,default value)} 如果没有提供默认值,则默认给1
    这是简化版的属性函数,旨在为用户在命令行使用属性定义。它不像__property函数那样有可以存值的变量,
    并且如果没有提供默认值,侧假定默认给1,原因是它对常见的测试变量(如循环、线程数、ramp up等)有效

    prev - (SampleResult):获取前面的sample返回的信息,常用方法: beanShell 中使用, 不需要导包
    
        a) String response_data = prev.getResponseDataAsString() :获取响应信息
    
        b) String code = prev.getResponseCode() :获取响应码
    
    c) String ctime = prev.getConnectTime().toString() :获取连接到服务器的时间
    
    d) String cType = prev.getContentType(); :获取头文件中ContentType类型
    

      

        更多方法可参考:org.apache.jmeter.samplers.SampleResult

    ctx - 代表上下文信息,能直接用。

    ctx.getCurrentSampler(); 获取当前 sampler 请求

    ctx.getPreviousSampler(); 获取前一个 sampler 请求

    ctx.getThreadNum(); 获取当前线程的序号,从 0 开始计数

    ctx.getThread(); 获取当前线程

    ctx.getThreadGroup(); 获取当前线程组

    ctx.getProperties(); 获取所有属性

    ctx.getVariables(); 获取当前线程的所有变量

    函数助手: 如果参数为时间戳__time(,),那公式为:

    ${__time(,)} : 默认该公式精确到毫秒级别, 13位数

    ${__time(/1000,)} : 该公式精确到秒级别, 10位数

    //String timestamp = Long.valueOf("${__time(,)}").toString();
    String timestamp = "${__time(,)}".toString(); // 获取时间戳
    //String timestamp = String.valueOf(Long.valueOf("${__time(,)}"));


    当使用jdbc request的结果作为参数时,要写成${username_1}这样子,1代表你查出来的数据第一行,想取第几行就把1改成几。

    清理打开的历史记录
    HKEY_CURRENT_USERSoftwareJavaSoftPrefsorgapachejmeterguiaction

    BeanShell断言,使用Failrue来标识断言失败,FailureMessage标示断言失败的原因
    Failure = false;-----表示断言成功,

    FailureMessage = "……"; ----自定义的成功信息

    Failure = true;-----表示断言失败,

    FailureMessage = "……";-----自定义的失败信息。
    code=vars.get("rescode");
    if (!code.equals("00000")) { //响应信息的状态值status_str不等于0,则断言其他与实际值不一致
    Failure=true;
    FailureMessage="请求失败";
    };


    beanshell计算签名
    sample 是sample对象 ,使用时 #########需要引入包import org.apache.jmeter.config.Arguments;#########
    Arguments args = sampler.getArguments();
    String str1 = args.toString();
    log.info("str1 : " + str1);
    String bodyStr = str1.substring(1, str1.length()).replace("(","").replace(")",""); // 去掉括号
    log.info("bodyStr : " + bodyStr);

    String bodyStrCQ = sampler.getArguments().getArgument(0).getValue(); // 获取当前请求的body
    String query_str = "body=" + bodyStr + "&timestamp=" + timestamptmp + "&user=" + "${regName}"; //&req_id=123
    String sig = DigestUtils.sha256Hex(query_str); // 签名

    //String timestamp = Long.valueOf("${__time(,)}").toString();
    String timestamp = "${__time(,)}".toString(); // 获取时间戳
    //String timestamp = String.valueOf(Long.valueOf("${__time(,)}"));

    竹杖芒鞋轻胜马,一蓑烟雨任平生。 回首向来萧瑟处,也无风雨也无晴。
  • 相关阅读:
    JAVA 基本数据类型长度
    字符编码详解
    几种编码方式
    Java1.5泛型指南中文版(Java1.5 Generic Tutorial)
    java泛型小问题
    java中的equals()方法
    Java泛型中E、T、K、V等的含义
    数据库的基本操作
    Mysql数据类型简介(大概了解)
    [BZOJ 2007] 海拔
  • 原文地址:https://www.cnblogs.com/yaobiluo/p/12169831.html
Copyright © 2011-2022 走看看