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();
}
Aucun commentaire:
Enregistrer un commentaire