1 使用Jrebel热更新插件以及XRebel性能分析插件 以达到快速修复的目的
2 使用Junit单元测试 可以模拟整个或局部功能的测试 或者用该功能生成测试样本数据(测试数据可以通过DB编写脚本或者函数生成)
3 接口测试使用终端Curl工具/IDE自带/PostMan测试
4 压力测试使用Jemter进行测试
5 使用medis/charles和消息队列管理工具进行数据问题的捕捉
6 使用IDEA断点和条件断点来进行步骤执行
使用JMeter测试示例:
编写测试脚本并导出到为runable jar 到 JMeter扫描的可执行目录下
public class WebServiceextends AbstractJavaSamplerClient {
public static final LoggerLOGGER = LoggerFactory.getLogger(AbstractJavaSamplerClient.class);
private SampleResultresult;
@Override
public void setupTest(JavaSamplerContext context) {
LOGGER.info(getClass().getName() +" setupTest");
result =new SampleResult();
}
@Override
public ArgumentsgetDefaultParameters() {
Arguments arguments =new Arguments();
arguments.addArgument("url", "0");
arguments.addArgument("storeId", "0");
arguments.addArgument("amount", "0");
return arguments;
}
@Override
public SampleResultrunTest(JavaSamplerContext context) {
String url = context.getParameter("url");
String storeId = context.getParameter("storeId");
String amount = context.getParameter("amount");
String resultData =null;
result.setSampleLabel("开始运行");
//记录测试时间及结果
result.sampleStart();
List params =new LinkedList();
BasicNameValuePair param1 =new BasicNameValuePair("storeId", storeId);
BasicNameValuePair param2 =new BasicNameValuePair("amount", amount);
params.add(param1);
params.add(param2);
URIBuilder uriBuilder = getUriBuilder(url, params);
//执行请求
resultData = executeRequest(uriBuilder, resultData);
result.setSuccessful(true);
result.setResponseCode("200");
result.setResponseCodeOK();
// result.setRequestHeaders("userId");
result.setResponseMessage("success");
result.setContentType("application/json");
//将数据打印到查看结果树当中
result.setResponseData(resultData, null);
result.setDataType(SampleResult.TEXT);
return result;
}
/**
* 模拟接口请求
* @param uriBuilder
* @param resultData
* @return
*/
private StringexecuteRequest(URIBuilder uriBuilder, String resultData) {
CloseableHttpClient httpClient =null;
// HttpPost httpPost = null;
HttpGet httpGet =null;
try {
httpClient = HttpClients.createDefault();
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(20000).setConnectTimeout(20000).build();
// 根据带参数的URI对象构建GET请求对象
httpGet =new HttpGet(uriBuilder.build());
httpGet.setConfig(requestConfig);
// httpPost = new HttpPost(url);
// httpPost.setConfig(requestConfig);
// List ps = new ArrayList();
// Map params = new HashMap();
// for (String pKey : params.keySet()) {
// ps.add(new BasicNameValuePair(pKey, params.get(pKey)));
// }
// httpPost.setEntity(new UrlEncodedFormEntity(ps));
CloseableHttpResponse response = httpClient.execute(httpGet);
HttpEntity httpEntity = response.getEntity();
resultData = EntityUtils.toString(httpEntity, "utf-8");
}catch (ClientProtocolException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}catch (URISyntaxException e) {
e.printStackTrace();
}finally {
try {
if (httpGet !=null) {
httpGet.releaseConnection();
}
if (httpClient !=null) {
httpClient.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
return resultData;
}
private URIBuildergetUriBuilder(String url, List params) {
URIBuilder uriBuilder =new URIBuilder(URI.create(url));
/*uriBuilder.addParameter("storeId", "11011");
uriBuilder.addParameter("amount", "123456");*/
uriBuilder.setParameters(params);
return uriBuilder;
}
@Override
public void teardownTest(JavaSamplerContext context) {
LOGGER.info("{} teardownTest", getClass().getName());
}
网友评论