Scala 加特林。ConnectException:连接超时:
我是加特林的新手,现在正在其网站computer-database.gatling.io上试用加特林 一切正常,我将在几天内为我的工作项目应用负载测试,但有一个问题, 我的网站每秒需要2000个用户(正如我在其他资源上读到的,这对盖特林来说似乎不是什么大问题) 我有一个简单的代码:我想在300秒内加载250个用户/管理员,现在是问题和疑问(请帮助我解决这个问题) 当我启动此脚本时:Scala 加特林。ConnectException:连接超时:,scala,testing,intellij-idea,load,gatling,Scala,Testing,Intellij Idea,Load,Gatling,我是加特林的新手,现在正在其网站computer-database.gatling.io上试用加特林 一切正常,我将在几天内为我的工作项目应用负载测试,但有一个问题, 我的网站每秒需要2000个用户(正如我在其他资源上读到的,这对盖特林来说似乎不是什么大问题) 我有一个简单的代码:我想在300秒内加载250个用户/管理员,现在是问题和疑问(请帮助我解决这个问题) 当我启动此脚本时: package load import io.gatling.core.Predef._ import io.g
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)
}
它最大程度上取决于用户指标:
================================================================================
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
然后出现这样的错误:
[警告]i.g.h.a.ResponseProcessor-请求'Request_4'失败:j.n.ConnectException:连接超时:计算机数据库.gatling.io/35.158.229.206:80
13:31:12.407[警告]i.g.h.a.响应处理器-请求'Request_4'失败:j.n.ConnectException:打开套接字失败
在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
我想这可能与我的问题有关,或者我做错了什么?这是我的问题还是他们的网站无法接受
为什么我要发射
users.inject(constantUsersPerSec(200) during (300 seconds)),
admins.inject(constantUsersPerSec(50) during (300 seconds))
在候机楼
waiting: 55156 / active: 4842 / done:2
waiting: 13788 / active: 1212 / done:0
那么多?如何计算?或者为什么,请给我解释一下。
谢谢
我的电脑:
苹果操作系统
版本:10.12.6(
处理器:2.6 GHz Intel Core i5
内存:8 GB 1600 MHz DDR3constantUsersPerSec()
是关于您正在注入的用户数,而不是总用户数
constantUsersPerSec(200)在(300秒)
,这是60k个用户。因此,这与等待:55156/活动:4842/完成:2
=60k个用户相匹配
我认为您实际想要的是使用以下策略注入用户:
rampUsers(10)超过(300秒)
恐怕您不理解constantUsersPerSec
对:constantUsersPerSec(200)超过(300秒)
意味着200*300=60.000个用户……感谢您的响应,实际上我需要注入该数量的用户以获得2000r/秒,hot做得更好吗?通过恒定用户,2000将从一开始就开始,或者通过渐变,用户数量将逐步增加?可能使用.throttle()
?