Ale*_*ick 2 testing load scala intellij-idea gatling
我是加特林的新手,现在在其网站 computer-database.gatling.io 上试验加特林。
一切正常,几天后我将在工作中为我的项目应用负载测试,但是有一个问题,我的网站每秒需要 2000 个用户(当我阅读其他内容时,这对加特林来说似乎没什么大不了的资源)
我有这个简单的代码:我想在 300 秒内加载 250 个用户/管理员,现在出现问题(请帮我解决这个问题)当我启动这个脚本时:
package load
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.core.structure.ChainBuilder
import io.gatling.jdbc.Predef.jdbcFeeder
import scala.util.Random
import scala.concurrent.duration._
class TestOvo extends Simulation {
val httpProtocol = http
.baseURL("http://computer-database.gatling.io")
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
.acceptEncodingHeader("gzip, deflate")
.acceptLanguageHeader("en-US,en;q=0.8")
.userAgentHeader("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36")
val headers_0 = Map("Upgrade-Insecure-Requests" -> "1")
val headers_10 = Map(
"Origin" -> "http://computer-database.gatling.io",
"Upgrade-Insecure-Requests" -> "1")
object Search {
val search = exec(http("request_0")
.get("/")
.headers(headers_0))
.pause(1)
.exec(http("request_1")
.get("/computers?f=macbook")
.headers(headers_0))
.pause(2)
.exec(http("request_2")
.get("/computers/89")
.headers(headers_0))
.pause(2)
.exec(http("request_3")
.get("/")
.headers(headers_0))
.pause(2)
}
object Browse {
val browse = exec(http("request_4")
.get("/computers?p=1")
.headers(headers_0))
.pause(1)
.exec(http("request_5")
.get("/computers?p=2")
.headers(headers_0))
.pause(1)
.exec(http("request_6")
.get("/computers?p=3")
.headers(headers_0))
.pause(2)
.exec(http("request_7")
.get("/computers?p=4")
.headers(headers_0)
.resources(http("request_8")
.get("/computers?p=5")
.headers(headers_0)))
.pause(1)
}
object Edit {
val edit = exec(http("request_9")
.get("/computers/new")
.headers(headers_0))
.pause(1)
.exec(http("request_10")
.post("/computers")
.headers(headers_10)
.formParam("name", "VoxooBox")
.formParam("introduced", "12.11.2017")
.formParam("discontinued", "")
.formParam("company", "16")
.check(status.is(400)))
.pause(1)
.exec(http("request_11")
.post("/computers")
.headers(headers_10)
.formParam("name", "VoxooBox")
.formParam("introduced", "2017.08.17")
.formParam("discontinued", "")
.formParam("company", "16")
.check(status.is(400)))
.pause(1)
.exec(http("request_12")
.post("/computers")
.headers(headers_10)
.formParam("name", "VoxooBox")
.formParam("introduced", "2017-08-17")
.formParam("discontinued", "")
.formParam("company", "16"))
}
val users = scenario("Users").exec(Search.search, Browse.browse);
val admins = scenario("Admins").exec(Search.search, Browse.browse, Edit.edit);
setUp(
users.inject(constantUsersPerSec(200) during (300 seconds)),
admins.inject(constantUsersPerSec(50) during (300 seconds))
).protocols(httpProtocol)
}
Run Code Online (Sandbox Code Playgroud)
它最大程度地用于用户指标:
================================================================================
2017-10-17 14:47:20 25s elapsed
---- Requests ------------------------------------------------------------------
> Global (OK=15950 KO=0 )
> request_0 (OK=5046 KO=0 )
> request_0 Redirect 1 (OK=3829 KO=0 )
> request_1 (OK=2582 KO=0 )
> request_2 (OK=1589 KO=0 )
> request_3 (OK=1249 KO=0 )
> request_3 Redirect 1 (OK=897 KO=0 )
> request_4 (OK=423 KO=0 )
> request_5 (OK=224 KO=0 )
> request_6 (OK=88 KO=0 )
> request_7 (OK=17 KO=0 )
> request_8 (OK=6 KO=0 )
---- Users ---------------------------------------------------------------------
[------ ] 0%
waiting: 55156 / active: 4842 / done:2
---- Admins --------------------------------------------------------------------
[------ ] 0%
waiting: 13788 / active: 1212 / done:0
================================================================================
14:47:21.107 [WARN ] i.g.h.a.ResponseProcessor - Request 'request_5' failed: j.n.ConnectException: connection timed out: computer-database.gatling.io/35.158.229.206:80
Run Code Online (Sandbox Code Playgroud)
然后出现这些错误:
[警告] ighaResponseProcessor - 请求 'request_4' 失败:jnConnectException:连接超时:computer-database.gatling.io/35.158.229.206:80 13:31:12.407 [WARN] ighaResponseProcessor - 请求 'request_4' 失败:jnConnectException:打开一个套接字。
在 gatling.conf 我发现这些行:
ahc {
#keepAlive = true # Allow pooling HTTP connections (keep-alive header automatically added)
#connectTimeout = 10000 # Timeout when establishing a connection
#handshakeTimeout = 10000 # Timeout when performing TLS hashshake
#pooledConnectionIdleTimeout = 60000 # Timeout when a connection stays unused in the pool
#readTimeout = 60000 # Timeout when a used connection stays idle
#maxRetry = 2 # Number of times that a request should be tried again
#requestTimeout = 60000 # Timeout of the requests
#acceptAnyCertificate = true # When set to true, doesn't validate SSL certificates
#httpClientCodecMaxInitialLineLength = 4096 # Maximum length of the initial line of the response (e.g. "HTTP/1.0 200 OK")
#httpClientCodecMaxHeaderSize = 8192 # Maximum size, in bytes, of each request's headers
#httpClientCodecMaxChunkSize = 8192 # Maximum length of the content or each chunk
#webSocketMaxFrameSize = 10240000 # Maximum frame payload size
Run Code Online (Sandbox Code Playgroud)
我想这可能与我的问题有关,或者我做错了什么?那是我的问题还是他们的网站无法接受?
为什么当我启动
users.inject(constantUsersPerSec(200) during (300 seconds)),
admins.inject(constantUsersPerSec(50) during (300 seconds))
Run Code Online (Sandbox Code Playgroud)
在终端是
waiting: 55156 / active: 4842 / done:2
waiting: 13788 / active: 1212 / done:0
Run Code Online (Sandbox Code Playgroud)
很多?它是如何计算的?或者为什么,请向我解释一下。谢谢。
我的电脑:MAC OS 版本:10.12.6(处理器:2.6 GHz Intel Core i5 内存:8 GB 1600 MHz DDR3
constantUsersPerSec() 是关于您注入的用户数量,而不是总用户数量。
constantUsersPerSec(200) during (300 seconds),那是 60k 用户。因此,这与waiting: 55156 / active: 4842 / done:2= 60k 用户匹配。
我认为您真正想要的是使用以下策略注入用户: rampUsers(10) over (300 seconds)
| 归档时间: |
|
| 查看次数: |
7279 次 |
| 最近记录: |