Scala 加特林。ConnectException:连接超时:

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

我是加特林的新手,现在正在其网站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)

}
它最大程度上取决于用户指标:

================================================================================
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 DDR3

constantUsersPerSec()
是关于您正在注入的用户数,而不是总用户数

constantUsersPerSec(200)在(300秒)
,这是60k个用户。因此,这与
等待:55156/活动:4842/完成:2
=60k个用户相匹配


我认为您实际想要的是使用以下策略注入用户:
rampUsers(10)超过(300秒)

恐怕您不理解
constantUsersPerSec
对:
constantUsersPerSec(200)超过(300秒)
意味着200*300=60.000个用户……感谢您的响应,实际上我需要注入该数量的用户以获得2000r/秒,hot做得更好吗?通过恒定用户,2000将从一开始就开始,或者通过渐变,用户数量将逐步增加?可能使用
.throttle()