diff --git a/backend/pom.xml b/backend/pom.xml index a15f39a7a1..561fe81516 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -152,24 +152,12 @@ jmeter-plugins-casutg 2.9 - - - kg.apc - jmeter-plugins-cmd - 2.2 - - - kg.apc - jmeter-plugins-synthesis - 2.2 - - - - kg.apc - jmeter-plugins-standard - 1.4.0 - + + com.opencsv + opencsv + 5.1 + org.apache.httpcomponents diff --git a/backend/src/test/java/io/metersphere/GenerateGraphTest.java b/backend/src/test/java/io/metersphere/GenerateGraphTest.java index a3a544e9ac..07d47476b0 100644 --- a/backend/src/test/java/io/metersphere/GenerateGraphTest.java +++ b/backend/src/test/java/io/metersphere/GenerateGraphTest.java @@ -1,41 +1,45 @@ package io.metersphere; -import io.metersphere.commons.constants.JmeterReportType; -import kg.apc.jmeter.PluginsCMDWorker; -import org.apache.jmeter.util.JMeterUtils; +import com.opencsv.bean.CsvToBean; +import com.opencsv.bean.CsvToBeanBuilder; +import com.opencsv.bean.HeaderColumnNameMappingStrategy; +import com.opencsv.bean.MappingStrategy; import org.junit.Test; +import java.io.File; +import java.io.Reader; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.List; + public class GenerateGraphTest { - /* - AggregateReport = JMeter's native Aggregate Report, can be saved only as CSV - SynthesisReport = mix between JMeter's native Summary Report and Aggregate Report, can be saved only as CSV - ThreadsStateOverTime = Active Threads Over Time - BytesThroughputOverTime - HitsPerSecond - LatenciesOverTime - PerfMon = PerfMon Metrics Collector - DbMon = DbMon Metrics Collector, DataBase, get performance counters via sql - JMXMon = JMXMon Metrics Collector, Java Management Extensions counters - ResponseCodesPerSecond - ResponseTimesDistribution - ResponseTimesOverTime - ResponseTimesPercentiles - ThroughputVsThreads - TimesVsThreads = Response Times VS Threads - TransactionsPerSecond - PageDataExtractorOverTime - MergeResults = MergeResults Command Line Merge Tool to simplify the comparison of two or more load tests, need properties file (like merge-results.properties) - */ + @Test public void test1() { - JMeterUtils.setJMeterHome("/opt/fit2cloud/apache-jmeter-5.2.1"); - JMeterUtils.loadJMeterProperties("/opt/fit2cloud/apache-jmeter-5.2.1/bin/jmeter.properties"); - PluginsCMDWorker worker = new PluginsCMDWorker(); - worker.setPluginType(JmeterReportType.AggregateReport.name()); - worker.addExportMode(2); - worker.setOutputCSVFile("/tmp/test0320.csv"); - worker.setInputFile("/Users/liuruibin/Desktop/0316.jtl"); - worker.doJob(); + File csvFile = new File("/Users/liuruibin/Desktop/0316.jtl"); + HeaderColumnNameMappingStrategy ms = new HeaderColumnNameMappingStrategy<>(); + ms.setType(Metric.class); + List metrics = beanBuilderExample(csvFile.toPath(), ms); + metrics.forEach(c -> { + System.out.println(c.getTimestamp()); + }); + } + + public static List beanBuilderExample(Path path, MappingStrategy ms) { + try (Reader reader = Files.newBufferedReader(path)) { + + CsvToBean cb = new CsvToBeanBuilder(reader) + .withType(Metric.class) + .withSkipLines(0) + .withMappingStrategy(ms) + .withIgnoreLeadingWhiteSpace(true) + .build(); + + return cb.parse(); + } catch (Exception ex) { + ex.printStackTrace(); + } + return null; } } diff --git a/backend/src/test/java/io/metersphere/Metric.java b/backend/src/test/java/io/metersphere/Metric.java new file mode 100644 index 0000000000..e1c6bb6370 --- /dev/null +++ b/backend/src/test/java/io/metersphere/Metric.java @@ -0,0 +1,180 @@ +package io.metersphere; + +import com.opencsv.bean.CsvBindByName; + +public class Metric { + // timestamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect + + @CsvBindByName(column = "timestamp") + private String timestamp; + @CsvBindByName(column = "elapsed") + private String elapsed; + @CsvBindByName(column = "label") + private String label; + @CsvBindByName(column = "responseCode") + private String responseCode; + @CsvBindByName(column = "responseMessage") + private String responseMessage; + @CsvBindByName(column = "threadName") + private String threadName; + @CsvBindByName(column = "dataType") + private String dataType; + @CsvBindByName(column = "success") + private String success; + @CsvBindByName(column = "failureMessage") + private String failureMessage; + @CsvBindByName(column = "bytes") + private String bytes; + @CsvBindByName(column = "sentBytes") + private String sentBytes; + @CsvBindByName(column = "grpThreads") + private String grpThreads; + @CsvBindByName(column = "allThreads") + private String allThreads; + @CsvBindByName(column = "URL") + private String url; + @CsvBindByName(column = "Latency") + private String latency; + @CsvBindByName(column = "IdleTime") + private String idleTime; + @CsvBindByName(column = "Connect") + private String connect; + + + public String getTimestamp() { + return timestamp; + } + + public void setTimestamp(String timestamp) { + this.timestamp = timestamp; + } + + public String getElapsed() { + return elapsed; + } + + public void setElapsed(String elapsed) { + this.elapsed = elapsed; + } + + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + public String getResponseCode() { + return responseCode; + } + + public void setResponseCode(String responseCode) { + this.responseCode = responseCode; + } + + public String getResponseMessage() { + return responseMessage; + } + + public void setResponseMessage(String responseMessage) { + this.responseMessage = responseMessage; + } + + public String getThreadName() { + return threadName; + } + + public void setThreadName(String threadName) { + this.threadName = threadName; + } + + public String getDataType() { + return dataType; + } + + public void setDataType(String dataType) { + this.dataType = dataType; + } + + public String getSuccess() { + return success; + } + + public void setSuccess(String success) { + this.success = success; + } + + public String getFailureMessage() { + return failureMessage; + } + + public void setFailureMessage(String failureMessage) { + this.failureMessage = failureMessage; + } + + public String getBytes() { + return bytes; + } + + public void setBytes(String bytes) { + this.bytes = bytes; + } + + public String getSentBytes() { + return sentBytes; + } + + public void setSentBytes(String sentBytes) { + this.sentBytes = sentBytes; + } + + public String getGrpThreads() { + return grpThreads; + } + + public void setGrpThreads(String grpThreads) { + this.grpThreads = grpThreads; + } + + public String getAllThreads() { + return allThreads; + } + + public void setAllThreads(String allThreads) { + this.allThreads = allThreads; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getLatency() { + return latency; + } + + public void setLatency(String latency) { + this.latency = latency; + } + + public String getIdleTime() { + return idleTime; + } + + public void setIdleTime(String idleTime) { + this.idleTime = idleTime; + } + + public String getConnect() { + return connect; + } + + public void setConnect(String connect) { + this.connect = connect; + } +}