JMeter实现登录初始化(类似LR的init函数功能实现)

1.项目背景

在做项目的性能测试过程中,发现系统的登录功能非常慢,所以,在涉及到登录才能操作的场景,尽量避开登录操作

解决方案:

首选设置“登录并生成签名值”线程组

String oldtimestamp = bsh.args[0];
print (oldtimestamp);
${__setProperty(timestamp,${oldtimestamp},)}

同样的,设置

 

import org.apache.commons.codec.digest.DigestUtils;    
public static String sha1(String data) {    
    return DigestUtils.shaHex(data);
    }        
String a=vars.get("olduserId");
String b=vars.get("oldtoken");
String c=vars.get("oldtimestamp");
String inStr = a + b + c;
System.out.println("inStr值:"+inStr);
String test = sha1(inStr);
//String qumf = test.toUpperCase();
//String qumf = test.toString().toUpperCase();
//String lwx = qumf.toLowerCase();
//String test = sha1("hhly92194b1c71bfd41e14e3e9a0bb84bb116b5761493984936911");
//11c3b934d7e15397ef5fe95a069885f926f40d46
System.out.println("sha1加密值:"+test);
//System.out.println("sha1大写加密值:"+qumf);
//System.out.println("sha2加密值:"+lwx);
//vars.put("sign",qumf)
//vars.put("sign",lwx)
//vars.put("sign",test)
//vars.put("signature",test)
//props.put("sign",test); 
props.put("signature",test); 
//System.out.println("$sign");

设置全局HTTP信息头参数(项目中的参数都是通过http header参数传递)

执行hhly线程组中的请求(该请求需要登录后才能操作),演示效果如下

 

【_setProperty】函数介绍

作用:设置jmeter的属性值,函数的默认返回值是空字符串,因此该函数可以被用在任何地方,属性对于JMeter是全局的,因此可以被用来在线程和线程组之间通信

当遇到如跨线程组调用变量等情况,需要设置全局变量,可以通过JMeter中的属性解决

 

一、Jmeter中的属性:

 

1、JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性

 

2、JMeter属性在测试脚本的任何地方都是可见的(全局),通常被用来定义一些JMeter使用的默认值,可以用于在线程间传递信息。例如_setProperty函数

 

3、JMeter属性可以在测试计划中通过函数 _P 进行引用,但是不能作为特定线程的变量值。

 

使用全局变量就行
在a线程组后加入一个BeanShell PostProcessor处理器后,使用全局变量:${__setProperty(,,)}
使用时,使用全局变量:${__property(,,)}

 

4、JMeter属性可以通过_setProperty 函数来定义JMeter属性

输入需要的值然后点击生成按钮,或者直接使用${__setProperty(newuserid,${userid},)}的格式

设置局部变量userid和token为全局变量并在另一线程中调用,调用方式见下

5、JMeter属性是大小写敏感的

6、WorkBench中的属性查看组件:

   WorkBench右键--->Add--->Non Test Elements--->Property Display

 

二、Jmeter中的变量:

1、JMeter变量对于测试线程而言是局部变量。

2、在不同测试线程中,JMeter变量既可以是完全相同的,也可以是不同的。

3、JMeter变量引用方法:${name} 

4、JMeter变量是大小写敏感的

5、如果有某个线程更新了变量,那么仅仅是更新了变量在该线程中复制的值

6、Jmeter中定义变量的地方:

  a) 测试计划(Test plan),在右边的面板上添加User Defined Variables

  b) 线程组,右键选择 配置元件( config element)-->User Defined Variables

  c) 通过前置或后置处理器生成的变量,可参考我的另一篇:Jmeter关联

  d)使用csv参数化的变量,参数化可参考我另一篇:Jmeter参数化

 

注意:通过 a 和 b 两种方式定义的变量,在JMeter启动时对这个测试计划都是可见的。如果同一个变量在多个 b 中被定义,那么只有最后一个定义会生效。一旦某个线程启动后,

那么整个变量集合的初始值就会被复制到该线程中。其他测试元件,例如 c 或者 d 可以被用来重新定义变量,这些重定义仅仅影响当前线程。

文章参考:

 

posted @ 2017-05-25 11:56  Agoly  阅读(1663)  评论(0编辑  收藏  举报