19

我是加特林的新手。我找不到一个简单的完整示例来说明如何查看完整的 HTTP 响应正文。

这是我的简单示例

class CreateNotecard extends Simulation {  
    val baseURL = "https://portal.apps.stg.bluescape.com" 
    val httpConf = http 
        .baseURL(baseURL) 
        .userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36") 

    val scn = scenario("Create a notecard")  
        .exec(http("Get authenticity token") 
        .get("/users/sign_in") 
        .check(bodyString.saveAs("BODY"))) 

    setUp( 
        scn.inject(atOnceUsers(1))  
    ).protocols(httpConf)  
}

如何将bodyString打印到文件或控制台上?

提前致谢

4

3 回答 3

27

使用您的示例,只需在exec下面添加调用。

class CreateNotecard extends Simulation {  
    // . . .
    .check(bodyString.saveAs("BODY"))) 

  .exec(session => {
    val response = session("BODY").as[String]
    println(s"Response body: \n$response")
    session
  })

  // . . .
}

在调试时直接从仿真代码打印很有用。

于 2018-10-15T18:11:50.897 回答
14

有很多方法可以做到这一点,从简单的 system.out.println() 调用,使用你最喜欢的 java 库将一些 scala 代码保存到文件中,但取决于你需要响应体的内容,最简单的可能是让 logback.xml 配置为您完成。

如果您已经从 gatling maven 原型构建了您的项目,它将已经包含一个 logback.xml,其中包含一些注释掉的代码行,其中包含将整个 http 请求/响应打印到控制台的附加程序,请在这些代码中添加注释。如果您只需要查看响应主体来开发或调试模拟,则启用其中一组可能正是您所需要的:

 <!--Uncomment for logging ALL HTTP request and responses -->
    <!--<logger name="io.gatling.http.ahc" level="TRACE" />-->
    <!--<logger name="io.gatling.http.response" level="TRACE" />-->
<!-- Uncomment for logging ONLY FAILED HTTP request and responses -->
    <!--<logger name="io.gatling.http.ahc" level="DEBUG" />-->
    <!--<logger name="io.gatling.http.response" level="DEBUG" />-->

如果要将响应正文打印到文件中,也可以使用 logback-file。我更喜欢使用以下简单配置,因为它会将所有失败的请求/响应日志打印到与存储加特林模拟结果相同的目录中的文件中,这有助于更详细地查看您在模拟中遇到的错误类型一个专用文件。

对于加特林 2.3:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
        </encoder>
    <immediateFlush>false</immediateFlush>
    </appender>

    <appender name="ERROR" class="ch.qos.logback.core.FileAppender">
        <file>target/gatling/simulation-errors.log</file>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
        </encoder>
        <immediateFlush>false</immediateFlush>
        <param name="Append" value="false" />
    </appender>

    <logger name="io.gatling.http.ahc" level="DEBUG" additivity="false">
        <appender-ref ref="ERROR"/>
    </logger>
    <logger name="io.gatling.http.response" level="DEBUG" additivity="false">
        <appender-ref ref="ERROR"/>
    </logger>

    <root level="WARN">
        <appender-ref ref="CONSOLE" />
    </root>

</configuration>

对于 Gatling 3.0,上面的两个记录器必须替换为以下附加程序:

<logger name="io.gatling.http.engine.response" level="DEBUG" additivity="false">
    <appender-ref ref="ERROR"/>
</logger>
于 2017-10-27T08:14:50.860 回答
4

这是根据gatling-sbt-demo-documentation for gatling 3.2.0的解决方案

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{15} - %msg%n%rEx</pattern>
    </encoder>
    <immediateFlush>false</immediateFlush>
</appender>

<!-- uncomment and set to DEBUG to log all failing HTTP requests -->
<!-- uncomment and set to TRACE to log all HTTP requests -->
<!--<logger name="io.gatling.http.engine.response" level="TRACE" />-->

<root level="WARN">
    <appender-ref ref="CONSOLE" />
</root>

只需 <!--<logger name="io.gatling.http.engine.response" level="TRACE" />-->像过去一样取消注释即可。

于 2019-08-29T13:07:56.110 回答