galting+nmon性能测试二
scala脚本编写详解,自测可以跑通
package simulations
//导入需要的包
import scala.concurrent.duration._
import io.gatling.core.Predef._
import io.gatling.http.Predef._
import io.gatling.jdbc.Predef._
import scala.concurrent.duration._
import scala.util.Random
//定义类,继承Simulation
class o2oboth extends Simulation{
//定义header_1
val headers_1 = Map("Content-Type" -> "application/x-www-form-urlencoded")
//定义httpProtocol,协议类型为http
val httpProtocol = http
//定义baseURL,如果只模拟一个固定baseURL下的场景,可以写上,此处因为baseURL不同,所以设置了空
.baseURL("")
.acceptHeader("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.acceptEncodingHeader("gzip, deflate, sdch")
.acceptLanguageHeader("zh-CN,zh;q=0.8")
.userAgentHeader("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.130 Safari/537.36")
//定义一个object
object o2oSearch{
//从外部csv文件里读取随机参数,默认csv文件放在gatling安装目录下的\user-files\data里
val feeder = csv("o2osearch.csv").random
//定义一个场景,场景名称自定义
val scn=scenario("scnsearch")
//引用外部文件,这里一定不要忘记,否则会报错,而且引用要在exec外部
.feed(feeder)
//执行http操作,http()里面的名称自定义
.exec(http("Search")
//post请求里的地址
.post("https://**.com/carme-es/search/product_list.json")
.headers(headers_1)
//body以String的格式编写,也可以采用.formParam("username", "${username}")形式
.body(StringBody("""{"brand_id":"1","category_id":"${category_id}","client_id":"1","client_token":"1","latitude":"30.314577","longitude":"120.118403","page_no":"{$page_no}","page_size":"${page_size}","series_id":"13","sort_type":"4","store_type":"${sort_type}","timestamp":"2017-01-22 14:30:05","vehicle_type_id":"17322","version":"1.1.0","sign":"${sign}","user_token":"${user_token}"}""")).asJSON
//设置检查点,检查返回值
.check(status.is(200)))
}
//定义另一个object
object o2oRecommond{
val feeder = csv("o2orecommond.csv").random
val scn = scenario("scnrecommand")
.feed(feeder)
.repeat(2){
exec(http("Recommond")
.post("https://**.com/rest/common/recommendStore.json")
.headers(headers_1)
.body(StringBody("""{"client_id":"1","client_token":"1","latitude":"30.304577","longitude":"120.118403","timestamp":"2017-01-22 14:57:24","version":"1.1.0","sign":"${sign}","user_token":"${user_token}"}""")).asJSON
.check(status.is(200)))
}
}
//定义scn和scn1,分别对应不同的场景名称,执行不同的操作
val scn=scenario("scnsearch").exec(o2oSearch.scn)
val scn1=scenario("scnrecommand").exec(o2oRecommond.scn)
//平滑加压
//setUp(scn.inject(rampUsers(100) over(10 seconds))).protocols(httpProtocol)
//定义并发操作场景,不同的场景在steUp()里用逗号隔开,不可有多个setUp()
setUp(scn.inject(atOnceUsers(50)),scn1.inject(atOnceUsers(50))).protocols(httpProtocol)
//每秒并发量从10增加到50,并持续5分钟
//setUp(scn.inject(rampUsersPerSec(10) to 50 during(5 minutes))).protocols(httpProtocol)
}

浙公网安备 33010602011771号