Dit comme cela ce n'a pas beaucoup d'intérêt, mais si on veut détourner JMeter de sa vocation première pour faire du monitoring de sites web ou de webservices... ça peut être utile !
L'idée est de remplacer le listener habituel par un script beanshell, à chaque itération le script va être executé et on va donc enregistrer le résultat de l'échantillon en base.
A noter que cette manip nécessite quand même "l'installation" du driver jdbc correspondant à votre version de MySQL dans JMeter (dans le dossier /lib de jmeter, normalement il est chargé automatiquement).
Voici le script :
//superformance.blogspot.com
import org.apache.jmeter.util.JMeterUtils;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.assertions.AssertionResult;
import java.sql.DriverManager;
import org.hsqldb.jdbcDriver;
import java.sql.SQLException;
import java.sql.*;
db_url = "jdbc:mysql://localhost/jmeter";
driver = "com.mysql.jdbc.Driver";
user = "jmeter";
password = "jmeter";
Class.forName(driver);
Connection con = DriverManager.getConnection(db_url,user,password);
try {
long newlong = sampleResult.getStartTime();
String str = Long.toString(newlong);
String str3 = str.substring(0,(str.length()-3));
long lts = Long.parseLong(str3);
PreparedStatement pstmt = con.prepareStatement("INSERT INTO test (name ,host ,resp_code ,resp_time, request_time, stamp, resp_size ) VALUES (?, ?, ?, ?,FROM_UNIXTIME(?),?, ? ) ");
pstmt.setString(1, sampleResult.getSampleLabel() );
pstmt.setString(2, sampleResult.getURL().getHost());
pstmt.setString(3, sampleResult.getResponseCode() );
pstmt.setLong(4, sampleResult.getTime() );
pstmt.setLong(5,lts );
pstmt.setLong(6,sampleResult.getStartTime() );
pstmt.setInt(7,sampleResult.getBytes() );
int i = pstmt.executeUpdate();
print(i);
}
catch ( e ) {
e.printStackTrace();
}
catch (SQLException s) {
print(s.getSQLState());
}
finally {
con.close();
}