jmeter测试
This commit is contained in:
@@ -2,19 +2,18 @@ package com.jmeter.test;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.sunyard.SydApiException;
|
||||
import com.sunyard.entity.ImportResult;
|
||||
import com.sunyard.proto.Util;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
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;
|
||||
import racal.sunyard.main.SydApi4j;
|
||||
import racal.sunyard.main.SydApiBuilder;
|
||||
|
||||
import java.io.StringWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
|
||||
public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
@@ -37,6 +36,17 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
|
||||
private int dataLength;
|
||||
|
||||
private String cert;
|
||||
private String nodes;
|
||||
private String snmpIP;
|
||||
private String snmpPort;
|
||||
private String snmpOID;
|
||||
private String snmpCommunity;
|
||||
|
||||
private int timeout;
|
||||
|
||||
private int logSwitch;
|
||||
|
||||
|
||||
/**
|
||||
* 定义默认的参数,在jmeter中会自动显示在这里定义的默认参数
|
||||
@@ -50,12 +60,21 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
arguments.addArgument("orgData", "12345678");
|
||||
arguments.addArgument("ip", "172.1.41.139");
|
||||
arguments.addArgument("ip2", "172.1.41.96");
|
||||
arguments.addArgument("port", "8891");
|
||||
arguments.addArgument("port", "8889");
|
||||
arguments.addArgument("timeout", "2000");
|
||||
arguments.addArgument("logSwitch", "1");
|
||||
// arguments.addArgument("ip2", "172.16.17.161");
|
||||
arguments.addArgument("dataLength", "1024");
|
||||
arguments.addArgument("type", "1");
|
||||
arguments.addArgument("sign", "12345678");
|
||||
arguments.addArgument("detachedSign", "12345678");
|
||||
arguments.addArgument("cert", "");
|
||||
arguments.addArgument("nodes", "172.1.41.139:8889;172.1.41.96:8889");
|
||||
arguments.addArgument("snmpIP", "172.1.41.139");
|
||||
arguments.addArgument("snmpPort", "162");
|
||||
arguments.addArgument("snmpOID", "1.3.6.1.4.1.9999");
|
||||
arguments.addArgument("snmpCommunity", "public");
|
||||
|
||||
return arguments;
|
||||
}
|
||||
|
||||
@@ -71,12 +90,21 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
oData = context.getParameter("orgData");
|
||||
ip = context.getParameter("ip");
|
||||
ip2 = context.getParameter("ip2");
|
||||
port = context.getIntParameter("8891");
|
||||
port = context.getIntParameter("port");
|
||||
timeout = context.getIntParameter("timeout");
|
||||
logSwitch = context.getIntParameter("logSwitch");
|
||||
// ip2 = context.getParameter("ip2");
|
||||
dataLength = context.getIntParameter("dataLength");
|
||||
type = context.getIntParameter("type");
|
||||
sign = context.getParameter("sign");
|
||||
detachedSign = context.getParameter("detachedSign");
|
||||
cert = context.getParameter("cert");
|
||||
nodes = context.getParameter("nodes");
|
||||
snmpIP = context.getParameter("snmpIP");
|
||||
snmpPort = context.getParameter("snmpPort");
|
||||
snmpOID = context.getParameter("snmpOID");
|
||||
snmpCommunity = context.getParameter("snmpCommunity");
|
||||
System.getProperty("com.sunyard.sydapi4j.debug", "false");
|
||||
System.setProperty("com.sunyard.dnsort", "false");
|
||||
api = new ThreadLocal<SydApi4j>() {
|
||||
@Override
|
||||
@@ -84,7 +112,7 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
//
|
||||
// SydApiBuilder builder = new SydApiBuilder().setIp(ip);
|
||||
// final SydApi4j api = (SydApi4j) builder.build();
|
||||
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, port, 2000);
|
||||
SydApi4j.SYD_Set_Parameter_HA(ip, ip2, port, timeout);
|
||||
final SydApi4j api1 = (SydApi4j) new SydApi4j();
|
||||
return api1;
|
||||
}
|
||||
@@ -105,13 +133,17 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
//设置开始标志,否则无法统计tps等
|
||||
sr.sampleStart();
|
||||
try {
|
||||
// orgData = oData.getBytes(); //SM2裸签
|
||||
orgData = new byte[dataLength];
|
||||
orgData = oData.getBytes(); //SM2裸签
|
||||
// orgData = new byte[dataLength];
|
||||
//执行业务逻辑
|
||||
switch(type){
|
||||
case 1:
|
||||
// api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null);
|
||||
api.get().SYD_NakedSign(orgData,SM2dn);
|
||||
byte[] nakedSign = api.get().SYD_NakedSign(orgData,SM2dn);
|
||||
if (logSwitch == 1) {
|
||||
System.out.println("p1签名(hex):"+ Util.bytes2HexString(nakedSign));
|
||||
}
|
||||
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
@@ -119,7 +151,10 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
|
||||
case 2:
|
||||
// api.get().SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ;
|
||||
api.get().SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), SM2dn);
|
||||
boolean flag = api.get().SYD_NakedVerify(orgData,Util.hexString2Bytes(sign), SM2dn);
|
||||
if (logSwitch == 1) {
|
||||
System.out.println("p1验签:"+ flag);
|
||||
}
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
@@ -140,7 +175,10 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
case 5:
|
||||
// api.get().detachedSign(1, orgData, SM2dn);
|
||||
//p7 detached签名
|
||||
api.get().detachedSign(orgData, SM2dn);
|
||||
String detachedSign1 = api.get().detachedSign(orgData, SM2dn);
|
||||
if (logSwitch == 1) {
|
||||
System.out.println("p7 detach签名:"+ detachedSign1);
|
||||
}
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
@@ -148,7 +186,10 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
case 6:
|
||||
// api.get().detachedVerify(1, orgData, sign);
|
||||
//p7 detached验签
|
||||
api.get().detachedVerify(orgData, detachedSign);
|
||||
boolean ver = api.get().detachedVerify(orgData, detachedSign);
|
||||
if (logSwitch == 1) {
|
||||
System.out.println("p7 detach验签:"+ ver);
|
||||
}
|
||||
sr.setResponseCodeOK();
|
||||
//sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName());
|
||||
break;
|
||||
@@ -219,6 +260,8 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
break;
|
||||
|
||||
case 17:
|
||||
String cert1 = api.get().getCertBySign(detachedSign);
|
||||
System.out.println("根据p7签名值获取的证书为:" + cert1);
|
||||
sr.setResponseCodeOK();
|
||||
break;
|
||||
case 18:
|
||||
@@ -229,6 +272,9 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
testImportCert();
|
||||
sr.setResponseCodeOK();
|
||||
break;
|
||||
case 20:
|
||||
boolean delFlag = api.get().deleteCert(SM2dn);
|
||||
System.out.println("删除证书成功:"+ delFlag);
|
||||
default:
|
||||
sr.setResponseCodeOK();
|
||||
sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName());
|
||||
@@ -263,33 +309,35 @@ public class Test4Jemter extends AbstractJavaSamplerClient {
|
||||
// testImportCert();
|
||||
}
|
||||
|
||||
private void testImportCert() {
|
||||
String cert = "-----BEGIN CERTIFICATE-----\n" +
|
||||
"MIICMDCCAdagAwIBAgIJAOWoGwJCnjlLMAoGCCqBHM9VAYN1MGcxCzAJBgNVBAYT\n" +
|
||||
"AkNOMRAwDgYDVQQIDAdCZWlqaW5nMRAwDgYDVQQHDAdIYWlEaWFuMRMwEQYDVQQK\n" +
|
||||
"DApHTUNlcnQub3JnMR8wHQYDVQQDDBZHTUNlcnQgR00gUm9vdCBDQSAtIDAxMB4X\n" +
|
||||
"DTI1MDUxMzAyMzUxM1oXDTI2MDUxMzAyMzUxM1owRTELMAkGA1UEBgwCQ04xCzAJ\n" +
|
||||
"BgNVBAgMAnp6MQswCQYDVQQHDAJ6ejEMMAoGA1UECgwDenp6MQ4wDAYDVQQDDAV6\n" +
|
||||
"enp6ejBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABK5fyRSACWPIBBr/3U+qvjvp\n" +
|
||||
"niropv2PrA3ZLU1bG8vQpwAEMA0kwyqGgXURBPbvWdAhN7s9wfvHbJyMd9CMZGqj\n" +
|
||||
"gYwwgYkwDAYDVR0TAQH/BAIwADALBgNVHQ8EBAMCB4AwLAYJYIZIAYb4QgENBB8W\n" +
|
||||
"HUdNQ2VydC5vcmcgU2lnbmVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSQB7UUqEuG\n" +
|
||||
"kl4mrx3MAhKTptfbYjAfBgNVHSMEGDAWgBR/Wl47AIRZKg+YvqEObzmVQxBNBzAK\n" +
|
||||
"BggqgRzPVQGDdQNIADBFAiEA4kgTdn/iA/XYfjTEeOcELwBXd0tTFghkpfP8DhBF\n" +
|
||||
"KFQCIAXZTL6VPtW67tM/DF4ZgFt5S/YIiFombKa2bWOfL81u\n" +
|
||||
"-----END CERTIFICATE-----";
|
||||
List<String> masterNodes = new ArrayList<>();
|
||||
masterNodes.add("172.1.41.139:8889");
|
||||
int timeout = 1000;
|
||||
private void testImportCert(){
|
||||
List<String> masterNodes = Arrays.asList(StringUtils.split(nodes, ";"));
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("snmp.target.ip", "172.1.41.191");
|
||||
map.put("snmp.target.port", "162");
|
||||
map.put("enterprise.oid", "1.3.6.1.4.1.9999");
|
||||
map.put("snmp.community", "public");
|
||||
map.put("snmp.target.ip", snmpIP);
|
||||
map.put("snmp.target.port", snmpPort);
|
||||
map.put("enterprise.oid", snmpOID);
|
||||
map.put("snmp.community", snmpCommunity);
|
||||
map.put("snmp.version", "1");
|
||||
String snmpConfig = new Gson().toJson(map);
|
||||
Gson gson = new Gson();
|
||||
String snmpConfig = gson.toJson(map);
|
||||
SydApi4j sydApi4j = new SydApi4j();
|
||||
sydApi4j.importCertToServers(masterNodes, timeout, cert, "12345678", snmpConfig);
|
||||
String cert21 = convertToPem(Base64.getDecoder().decode(cert));
|
||||
ImportResult importResult = sydApi4j.importCertToServers(masterNodes, timeout, cert21, "12345678", snmpConfig);
|
||||
System.out.println("证书导入结果:" + gson.toJson(importResult));
|
||||
}
|
||||
|
||||
private String convertToPem(byte[] derCert){
|
||||
// 使用Base64编码器(兼容RFC 4648,每行64字符)
|
||||
StringWriter writer = new StringWriter();
|
||||
writer.write("-----BEGIN CERTIFICATE-----\n");
|
||||
// 将DER转换为Base64并分割为每行64字符
|
||||
String base64Cert = Base64.getMimeEncoder(64, "\n".getBytes()).encodeToString(derCert);
|
||||
writer.write(base64Cert);
|
||||
// 如果Base64编码的字符串没有以换行结束,则添加换行
|
||||
if (!base64Cert.endsWith("\n")) {
|
||||
writer.write("\n");
|
||||
}
|
||||
writer.write("-----END CERTIFICATE-----\n");
|
||||
return writer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -59,6 +59,7 @@ import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
import java.util.function.Supplier;
|
||||
@@ -85,7 +86,10 @@ public class SydApi4j implements SydApi {
|
||||
private static int ha_port;
|
||||
private static int ha_timeout;
|
||||
|
||||
private final AtomicBoolean usingBackup = new AtomicBoolean(false);
|
||||
private static final AtomicBoolean usingBackup = new AtomicBoolean(false);
|
||||
|
||||
//连接数计数器
|
||||
private static final AtomicInteger connectionCounter = new AtomicInteger(0);
|
||||
|
||||
private final Object reqLock = new Object();
|
||||
|
||||
@@ -879,6 +883,7 @@ public class SydApi4j implements SydApi {
|
||||
if ((be[0] ^ be[1]) != 0) {
|
||||
SydApiException e = new SydApiException(error.getInfo(), error.autoInt());
|
||||
println("验签失败=" + e.toString());
|
||||
log.info("验签失败:{}", e.toString());
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
@@ -1391,6 +1396,7 @@ public class SydApi4j implements SydApi {
|
||||
stringBuilder.append("行号:").append(bkCode).append("\n").append("DN:").append(dn)
|
||||
.append("\n序列号:").append(serialNumber).append("\n证书:").append(cert);
|
||||
log.warn("证书导入失败!\n{}", stringBuilder);
|
||||
System.out.println("证书导入失败!" + stringBuilder);
|
||||
//异步发送snmp trap消息
|
||||
String result = "[" + failures.stream()
|
||||
.map(Object::toString)
|
||||
@@ -2372,6 +2378,7 @@ public class SydApi4j implements SydApi {
|
||||
if (!usingBackup.get()) {
|
||||
if (tryConnect(ha_ip1)) {
|
||||
log.info("连接到主节点,ip:{}", ha_ip1);
|
||||
System.out.println("连接到主节点,ip:" + ha_ip1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2379,7 +2386,10 @@ public class SydApi4j implements SydApi {
|
||||
// 连接到备节点
|
||||
if (tryConnect(ha_ip2)) {
|
||||
log.info("连接到备节点,ip:{}", ha_ip2);
|
||||
usingBackup.set(true);
|
||||
System.out.println("连接到备节点,ip:" + ha_ip2);
|
||||
// usingBackup.set(true);
|
||||
usingBackup.compareAndSet(false, true);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2417,8 +2427,7 @@ public class SydApi4j implements SydApi {
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start();
|
||||
log.info("socket收发信息异常,准备重试:{}/当前重试:{}次", e.getMessage(),retryCount + 1);
|
||||
// System.out.printf("线程[%s]网络故障,尝试切换节点 (重试: %d/%d)%n",
|
||||
// Thread.currentThread().getName(), retryCount + 1, maxRetries);
|
||||
System.out.println("socket收发信息异常:" + e.getMessage() + ",准备重试, 当前重试:" + ++retryCount + "次");
|
||||
|
||||
boolean currentState = usingBackup.get();
|
||||
boolean newState = !currentState;
|
||||
@@ -2429,7 +2438,7 @@ public class SydApi4j implements SydApi {
|
||||
try {
|
||||
safeClose();
|
||||
connect(targetIp, ha_port, ha_timeout);
|
||||
// System.out.println("故障节点切换成功,当前使用:" + targetIp);
|
||||
System.out.println("故障节点切换成功,当前使用:" + targetIp);
|
||||
log.info("故障节点切换成功,当前使用ip:{}", targetIp);
|
||||
} catch (Exception ex) {
|
||||
usingBackup.compareAndSet(newState, currentState);
|
||||
@@ -2439,6 +2448,7 @@ public class SydApi4j implements SydApi {
|
||||
}
|
||||
stopWatch.stop();
|
||||
log.info("节点切换时间:{}", stopWatch.getTotalTimeMillis());
|
||||
System.out.println("节点切换时间:" + stopWatch.getTotalTimeMillis() + "ms");
|
||||
}
|
||||
|
||||
private void safeClose() {
|
||||
@@ -2490,7 +2500,7 @@ public class SydApi4j implements SydApi {
|
||||
// 发送失败
|
||||
if (null != ha_ip2) {
|
||||
// HA 模式直接失败
|
||||
e.printStackTrace();
|
||||
// e.printStackTrace();
|
||||
throw new SydApiException("Socket write error", -2);
|
||||
} else {
|
||||
// 非 HA 模式检查重试
|
||||
@@ -3957,10 +3967,12 @@ public class SydApi4j implements SydApi {
|
||||
// 渲染发送 耗时长
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
// synchronized (this) {
|
||||
// // 响应解析
|
||||
// bb = syncRead(syncSend(bb));
|
||||
// }
|
||||
bb = sendAndGetResponse(bb);
|
||||
|
||||
//ProtocolParser parser = pset.getProtocolResParse();
|
||||
Packet p = proto.parse(bb);
|
||||
|
||||
@@ -4693,10 +4705,12 @@ public class SydApi4j implements SydApi {
|
||||
// 渲染发送
|
||||
ByteBuffer bb = proto.rend(packet);
|
||||
|
||||
synchronized (this) {
|
||||
// 响应解析
|
||||
bb = syncRead(syncSend(bb));
|
||||
}
|
||||
// synchronized (this) {
|
||||
// // 响应解析
|
||||
// bb = syncRead(syncSend(bb));
|
||||
// }
|
||||
|
||||
bb = sendAndGetResponse(bb);
|
||||
|
||||
//ProtocolParser parser = pset.getProtocolResParse();
|
||||
Packet p = proto.parse(bb);
|
||||
|
||||
Reference in New Issue
Block a user