You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jmeter.apache.org by pm...@apache.org on 2019/05/21 08:32:37 UTC
svn commit: r1859615 - in /jmeter/trunk:
src/core/org/apache/jmeter/JMeter.java
test/src/org/apache/jmeter/JMeterTest.java xdocs/changes.xml
Author: pmouawad
Date: Tue May 21 08:32:36 2019
New Revision: 1859615
URL: http://svn.apache.org/viewvc?rev=1859615&view=rev
Log:
Bug 63394 - JMeter should fail with non-zero when test execution fails (due to missing test plan or other reason)
Contributed by UbikLoadPack
This closes #458
This closes #456
Bugzilla Id: 63394
Added:
jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java (with props)
Modified:
jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
jmeter/trunk/xdocs/changes.xml
Modified: jmeter/trunk/src/core/org/apache/jmeter/JMeter.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/src/core/org/apache/jmeter/JMeter.java?rev=1859615&r1=1859614&r2=1859615&view=diff
==============================================================================
--- jmeter/trunk/src/core/org/apache/jmeter/JMeter.java (original)
+++ jmeter/trunk/src/core/org/apache/jmeter/JMeter.java Tue May 21 08:32:36 2019
@@ -992,12 +992,12 @@ public class JMeter implements JMeterPlu
}
// run test in batch mode
- private void runNonGui(String testFile, String logFile, boolean remoteStart, String remoteHostsString, boolean generateReportDashboard) {
+ void runNonGui(String testFile, String logFile, boolean remoteStart, String remoteHostsString, boolean generateReportDashboard)
+ throws ConfigurationException {
try {
File f = new File(testFile);
if (!f.exists() || !f.isFile()) {
- println("Could not open " + testFile);
- return;
+ throw new ConfigurationException("The file " + f.getAbsolutePath() + " doesn't exist or can't be opened");
}
FileServer.getFileServer().setBaseForScript(f);
@@ -1089,9 +1089,12 @@ public class JMeter implements JMeterPlu
distributedRunner.start();
}
startUdpDdaemon(engines);
+ } catch (ConfigurationException e) {
+ throw e;
} catch (Exception e) {
System.out.println("Error in NonGUIDriver " + e.toString());//NOSONAR
log.error("Error in NonGUIDriver", e);
+ throw new ConfigurationException("Error in NonGUIDriver " + e.getMessage(), e);
}
}
Added: jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java
URL: http://svn.apache.org/viewvc/jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java?rev=1859615&view=auto
==============================================================================
--- jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java (added)
+++ jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java Tue May 21 08:32:36 2019
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.jmeter;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import org.apache.jmeter.junit.JMeterTestCase;
+import org.apache.jmeter.report.config.ConfigurationException;
+import org.apache.jorphan.test.JMeterSerialTest;
+import org.junit.Test;
+
+public class JMeterTest extends JMeterTestCase implements JMeterSerialTest {
+ @Test
+ public void testFailureWhenJmxDoesntExist() {
+ JMeter jmeter = new JMeter();
+ try {
+ jmeter.runNonGui("testPlan.jmx", null, false, null, false);
+ fail("Expected ConfigurationException to be thrown");
+ } catch (ConfigurationException e) {
+ assertTrue("When the plugin doesn't exist, the method 'runNonGui' should throw a ConfigurationException",
+ e instanceof ConfigurationException);
+ assertTrue("When the file doesn't exist, this method 'runNonGui' should have a detailed message",
+ e.getMessage().contains("doesn't exist or can't be opened"));
+ }
+ }
+
+ @Test
+ public void testSuccessWhenJmxExists() throws IOException, ConfigurationException {
+ File temp = File.createTempFile("testPlan", ".jmx");
+ String testPlan = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ + "<jmeterTestPlan version=\"1.2\" properties=\"5.0\" jmeter=\"5.2-SNAPSHOT\">\n" + " <hashTree>\n"
+ + " <TestPlan guiclass=\"TestPlanGui\" testclass=\"TestPlan\" testname=\"Test Plan\" enabled=\"true\">\n"
+ + " <stringProp name=\"TestPlan.comments\"></stringProp>\n"
+ + " <boolProp name=\"TestPlan.functional_mode\">false</boolProp>\n"
+ + " <boolProp name=\"TestPlan.tearDown_on_shutdown\">true</boolProp>\n"
+ + " <boolProp name=\"TestPlan.serialize_threadgroups\">false</boolProp>\n"
+ + " <elementProp name=\"TestPlan.user_defined_variables\" elementType=\"Arguments\" guiclass=\"ArgumentsPanel\" "
+ + "testclass=\"Arguments\" testname=\"User Defined Variables\" enabled=\"true\">\n"
+ + " <collectionProp name=\"Arguments.arguments\"/>\n" + " </elementProp>\n"
+ + " <stringProp name=\"TestPlan.user_define_classpath\"></stringProp></TestPlan>"
+ + " <hashTree/></hashTree></jmeterTestPlan>";
+ try (FileWriter fw = new FileWriter(temp); BufferedWriter out = new BufferedWriter(fw)) {
+ out.write(testPlan);
+ }
+
+ try {
+ JMeter jmeter = new JMeter();
+ jmeter.runNonGui(temp.getAbsolutePath(), null, false, null, false);
+ } finally {
+ assertTrue("File "+ temp.getAbsolutePath()+ " should have been deleted", temp.delete());
+ }
+ }
+
+ @Test
+ public void testFailureWithMissingPlugin() throws IOException, ConfigurationException {
+ File temp = File.createTempFile("testPlan", ".jmx");
+ String testPlan = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ + "<jmeterTestPlan version=\"1.2\" properties=\"5.0\" jmeter=\"5.2-SNAPSHOT.20190506\">\n"
+ + " <hashTree>\n"
+ + " <TestPlan guiclass=\"TestPlanGui\" testclass=\"TestPlan\" testname=\"Test Plan\" enabled=\"true\">\n"
+ + " <stringProp name=\"TestPlan.comments\"></stringProp>\n"
+ + " <boolProp name=\"TestPlan.functional_mode\">false</boolProp>\n"
+ + " <boolProp name=\"TestPlan.tearDown_on_shutdown\">true</boolProp>\n"
+ + " <boolProp name=\"TestPlan.serialize_threadgroups\">false</boolProp>\n"
+ + " <elementProp name=\"TestPlan.user_defined_variables\" elementType=\"Arguments\" "
+ + "guiclass=\"ArgumentsPanel\" testclass=\"Arguments\" testname=\"User Defined Variables\" enabled=\"true\">\n"
+ + " <collectionProp name=\"Arguments.arguments\"/>\n" + " </elementProp>\n"
+ + " <stringProp name=\"TestPlan.user_define_classpath\"></stringProp>\n" + " </TestPlan>\n"
+ + " <hashTree>\n" + " <hashTree>\n"
+ + " <kg.apc.jmeter.samplers.DummySampler guiclass=\"kg.apc.jmeter.samplers.DummySamplerGui\" "
+ + "testclass=\"kg.apc.jmeter.samplers.DummySampler\" testname=\"jp@gc - Dummy Sampler\" enabled=\"true\">\n"
+ + " <boolProp name=\"WAITING\">true</boolProp>\n"
+ + " <boolProp name=\"SUCCESFULL\">true</boolProp>\n"
+ + " <stringProp name=\"RESPONSE_CODE\">200</stringProp>\n"
+ + " <stringProp name=\"RESPONSE_MESSAGE\">OK</stringProp>\n"
+ + " <stringProp name=\"REQUEST_DATA\">{"email":"user1", "password":"password1"}ï¼"
+ + "</stringProp>\n"
+ + " <stringProp name=\"RESPONSE_DATA\">{"successful": true, "account_id":"0123456789"}</stringProp>\n"
+ + " <stringProp name=\"RESPONSE_TIME\">${__Random(50,500)}</stringProp>\n"
+ + " <stringProp name=\"LATENCY\">${__Random(1,50)}</stringProp>\n"
+ + " <stringProp name=\"CONNECT\">${__Random(1,5)}</stringProp>\n"
+ + " </kg.apc.jmeter.samplers.DummySampler></hashTree></hashTree>\n"
+ + " </hashTree></jmeterTestPlan><hashTree/></hashTree>\n" + "</jmeterTestPlan>";
+ try (FileWriter fw = new FileWriter(temp); BufferedWriter out = new BufferedWriter(fw)) {
+ out.write(testPlan);
+ }
+ JMeter jmeter = new JMeter();
+ try {
+ jmeter.runNonGui(temp.getAbsolutePath(), null, false, null, false);
+ fail("Expected ConfigurationException to be thrown");
+ } catch (ConfigurationException e) {
+ assertTrue("When the plugin doesn't exist, the method 'runNonGui' should throw a ConfigurationException",
+ e instanceof ConfigurationException);
+ assertTrue("When the plugin doesn't exist, the method 'runNonGui' should have a detailed message",
+ e.getMessage().contains("Error in NonGUIDriver Problem loading XML from"));
+ } finally {
+ assertTrue("File "+ temp.getAbsolutePath()+ " should have been deleted", temp.delete());
+ }
+ }
+}
Propchange: jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: jmeter/trunk/test/src/org/apache/jmeter/JMeterTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jmeter/trunk/xdocs/changes.xml?rev=1859615&r1=1859614&r2=1859615&view=diff
==============================================================================
--- jmeter/trunk/xdocs/changes.xml [utf-8] (original)
+++ jmeter/trunk/xdocs/changes.xml [utf-8] Tue May 21 08:32:36 2019
@@ -177,6 +177,7 @@ to view the last major behaviors with th
<h3>General</h3>
<ul>
+ <li><bug>63394</bug>JMeter should fail with non-zero when test execution fails (due to missing test plan or other reason). Contributed by Ubik Load Pack (support at ubikloadpack.com)</li>
</ul>
<!-- =================== Thanks =================== -->
@@ -194,6 +195,7 @@ to view the last major behaviors with th
<ul>
<li>Sergiy Iampol (sergiy.iampol at playtech.com)</li>
<li>Brian Tully (brian.tully at acquia.com)</li>
+ <li>Amer Ghazal (amerghazal at gmail.com)</li>
</ul>
<p>
Apologies if we have omitted anyone else.