如何将Gatling结果输出至控制台并复用至自定义报告与消息推送?
Gatling测试结果导出与自定义使用方案
完全可行,Gatling提供了灵活的API来获取测试运行的统计数据,你可以轻松实现控制台输出、自定义报告生成以及消息推送的需求,具体实现方式如下:
一、提取测试结果并输出到控制台
你可以通过Gatling的Simulation类中的afterSimulation钩子,捕获测试结束后的统计数据并输出到控制台:
实现代码示例
在你的Gatling仿真类中添加以下逻辑,测试结束后会自动提取并打印指定指标:
import io.gatling.core.Predef._ import io.gatling.http.Predef._ class LoadTestSimulation extends Simulation { // 这里定义你的测试场景、协议配置等内容... override def afterSimulation(): Unit = { val runStats = runId.flatMap(statsEngine.statsForRun) runStats.foreach { stats => val totalSuccess = stats.requestStats.values.map(_.successCount).sum val p95Response = stats.requestStats.values.map(_.responseTime.percentile95).max println("\n=== 测试核心结果 ===") println(s"成功请求总数: $totalSuccess") println(s"95%响应时间(ms): $p95Response") } } }
二、利用结果变量生成自定义报告/推送消息
提取到的totalSuccess、p95Response等变量可以直接用于后续自定义操作:
1. 生成自定义报告
你可以将数据写入HTML模板(或纯文本、CSV等格式),生成自定义报告文件:
// 示例:生成极简HTML报告 val reportContent = s""" <!DOCTYPE html> <html> <head><title>Gatling测试报告</title></head> <body> <h2>测试核心指标</h2> <p>成功请求数: $totalSuccess</p> <p>95%响应时间: ${p95Response}ms</p> </body> </html> """ // 将内容写入本地文件 import java.nio.file.{Files, Paths} Files.write(Paths.get("custom_test_report.html"), reportContent.getBytes)
2. 邮件发送测试结果
使用JavaMail相关库,将核心指标或自定义报告以邮件形式发送:
// 示例:简化邮件发送逻辑(需引入javax.mail依赖) import javax.mail._ import javax.mail.internet._ val smtpProps = System.getProperties() smtpProps.put("mail.smtp.host", "your-smtp-server-address") val session = Session.getDefaultInstance(smtpProps, null) val mailMsg = new MimeMessage(session) mailMsg.setFrom(new InternetAddress("sender@your-domain.com")) mailMsg.addRecipient(Message.RecipientType.TO, new InternetAddress("receiver@your-domain.com")) mailMsg.setSubject("Gatling性能测试结果") mailMsg.setText(s"本次测试核心数据:\n成功请求数: $totalSuccess\n95%响应时间: ${p95Response}ms") Transport.send(mailMsg)
3. 即时通讯工具推送
调用对应IM工具的Webhook接口(比如企业微信机器人、Slack机器人),推送测试结果:
// 示例:推送至企业微信机器人 import scala.io.Source import java.net.{HttpURLConnection, URL} val webhookUrl = "your-wechat-robot-webhook-url" val pushContent = s"""{"msgtype":"text","text":{"content":"Gatling测试结果:成功请求数$totalSuccess,95%响应时间${p95Response}ms"}}""" val conn = new URL(webhookUrl).openConnection().asInstanceOf[HttpURLConnection] conn.setRequestMethod("POST") conn.setRequestProperty("Content-Type", "application/json") conn.setDoOutput(true) val outputStream = conn.getOutputStream() outputStream.write(pushContent.getBytes) outputStream.flush() outputStream.close() // 可选:读取接口响应 val response = Source.fromInputStream(conn.getInputStream).mkString conn.disconnect()
注意事项
- 确保项目中引入了对应依赖(比如邮件库、HTTP客户端库)
- 如需更多指标(如失败请求数、平均响应时间),可参考Gatling API中的
Stats和RequestStats类扩展逻辑
内容的提问来源于stack exchange,提问作者stupid_beaver
相关产品推荐
相关产品推荐

