JMeter-Websocket接口自动化

JMeter-Websocket接口自动化

结构图

1.准备

提前安装好JMeter Plugins Manager,后续用的到部分组件需要通过插件管理器安装,比如JSR断言、WebSocket Open Connection等组件

2.实现思路

2.1 通过HTTP请求获取token

token有过期时间,每次手动设置较为麻烦,故通过组件每次运行获取新的token

2.2 设置循环控制、断言变量

也有每次循环重置变量的作用,避免变量结果复用

2.3 建立WebSocket连接

WebSocket连接实在HTTP请求的基础上建立的,也就是在HTTP请求中高速对方,我要和你建立websocket连接,所以必要的HTTP请求头参数要带上


2.4 设置While循环控制读取CSV文件数据

2.4.1 csv文件设置,一般这样设置参数即可
变量名称:message,expected_steps

对应vars中的变量,变量值是根据分隔带JMeter自动处理的,变量名称 数量和分隔后的变量值 数量不对应也没影响,两者缺少的值会忽略或者设置为空值

2.5 设置websocket请求体数据

2.6 设置循环来保证接收到需要的响应(排除ping响应的影响)

JSR223后置处理脚本(从正确响应中拆解出需要的数据):

脚本是类似C语言的执行模式,方法在前,调用在后

java 复制代码
import org.json.JSONObject;
import org.json.JSONArray;

// 解析read的响应数据为json格式
public JSONObject parseResponse(String response) {
	try {
		JSONObject jsonResponse = new JSONObject(response);
 		return jsonResponse;
    } catch (Exception e) {
		log.info("解析read结果失败: " + e.getMessage());
		return null;
    }
}

// 判断action是否为chat
public Boolean processAction(JSONObject jsonResponse) {
	try{
		if (jsonResponse.has("action") && jsonResponse.get("action").toString().equals("chat")) {
    			return true;
		} 
		else {
			return false;
		}
	}catch (Exception e) {
		System.err.println("processAction发生异常: " + e.getMessage());
	     return false;
	}	
}

// 获取read结果的steps
public List<String> getStepsList(JSONObject jsonResponse){
	// 解析实际步骤
    List<String> actualSteps = new ArrayList<>();
	
	try{
		JSONArray plan = jsonResponse.getJSONObject("xxxx")
						   		.getJSONObject("data");
		for (int i=0; i<plan.length(); i++) {
			JSONArray steps = plan.getJSONObject(i).getJSONArray("steps");
			for (int j=0; j<steps.length(); j++) {
				actualSteps.add(steps.getJSONObject(j).getString("xxxx"));
			}
		}
	}catch (Exception e) {
        log.info("获取steps失败: " + e.getMessage());
	}
	return actualSteps;
}

// 获取csv文件中的预期步骤
public List<String> getExpectedStepsList(){
	return Arrays.asList(vars.get("expected_steps").split(";"));
}


// 比较预期步骤和实际步骤是否符合
public Boolean getComparisonResult(List<String> actualSteps,List<String> expectedSteps){
	//比较方法
	return actualSteps.equals(expectedSteps);
}


// 获取原始响应
String response = prev.getResponseDataAsString();

// read的响应数据转为json格式
JSONObject jsonResponse = parseResponse(response);

// 仅处理action:chat的响应
if (processAction(jsonResponse)) {
    
	// 解析实际步骤
    List<String> actualSteps = getStepsList(jsonResponse);
	
	// 获取预期步骤
    List<String> expectedSteps = getExpectedStepsList();
	
    // 对比数据
	Boolean temp = getComparisonResult(actualSteps,expectedSteps);
	
	// 实际与预期不符
	if(!temp){
		// 存储实际、预期数据
		vars.putObject("actualSteps", actualSteps);
		vars.putObject("expectedSteps", expectedSteps);
		// 标记需要断言
		vars.put("isAsser","true");
	}

    vars.put("isValidResponse", "true"); // 标记有效响应(停止读取流数据,进入下个案例循环)
}
JSR223断言(从正确响应中拆解出需要的数据):
java 复制代码
// 断言
if ("true".equals(vars.get("isAsser"))) {
	// 获取测试数据
	List<String> expectedSteps = vars.getObject("expectedSteps");
	List<String> actualSteps = vars.getObject("actualSteps");
	String msg = vars.get("message");
	String actualStepsString = actualSteps.toString();
	String expectedStepsString = expectedSteps.toString();
	
	AssertionResult.setFailure(true); // 标记断言失败
	AssertionResult.setFailureMessage("案例 " + msg + " 预期不符\n" + "\t实际步骤:"
								+ actualStepsString + "\n" + "\t预期步骤:" + expectedStepsString);
	
	// 添加调试信息
	log.info("当前案例: {},与预期不符合", vars.get("message"));
	log.info("实际步骤列表: {}", actualSteps.toString());
	log.info("预期步骤列表: {}", expectedSteps.toString());
}

2.7 进行安全处理,关闭websocket连接和确保循环终止(保险)

3.csv文件格式

4.结果查看和输出

相关推荐
AIZHINAN13 小时前
性能测试篇 :Jmeter监控服务器性能
运维·服务器·jmeter
程序员的世界你不懂1 天前
Jmeter 性能测试常用图表、服务器资源监控
jmeter
程序员的世界你不懂2 天前
Jmeter 命令行压测、HTML 报告、Jenkins 配置目录
运维·jmeter·jenkins
CesareCheung2 天前
jmeter读取上游接口并遍历数组数据并进行压测
jmeter
oh-pinpin3 天前
jmeter--While控制器--循环直到接口响应符合条件
测试工具·jmeter·压力测试
程序员的世界你不懂3 天前
Jmeter的元件使用介绍:(十)逻辑控制器详解
jmeter
程序员的世界你不懂4 天前
Jmeter的元件使用介绍:(七)后置处理器详解
jmeter
试着4 天前
零基础学习性能测试第六章:性能难点-Jmeter文件上传场景压测
学习·jmeter·零基础·性能测试
程序员的世界你不懂4 天前
Jmeter的元件使用介绍:(八)断言器详解
jmeter
是小恐龙啊5 天前
【测试报告】云枢馈赠系统(Java+Selenium+Jmeter自动化测试)
selenium·测试工具·jmeter