Skip to content

Commit 171855f

Browse files
committed
Release XLT 8.5.0
2 parents 616b5af + ecb1716 commit 171855f

7 files changed

Lines changed: 328 additions & 114 deletions

File tree

config/xsl/loadreport/sections/response-codes.xsl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@
7373
</xsl:choose>
7474
</table>
7575
</div>
76+
<div class="charts">
77+
<div class="chart">
78+
<img>
79+
<xsl:attribute name="src">charts/ResponseCodesPerSecond.webp</xsl:attribute>
80+
<xsl:attribute name="alt">Response Codes Per Second</xsl:attribute>
81+
</img>
82+
</div>
83+
</div>
7684
</div>
7785
</div>
7886

doc/internal-doc/api.sig

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#Signature file v4.1
2-
#Version 8.0.0
2+
#Version 8.5.0
33

44
CLSS public abstract com.xceptance.xlt.api.actions.AbstractAction
55
cons protected init(com.xceptance.xlt.api.actions.AbstractAction,java.lang.String)
@@ -2349,6 +2349,12 @@ meth public static <%0 extends java.lang.Object> java.util.List<{%%0}> of({%%0},
23492349
meth public void replaceAll(java.util.function.UnaryOperator<{java.util.List%0}>)
23502350
meth public void sort(java.util.Comparator<? super {java.util.List%0}>)
23512351

2352+
CLSS public abstract interface !annotation org.jspecify.annotations.NullMarked
2353+
anno 0 java.lang.annotation.Documented()
2354+
anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
2355+
anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[MODULE, PACKAGE, TYPE, METHOD, CONSTRUCTOR])
2356+
intf java.lang.annotation.Annotation
2357+
23522358
CLSS public abstract interface !annotation org.junit.runner.RunWith
23532359
anno 0 java.lang.annotation.Inherited()
23542360
anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
@@ -2376,43 +2382,21 @@ meth public abstract void downloadFile(java.lang.String,java.nio.file.Path) thro
23762382
meth public void requireDownloadsEnabled(org.openqa.selenium.Capabilities)
23772383

23782384
CLSS public abstract interface org.openqa.selenium.JavascriptExecutor
2379-
meth public !varargs java.lang.Object executeScript(org.openqa.selenium.ScriptKey,java.lang.Object[])
2380-
meth public abstract !varargs java.lang.Object executeAsyncScript(java.lang.String,java.lang.Object[])
2381-
meth public abstract !varargs java.lang.Object executeScript(java.lang.String,java.lang.Object[])
2382-
meth public java.util.Set<org.openqa.selenium.ScriptKey> getPinnedScripts()
2383-
meth public org.openqa.selenium.ScriptKey pin(java.lang.String)
2384-
meth public void unpin(org.openqa.selenium.ScriptKey)
23852385

23862386
CLSS public abstract interface org.openqa.selenium.PrintsPage
23872387
meth public abstract org.openqa.selenium.Pdf print(org.openqa.selenium.print.PrintOptions)
23882388

23892389
CLSS public abstract interface org.openqa.selenium.SearchContext
2390+
anno 0 org.jspecify.annotations.NullMarked()
23902391
meth public abstract java.util.List<org.openqa.selenium.WebElement> findElements(org.openqa.selenium.By)
23912392
meth public abstract org.openqa.selenium.WebElement findElement(org.openqa.selenium.By)
23922393

23932394
CLSS public abstract interface org.openqa.selenium.TakesScreenshot
2395+
anno 0 org.jspecify.annotations.NullMarked()
23942396
meth public abstract <%0 extends java.lang.Object> {%%0} getScreenshotAs(org.openqa.selenium.OutputType<{%%0}>)
23952397

23962398
CLSS public abstract interface org.openqa.selenium.WebDriver
2397-
innr public abstract interface static Navigation
2398-
innr public abstract interface static Options
2399-
innr public abstract interface static TargetLocator
2400-
innr public abstract interface static Timeouts
2401-
innr public abstract interface static Window
24022399
intf org.openqa.selenium.SearchContext
2403-
meth public abstract java.lang.String getCurrentUrl()
2404-
meth public abstract java.lang.String getPageSource()
2405-
meth public abstract java.lang.String getTitle()
2406-
meth public abstract java.lang.String getWindowHandle()
2407-
meth public abstract java.util.List<org.openqa.selenium.WebElement> findElements(org.openqa.selenium.By)
2408-
meth public abstract java.util.Set<java.lang.String> getWindowHandles()
2409-
meth public abstract org.openqa.selenium.WebDriver$Navigation navigate()
2410-
meth public abstract org.openqa.selenium.WebDriver$Options manage()
2411-
meth public abstract org.openqa.selenium.WebDriver$TargetLocator switchTo()
2412-
meth public abstract org.openqa.selenium.WebElement findElement(org.openqa.selenium.By)
2413-
meth public abstract void close()
2414-
meth public abstract void get(java.lang.String)
2415-
meth public abstract void quit()
24162400

