package com.jmeter.test; import com.sunyard.SydApiException; import com.sunyard.proto.Util; 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.nio.charset.StandardCharsets; public class Test4Jemter extends AbstractJavaSamplerClient { private String SM2dn ; private String RSAdn ; private String ip ; private String ip2 ; private String oData; private String sign; private byte[] orgData; private int type; private static ThreadLocal api; /** * 定义默认的参数,在jmeter中会自动显示在这里定义的默认参数 * @return Arguments对象 */ @Override public Arguments getDefaultParameters() { Arguments arguments = new Arguments(); arguments.addArgument("SM2dn", "C=CN,O=CFCA OCA1,OU=YCCA,OU=Individual-2,CN=YCCA@黄金交易所@Zhuangj@1"); arguments.addArgument("RSAdn", "C=cn,O=CFCA TEST CA,OU=NCS2,OU=Enterprises,CN=041@Z402451000010@ShanDong@00000001"); arguments.addArgument("orgData", "12345678"); arguments.addArgument("ip", "192.168.0.166"); // arguments.addArgument("ip2", "172.16.17.161"); arguments.addArgument("type", "1"); arguments.addArgument("sign", "12345678"); return arguments; } /** * 在执行测试之前执行,只执行一次,可以获取传递过来的参数,一般用来做初始化操作 * @param context 可以获取jmeter传递过来的参数 */ @Override public void setupTest(JavaSamplerContext context) { //对成员变量初始化 SM2dn = context.getParameter("SM2dn"); RSAdn = context.getParameter("RSAdn"); oData = context.getParameter("orgData"); ip = context.getParameter("ip"); // ip2 = context.getParameter("ip2"); type = context.getIntParameter("type"); sign = context.getParameter("sign"); System.setProperty("com.sunyard.dnsort", "false"); api = new ThreadLocal() { public SydApi4j initialValue() { SydApiBuilder builder = new SydApiBuilder().setIp(ip); final SydApi4j api = (SydApi4j) builder.build(); return api; } }; } /** * 真正的测试代码块,jmeter按照配置的逻辑执行该方法 * @param javaSamplerContext 上下文对象,可以获取jmeter传递的参数 * @return SampleResult对象用于封装结果 */ @Override public SampleResult runTest(JavaSamplerContext javaSamplerContext) { SampleResult sr = new SampleResult(); //设置标签 sr.setSampleLabel("testDemo"); //设置开始标志,否则无法统计tps等 sr.sampleStart(); try { orgData = oData.getBytes(); //SM2裸签 //执行业务逻辑 switch(type){ case 1: api.get().SYD_NakedSign(SM2dn, orgData, (byte[]) null); sr.setResponseCodeOK(); //sr.setResponseData(Util.encodeBase64(nakedSign1), StandardCharsets.UTF_8.displayName()); break; case 2: api.get().SYD_NakedVerify(SM2dn, Util.decodeBase64(sign), orgData, (byte[])null) ; sr.setResponseCodeOK(); //sr.setResponseData(String.valueOf(nakedVerify1), StandardCharsets.UTF_8.displayName()); break; case 3: //RSA裸签 api.get().SYD_NakedSign(1, RSAdn,orgData,(byte[])null); sr.setResponseCodeOK(); //sr.setResponseData(Util.encodeBase64(nakedSign2), StandardCharsets.UTF_8.displayName()); break; case 4: api.get().SYD_NakedVerify(1, RSAdn,Util.decodeBase64(sign),orgData ,(byte[])null); sr.setResponseCodeOK(); //sr.setResponseData(String.valueOf(nakedVerify2), StandardCharsets.UTF_8.displayName()); break; case 5: api.get().detachedSign(1, orgData, SM2dn); sr.setResponseCodeOK(); //sr.setResponseData(detSign1, StandardCharsets.UTF_8.displayName()); break; case 6: api.get().detachedVerify(1, orgData, sign); sr.setResponseCodeOK(); //sr.setResponseData(String.valueOf(detV1), StandardCharsets.UTF_8.displayName()); break; case 7: api.get().detachedSign(2,1, orgData, RSAdn); sr.setResponseCodeOK(); //sr.setResponseData(detSign2, StandardCharsets.UTF_8.displayName()); break; case 8: api.get().detachedVerify(2,2, orgData, sign); sr.setResponseCodeOK(); //sr.setResponseData(String.valueOf(detV2), StandardCharsets.UTF_8.displayName()); break; case 9: api.get().attachedSignHsm(orgData, SM2dn); sr.setResponseCodeOK(); //sr.setResponseData(attSign1, StandardCharsets.UTF_8.displayName()); break; case 10: api.get().attachedVerify( sign.getBytes()); sr.setResponseCodeOK(); // sr.setResponseData(String.valueOf(attV1), StandardCharsets.UTF_8.displayName()); break; case 11: api.get().attachedSignRSAHsm(2, orgData, RSAdn); sr.setResponseCodeOK(); // sr.setResponseData(attSign2, StandardCharsets.UTF_8.displayName()); break; case 12: api.get().attachedVerifyRSA(2, sign); sr.setResponseCodeOK(); // sr.setResponseData(String.valueOf(attV2), StandardCharsets.UTF_8.displayName()); break; case 13: api.get().generateDE(SM2dn.getBytes(), 3, 1, orgData); // byte[] cipherKey = (byte[]) genSM2.get(SydApi.RET_CIPHER_KEY); sr.setResponseCodeOK(); // sr.setResponseData(new String(cipherKey), StandardCharsets.UTF_8.displayName()); break; case 14: api.get().decryptDE(true, 1, SM2dn.getBytes(), sign);; // byte[] oData = (byte[]) denSM2.get("oData"); sr.setResponseCodeOK(); // sr.setResponseData(new String(oData), StandardCharsets.UTF_8.displayName()); break; case 15: api.get(). generateDE(RSAdn.getBytes(), 4, 1, orgData); // byte[] cipherKeyRSA = (byte[]) genRSA.get(SydApi.RET_CIPHER_KEY); sr.setResponseCodeOK(); //sr.setResponseData(new String(cipherKeyRSA), StandardCharsets.UTF_8.displayName()); break; case 16: api.get().decryptDERSA(true, 1, RSAdn.getBytes(), sign); // byte[] oDataRSA = (byte[]) denRSA.get("oData"); sr.setResponseCodeOK(); //sr.setResponseData(new String(oDataRSA), StandardCharsets.UTF_8.displayName()); break; default: sr.setResponseCodeOK(); sr.setResponseData("请选择测试组", StandardCharsets.UTF_8.displayName()); break; } sr.setSuccessful(true); }catch (SydApiException e){ e.printStackTrace(); sr.setResponseCode(String.valueOf(e.getRetCode())); sr.setResponseData(e.getMessage(), StandardCharsets.UTF_8.displayName()); sr.setSuccessful(false); }finally { sr.sampleEnd(); } return sr; } /** * 测试完成后执行,一般用于关闭资源 * @param context 上下文对象,可用于获取jmeter传递的参数 */ @Override public void teardownTest(JavaSamplerContext context) { System.runFinalization(); } }