网上查了一圈,关于 gatling 脚本相关的信息很少,一般的 gatling 多数是使用一个简单例子来演示工具,与实际使用中的差距很大。整理了一份 gatling 脚本改造的实际例子,忽略了很多生成的 httpProtocol,Header 信息
Ps:最近使用过 gatling 录制 Postman 请求的时候遇到两个问题,如果有过来者,麻烦解答一下
1.使用 Postman 录制的时候,只能录制 Http 的请求,对于 Https 的请求,录制不成功
2.录制 Postman 的的请求体会存放在 bodies 目录下的 txt 文件中,一个系列的的接口测试中,后续报文需要使用前面报文的响应内容,如何将获取的响应结果参数,替换到 bodies 目录下的 txt 文件中

一、定义事务

object Login{
    val login = group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
            )
        }
}

二、设置执行时间

1.执行次数

object Login{
    val login = repeat(times = 1){
        group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
            )
        }
    }
}

2.执行时间

object Login{
    val login = during(1 minutes){
        group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
            )
        }
    }
}

三 检查点

object Login{
    val login = during(1 minutes){
        group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
                .check(substring("ID").find.exists)
            )
        }
    }
}

四 正则提取

object Login{
    val login = during(1 minutes){
        group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
                .check(regex("ID=(.+)?<").saveAs("ID")))
            )
        }
    }
}

五 参数化

val user = csv("").circular


object Login{
    val login = during(1 minutes){
        group(name = "login"){
            feed(user)
                .exec(http()
                .post(url=s"${username}")
                .headers(header)
                .body()
                    )
        }
    }
}

六 自定义方法 +Session 运算块

def calDate():(String) = {
    val now: Date = new Date()
    val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒")
    var dataNow = dateFormat.format(now)

    (dataNow)
}
object Login{
    val login = during(1 minutes){
        group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
                )
            .exec(session=>{
                    val (dataNow) = calDate()
                    session.set("dataNow", dataNow)
                    println(dataNow)
                    session
                                        }
                )
            }
        }
    }

七获取 Cookie 值

object Login{
    val login = repeat(times = 1){
        group(name = "login"){
            exec(http("")
                .post("/")
                .headers(headers_0)
                .body()
            )
            .exec(getCookieValue(CookieKey("CookieKey").saveAs("CookieKey")))
        }
    }
}

八 场景定义

val scn =scenario("GatlingTest").exec(Login.login )
setUp(scn .inject(atOnceUsers(1))).protocols(httpProtocol)


↙↙↙阅读原文可查看相关链接,并与作者交流