24172401
CLSS public abstract interface org.openqa.selenium.bidi.HasBiDi
24182402
meth public abstract java.util.Optional<org.openqa.selenium.bidi.BiDi> maybeGetBiDi()
@@ -2609,6 +2593,7 @@ cons public init(java.net.URL,org.openqa.selenium.Capabilities,boolean)
26092593
cons public init(org.openqa.selenium.Capabilities)
26102594
cons public init(org.openqa.selenium.Capabilities,boolean)
26112595
cons public init(org.openqa.selenium.remote.CommandExecutor,org.openqa.selenium.Capabilities)
2596+
fld protected org.openqa.selenium.Capabilities capabilities
26122597
innr protected RemoteTargetLocator
26132598
innr protected RemoteWebDriverOptions
26142599
innr public final static !enum When
@@ -2654,6 +2639,8 @@ meth public org.openqa.selenium.federatedcredentialmanagement.FederatedCredentia
26542639
meth public org.openqa.selenium.remote.CommandExecutor getCommandExecutor()
26552640
meth public org.openqa.selenium.remote.ErrorHandler getErrorHandler()
26562641
meth public org.openqa.selenium.remote.FileDetector getFileDetector()
2642+
meth public org.openqa.selenium.remote.Network network()
2643+
meth public org.openqa.selenium.remote.Script script()
26572644
meth public org.openqa.selenium.remote.SessionId getSessionId()
26582645
meth public org.openqa.selenium.virtualauthenticator.VirtualAuthenticator addVirtualAuthenticator(org.openqa.selenium.virtualauthenticator.VirtualAuthenticatorOptions)
26592646
meth public static org.openqa.selenium.remote.RemoteWebDriverBuilder builder()
@@ -2672,7 +2659,7 @@ meth public void setErrorHandler(org.openqa.selenium.remote.ErrorHandler)
26722659
meth public void setFileDetector(org.openqa.selenium.remote.FileDetector)
26732660
meth public void setLogLevel(java.util.logging.Level)
26742661
supr java.lang.Object
2675-
hfds LOG,capabilities,converter,elementLocation,errorHandler,executeMethod,executor,fileDetector,level,localLogs,remoteLogs,sessionId
2662+
hfds LOG,WEBDRIVER_REMOTE_ENABLE_TRACING,converter,elementLocation,errorHandler,executeMethod,executor,fileDetector,level,localLogs,remoteLogs,remoteNetwork,remoteScript,sessionId
26762663
hcls RemoteAlert,RemoteNavigation,RemoteVirtualAuthenticator
26772664

26782665
CLSS public abstract interface org.openqa.selenium.virtualauthenticator.HasVirtualAuthenticator

pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.xceptance</groupId>
88
<artifactId>xlt</artifactId>
9-
<version>8.4.1</version>
9+
<version>8.5.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>XLT</name>
@@ -71,9 +71,9 @@
7171
<jetty.version>9.4.53.v20231009</jetty.version>
7272
<log4j.version>2.22.1</log4j.version>
7373
<powermock.version>2.0.9</powermock.version>
74-
<selenium.version>4.17.0</selenium.version>
74+
<selenium.version>4.26.0</selenium.version>
7575
<htmlunitdriver.version>4.17.0</htmlunitdriver.version>
76-
<otel.version>1.40.0</otel.version>
76+
<otel.version>1.43.0</otel.version>
7777
<copyright>Copyright (c) ${project.inceptionYear}-2024 ${project.organization.name}</copyright>
7878
</properties>
7979

@@ -402,13 +402,13 @@
402402
<dependency>
403403
<groupId>net.bytebuddy</groupId>
404404
<artifactId>byte-buddy</artifactId>
405-
<version>1.14.11</version>
405+
<version>1.15.7</version>
406406
</dependency>
407407
<!-- guava is used by Selenium, Google Compute and Checkstyle. Ensure that the highest version wins. -->
408408
<dependency>
409409
<groupId>com.google.guava</groupId>
410410
<artifactId>guava</artifactId>
411-
<version>33.0.0-jre</version>
411+
<version>33.3.1-jre</version>
412412
</dependency>
413413
<!-- slf4j is used by many libs. Ensure that the version used by log4j-slf4j2-impl wins. -->
414414
<dependency>

