测试

jmeter遇到的各种坑

2017-05-23  本文已影响0人  七七总是很暴躁

1.当只需要校验response而不需要校验返回code时,响应断言里勾选“ignore statue”即可。

2.put请求,需要把路径和参数全都放在“路径”里,参数之间用&隔开。eg:api/v1/example?appVer=6&DeviceId={sDeviceId}&token={token}&nick=lily

3.要把参数放在body data,必须添加信息头管理器,content-type=application/json。

4.返回401 nauthorized。
前面登录接口肯定返回了一个类似token的值,把这个值加上Bearer 作为字段Authorization的值添加到信息头管理器内即可。如:


image.png

5.提取返回值,优先考虑json Extractor,然后再考虑正则表达式。json Extractor语法为.data.token,有字段为数组的时候.data[0].token。

6.在jmeter内,利用BeanShell Sampler做MD5加密:
MD5算法文件生成jar包放到jmeter的lib/ext文件夹下,然后在jmeter内测试计划下add directory or jar to classpath点击添加把jar文件路径加上;最后执行接口后,生成的加密字符串可通过输出变量myMD5调用。
MD5算法:

package com.md5;



import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 
 * @author mapapa
 *
 */
public class TestMd5 {
    
    static protected char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};

    static protected MessageDigest messagedigest=null;

    
    
    public static byte[] addBytes(byte[] bytes1,byte[] bytes2) {
        byte[] newByte=new byte[bytes1.length+bytes2.length];
        System.arraycopy(bytes1, 0, newByte, 0, bytes1.length);
        System.arraycopy(bytes2, 0, newByte,bytes1.length,bytes2.length);
        return newByte;
    }


    
    public static String getMD5String(byte[] bytes) {
        try {
            messagedigest=MessageDigest.getInstance("MD5");
        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        messagedigest.update(bytes);
        
        return bufferToHex(messagedigest.digest());
    }

    public static String getMD5String(String md5) throws NoSuchAlgorithmException{

        byte[] bytes = md5.getBytes();
        
        messagedigest=MessageDigest.getInstance("MD5");
        
        messagedigest.update(bytes);
        
        return bufferToHex(messagedigest.digest());
    }
    
    private static String bufferToHex(byte bytes[]){
        return bufferToHex(bytes,0,bytes.length);
    }
    
    private static String bufferToHex(byte bytes[],int m,int n){
        
        StringBuffer sb=new StringBuffer(2*n);
        
        int k=m+n;
        
        for (int i = m; i < k; i++) {
            
            char c0=hexDigits[(bytes[i] & 0xf0)>>4];
            
            char c1=hexDigits[bytes[i] & 0xf];
            
            sb.append(c0);
            
            sb.append(c1);
            
        }
        
        return sb.toString();
        
    }
    
    
}

BeanShell代码:

import com.md5.TestMd5;


String tests = "${token}${timestamp}aaabbb";

byte[] bytes = tests.getBytes();

 String md5String = TestMd5.getMD5String(bytes);

vars.put("myMD5",md5String)

7.BeanShell Sampler可能存在缓存,即之前引入的jar文件执行成功后,删除该jar文件导入一个新的修改过的jar,执行的仍有可能是之前的jar,需要将所有路径下先前的jar删除,重启jmeter,再引入新的jar。

8.JDBC Request,sql语句里,可以{variable name}引用前面接口返回的或者自定义的变量,但要引用前面的sql语句查询结果时,直接{variable name}会拿不到值,可能的原因是前一个sql语句返回的查询结果并不是严格按照variable name = XX返回,而是如下:
user_id_#=1
user_id_1=16728
此时要引用user_id,则需要在语句里写成${user_id_1}。

上一篇下一篇

猜你喜欢

热点阅读