Skip to content

Commit 6862dec

Browse files
Move recorder logic to it's own module to ease reusage by community projects and make cli module simpler and more cohesive
1 parent 7bf1c30 commit 6862dec

File tree

31 files changed

+450
-238
lines changed

31 files changed

+450
-238
lines changed

jmeter-java-dsl-cli/pom.xml

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,6 @@
1717
<properties>
1818
<picocli.version>4.7.1</picocli.version>
1919
<log4j.version>2.19.0</log4j.version>
20-
<!-- same version as JMeter dependency -->
21-
<slf4j.version>1.7.36</slf4j.version>
22-
<selenium.version>4.8.0</selenium.version>
2320
</properties>
2421

2522
<dependencies>
@@ -56,48 +53,45 @@
5653
<version>${project.version}</version>
5754
</dependency>
5855
<dependency>
59-
<groupId>info.picocli</groupId>
60-
<artifactId>picocli</artifactId>
61-
<version>${picocli.version}</version>
62-
</dependency>
63-
<dependency>
64-
<groupId>com.blazemeter</groupId>
65-
<artifactId>jmeter-bzm-correlation-recorder</artifactId>
66-
<version>1.2.3</version>
67-
</dependency>
68-
<dependency>
69-
<groupId>org.seleniumhq.selenium</groupId>
70-
<artifactId>selenium-chrome-driver</artifactId>
71-
<version>${selenium.version}</version>
56+
<groupId>us.abstracta.jmeter</groupId>
57+
<artifactId>jmeter-java-dsl-recorder</artifactId>
58+
<version>${project.version}</version>
7259
</dependency>
7360
<dependency>
7461
<groupId>org.slf4j</groupId>
75-
<artifactId>slf4j-api</artifactId>
62+
<artifactId>jul-to-slf4j</artifactId>
7663
<version>${slf4j.version}</version>
7764
</dependency>
7865
<dependency>
79-
<groupId>org.slf4j</groupId>
80-
<artifactId>jul-to-slf4j</artifactId>
81-
<version>${slf4j.version}</version>
66+
<groupId>info.picocli</groupId>
67+
<artifactId>picocli</artifactId>
68+
<version>${picocli.version}</version>
8269
</dependency>
8370
<dependency>
8471
<groupId>com.fasterxml.jackson.dataformat</groupId>
8572
<artifactId>jackson-dataformat-yaml</artifactId>
8673
<version>${jackson.version}</version>
8774
</dependency>
8875
<dependency>
89-
<groupId>org.seleniumhq.selenium</groupId>
90-
<artifactId>selenium-support</artifactId>
91-
<version>${selenium.version}</version>
76+
<groupId>us.abstracta.jmeter</groupId>
77+
<artifactId>jmeter-java-dsl</artifactId>
78+
<type>test-jar</type>
79+
<version>${project.version}</version>
9280
<scope>test</scope>
9381
</dependency>
9482
<dependency>
9583
<groupId>us.abstracta.jmeter</groupId>
96-
<artifactId>jmeter-java-dsl</artifactId>
84+
<artifactId>jmeter-java-dsl-recorder</artifactId>
9785
<type>test-jar</type>
9886
<version>${project.version}</version>
9987
<scope>test</scope>
10088
</dependency>
89+
<!-- This should be in test scope, but defined in compile scope to avoid shade ignoring it -->
90+
<dependency>
91+
<groupId>org.seleniumhq.selenium</groupId>
92+
<artifactId>selenium-chrome-driver</artifactId>
93+
<version>${selenium.version}</version>
94+
</dependency>
10195
</dependencies>
10296

10397
<build>

jmeter-java-dsl-cli/src/main/java/us/abstracta/jmeter/javadsl/cli/RecorderCommand.java

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@
2222
import picocli.CommandLine.Option;
2323
import picocli.CommandLine.Parameters;
2424
import picocli.CommandLine.TypeConversionException;
25-
import us.abstracta.jmeter.javadsl.cli.recorder.CorrelationRuleBuilder;
26-
import us.abstracta.jmeter.javadsl.cli.recorder.JmeterDslRecorder;
27-
import us.abstracta.jmeter.javadsl.cli.recorder.RecordingBrowser;
25+
import us.abstracta.jmeter.javadsl.recorder.JmeterDslRecorder;
26+
import us.abstracta.jmeter.javadsl.recorder.RecordingBrowser;
27+
import us.abstracta.jmeter.javadsl.recorder.correlations.CorrelationRuleBuilder;
2828