src/main/java/com/xceptance/xlt/engine/XltWebClient.java

Lines changed: 98 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -314,38 +314,9 @@ public XltWebClient(final BrowserVersion browserVersion, final boolean javaScrip
314314
cssMode = CssMode.getMode(props.getProperty("com.xceptance.xlt.css.download.images"));
315315

316316
// JavaScript
317-
if (javaScriptEngineEnabled)
318-
{
319-
// setup JavaScript engine
320-
int optimizationLevel = props.getProperty("com.xceptance.xlt.js.compiler.optimizationLevel", -1);
321-
if (optimizationLevel < -1 || optimizationLevel > 9)
322-
{
323-
XltLogger.runTimeLogger.warn("Property 'com.xceptance.xlt.js.compiler.optimizationLevel' is set to an invalid value. Will use -1 instead.");
324-
optimizationLevel = -1;
325-
}
326-
327-
final boolean takeMeasurements = props.getProperty("com.xceptance.xlt.js.takeMeasurements", false);
328-
329-
setJavaScriptEngine(new XltJavaScriptEngine(this, optimizationLevel, takeMeasurements));
330-
getOptions().setJavaScriptEnabled(props.getProperty("com.xceptance.xlt.javaScriptEnabled", false));
331-
getOptions().setThrowExceptionOnScriptError(props.getProperty("com.xceptance.xlt.stopTestOnJavaScriptErrors", false));
332-
333-
// setup JavaScript debugger
334-
if (props.getProperty("com.xceptance.xlt.js.debugger.enabled", false))
335-
{
336-
setJavaScriptDebuggerEnabled(true);
337-
338-
// create JS beautifying response processor only when needed
339-
if (props.getProperty("com.xceptance.xlt.js.debugger.beautifyDownloadedJavaScript", true))
340-
{
341-
jsBeautifier = new JSBeautifingResponseProcessor();
342-
}
343-
}
344-
}
345-
else
346-
{
347-
getOptions().setJavaScriptEnabled(false);
348-
}
317+
getOptions().setJavaScriptEnabled(props.getProperty("com.xceptance.xlt.javaScriptEnabled", false));
318+
getOptions().setThrowExceptionOnScriptError(props.getProperty("com.xceptance.xlt.stopTestOnJavaScriptErrors", false));
319+
configureJavaScriptEngine(props);
349320

350321
// default user authentication
351322
final String userName = props.getProperty("com.xceptance.xlt.auth.userName");
@@ -448,36 +419,30 @@ public XltWebClient(final BrowserVersion browserVersion, final boolean javaScrip
448419
getOptions().setHistorySizeLimit(historySizeLimit);
449420

450421
// set web connection
451-
final WebConnection underlyingWebConnection;
452-
if (props.getProperty("com.xceptance.xlt.http.offline", false))
453-
{
454-
// we are in offline mode and return fixed responses
455-
underlyingWebConnection = new XltOfflineWebConnection();
456-
}
457-
else
458-
{
459-
final String client = props.getProperty("com.xceptance.xlt.http.client");
460-
final boolean collectTargetIpAddress = ((XltPropertiesImpl) props).collectUsedIpAddress();
461-
if ("okhttp3".equals(client))
462-
{
463-
final boolean http2Enabled = props.getProperty("com.xceptance.xlt.http.client.okhttp3.http2Enabled", true);
464-
underlyingWebConnection = new OkHttp3WebConnection(this, http2Enabled, collectTargetIpAddress);
465-
}
466-
else
467-
{
468-
// the default connection
469-
underlyingWebConnection = new XltApacheHttpWebConnection(this, collectTargetIpAddress);
470-
}
471-
}
422+
configureWebConnection(props);
472423

473-
XltLogger.runTimeLogger.debug("Using web connection class: " + underlyingWebConnection.getClass().getName());
424+
// load key/trust material for client/server authentication
425+
configureKeyStore(props);
426+
configureTrustStore(props);
427+
}
474428

475-
final XltHttpWebConnection connection = new XltHttpWebConnection(this, underlyingWebConnection);
476-
setWebConnection(connection);
429+
/**
430+
* {@inheritDoc}
431+
*/
432+
@Override
433+
public void reset()
434+
{
435+
super.reset();
477436

478-
// load key/trust material for client/server authentication
479-
setUpKeyStore(props);
480-
setUpTrustStore(props);
437+
final XltProperties props = XltProperties.getInstance();
438+
439+
// create a new instance of "our" JavaScript engine if needed
440+
configureJavaScriptEngine(props);
441+
442+
// create a new instance of "our" web connection
443+
configureWebConnection(props);
444+
445+
pageLocalCache.clear();
481446
}
482447

483448
/**
@@ -2059,14 +2024,86 @@ else if (s.equals("resync"))
20592024
}
20602025
}
20612026

2027+
/**
2028+
* Sets up the JavaScript engine to be used by this web client.
2029+
*
2030+
* @param props
2031+
* the configuration
2032+
*/
2033+
private void configureJavaScriptEngine(final XltProperties props)
2034+
{
2035+
if (isJavaScriptEngineEnabled())
2036+
{
2037+
// setup JavaScript engine
2038+
int optimizationLevel = props.getProperty("com.xceptance.xlt.js.compiler.optimizationLevel", -1);
2039+
if (optimizationLevel < -1 || optimizationLevel > 9)
2040+
{
2041+
XltLogger.runTimeLogger.warn("Property 'com.xceptance.xlt.js.compiler.optimizationLevel' is set to an invalid value. Will use -1 instead.");
2042+
optimizationLevel = -1;
2043+
}
2044+
2045+
final boolean takeMeasurements = props.getProperty("com.xceptance.xlt.js.takeMeasurements", false);
2046+
2047+
setJavaScriptEngine(new XltJavaScriptEngine(this, optimizationLevel, takeMeasurements));
2048+
2049+
// setup JavaScript debugger
2050+
if (props.getProperty("com.xceptance.xlt.js.debugger.enabled", false))
2051+
{
2052+
setJavaScriptDebuggerEnabled(true);
2053+
2054+
// create JS beautifying response processor only when needed
2055+
if (props.getProperty("com.xceptance.xlt.js.debugger.beautifyDownloadedJavaScript", true))
2056+
{
2057+
jsBeautifier = new JSBeautifingResponseProcessor();
2058+
}
2059+
}
2060+
}
2061+
}
2062+
2063+
/**
2064+
* Sets up the web connection to be used by this web client.
2065+
*
2066+
* @param props
2067+
* the configuration
2068+
*/
2069+
private void configureWebConnection(final XltProperties props)
2070+
{
2071+
final WebConnection underlyingWebConnection;
2072+
if (props.getProperty("com.xceptance.xlt.http.offline", false))
2073+
{
2074+
// we are in offline mode and return fixed responses
2075+
underlyingWebConnection = new XltOfflineWebConnection();
2076+
}
2077+
else
2078+
{
2079+
final String client = props.getProperty("com.xceptance.xlt.http.client");
2080+
final boolean collectTargetIpAddress = ((XltPropertiesImpl) props).collectUsedIpAddress();
2081+
if ("okhttp3".equals(client))
2082+
{
2083+
final boolean http2Enabled = props.getProperty("com.xceptance.xlt.http.client.okhttp3.http2Enabled", true);
2084+
underlyingWebConnection = new OkHttp3WebConnection(this, http2Enabled, collectTargetIpAddress);
2085+
}
2086+
else
2087+
{
2088+
// the default connection
2089+
underlyingWebConnection = new XltApacheHttpWebConnection(this, collectTargetIpAddress);
2090+
}
2091+
}
2092+
2093+
XltLogger.runTimeLogger.debug("Using web connection class: " + underlyingWebConnection.getClass().getName());
2094+
2095+
final XltHttpWebConnection connection = new XltHttpWebConnection(this, underlyingWebConnection);
2096+
setWebConnection(connection);
2097+
}
2098+
20622099
/**
20632100
* Sets up the key store with the client key to be used by this web client. The store is read from a file specified
20642101
* in the test suite configuration.
20652102
*
20662103
* @param props
20672104
* the configuration
20682105
*/
2069-
private void setUpKeyStore(final XltProperties props)
2106+
private void configureKeyStore(final XltProperties props)
20702107
{
20712108
final String storeFilePath = props.getProperty("com.xceptance.xlt.tls.keyStore.file");
20722109
if (StringUtils.isNotBlank(storeFilePath))
@@ -2086,7 +2123,7 @@ private void setUpKeyStore(final XltProperties props)
20862123
* @param props
20872124
* the configuration
20882125
*/
2089-
private void setUpTrustStore(final XltProperties props)
2126+
private void configureTrustStore(final XltProperties props)
20902127
{
20912128
final String storeFilePath = props.getProperty("com.xceptance.xlt.tls.trustStore.file");
20922129
if (StringUtils.isNotBlank(storeFilePath))

0 commit comments

Comments
 (0)