2929
@Command(name = "recorder", header = "Record a JMeter DSL test plan using a browser",
3030
description = {
@@ -184,14 +184,25 @@ private static class HeadersFiltering {
184184
public Integer call() throws Exception {
185185
loadConfigFileDefaults();
186186
setupLogging();
187-
try (JmeterDslRecorder recorder = buildRecorder();
188-
RecordingBrowser browser = new RecordingBrowser(url, recorder.getProxy(),
189-
browserArguments != null ? browserArguments : Collections.emptyList())) {
190-
browser.awaitClosed();
187+
JmeterDslRecorder recorder = buildRecorder();
188+
recorder.start();
189+
try {
190+
try (RecordingBrowser browser = new RecordingBrowser(url, recorder.getProxy(),
191+
browserArguments != null ? browserArguments : Collections.emptyList())) {
192+
browser.awaitClosed();
193+
}
194+
} finally {
195+
recorder.stop();
196+
System.out.println(recorder.getRecording());
191197
}
192198
return 0;
193199
}
194200

201+
private void loadConfigFileDefaults() throws IOException {
202+
new JmdslConfig(this)
203+
.updateWithDefaultsFrom(JmdslConfig.fromConfigFile(configFile));
204+
}
205+
195206
private void setupLogging() {
196207
if (quiet) {
197208
Configurator.setAllLevels(LogManager.ROOT_LOGGER_NAME, Level.OFF);
@@ -212,26 +223,21 @@ private void setupLogging() {
212223
ctx.updateLoggers();
213224
}
214225

215-
private void loadConfigFileDefaults() throws IOException {
216-
new JmdslConfig(this)
217-
.updateWithDefaultsFrom(JmdslConfig.fromConfigFile(configFile));
218-
}
219-
220226
private JmeterDslRecorder buildRecorder() throws IOException {
221227
JmeterDslRecorder ret = new JmeterDslRecorder()
222228
.logsDirectory(workdir);
223229
if (requestsFiltering.ignoreDefaultUrlFilter) {
224230
ret.clearUrlFilter();
225231
}
226232
ret.urlIncludes(requestsFiltering.urlIncludes);
227-
ret.urlsExcludes(requestsFiltering.urlExcludes);
233+
ret.urlExcludes(requestsFiltering.urlExcludes);
228234
if (headersFiltering.ignoreDefaultHeaderFilter) {
229235
ret.clearHeaderFilter();
230236
}
231237
ret.logFilteredRequests(requestsFiltering.logFilteredRequests);
232238
ret.headerExcludes(headersFiltering.headerExcludes);
233239
correlations.forEach(ret::correlationRule);
234-
return ret.start();
240+
return ret;
235241
}
236242

237243
public static class CorrelationRuleBuilderConverter implements

jmeter-java-dsl-cli/src/test/java/us/abstracta/jmeter/javadsl/jmx2dsl/CliCommandsIT.java

Lines changed: 0 additions & 147 deletions
This file was deleted.
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
package us.abstracta.jmeter.javadsl.jmx2dsl;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
import static us.abstracta.jmeter.javadsl.JmeterDsl.testResource;
5+
6+
import java.io.BufferedReader;
7+
import java.io.IOException;
8+
import java.io.InputStream;
9+
import java.io.InputStreamReader;
10+
import java.util.Arrays;
11+
import java.util.Collections;
12+
import org.apache.http.entity.ContentType;
13+
import org.junit.jupiter.api.Test;
14+
import us.abstracta.jmeter.javadsl.codegeneration.TestClassTemplate;
15+
import us.abstracta.jmeter.javadsl.util.TestResource;
16+
17+
public class Jmx2DslIT {
18+
19+
@Test
20+
public void shouldGetConvertedFileWhenConvert() throws Exception {
21+
Process p = startCommand("jmx2dsl", new TestResource("test-plan.jmx").filePath());
22+
assertThat(getProcessOutput(p))
23+
.isEqualTo(buildConvertedTestClass());
24+
}
25+
26+
private Process startCommand(String command, String... args) throws IOException {
27+
ProcessBuilder ret = new ProcessBuilder()
28+
.command("java", "-jar", "target/jmdsl.jar", command);
29+
ret.command().addAll(Arrays.asList(args));
30+
return ret.start();
31+
}
32+
33+
private String getProcessOutput(Process p) throws IOException, InterruptedException {
34+
String ret = inputStream2String(p.getInputStream()) + inputStream2String(p.getErrorStream());
35+
p.waitFor();
36+
return ret;
37+
}
38+
39+
private String inputStream2String(InputStream inputStream) throws IOException {
40+
try (BufferedReader reader =
41+
new BufferedReader(new InputStreamReader(inputStream))) {
42+
StringBuilder builder = new StringBuilder();
43+
String line;
44+
while ((line = reader.readLine()) != null) {
45+
builder.append(line);
46+
builder.append(System.getProperty("line.separator"));
47+
}
48+
return builder.toString();
49+
}
50+
}
51+
52+
private static String buildConvertedTestClass()
53+
throws IOException {
54+
return new TestClassTemplate()
55+
.dependencies(Collections.singleton("us.abstracta.jmeter:jmeter-java-dsl:"
56+
+ testResource("version.txt").rawContents()))
57+
.imports(Collections.singleton(ContentType.class.getName()))
58+
.testPlan(new TestResource("TestPlan.java").rawContents())
59+
.solve() + "\n";
60+
}
61+
62+
}

jmeter-java-dsl-cli/src/test/resources/retailstore.jmdsl.yml

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)