【nGrinder】性能压测平台记录文档(2)

Jmeter和nGrinder对比

性能压测工具之前使用的是jmeter,这次说的是nGrinder,先直接搬运两者之间的比较。

创建HTTP压测脚本

第一步:创建压测脚本

另外,如果需要使用json传参的形式,可以将header头中设置成

Content-Type = application/json

第二步:验证脚本,添加断言

复制代码
import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.plugin.http.HTTPRequest
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith
import java.util.Date
import java.util.List
import java.util.ArrayList
import HTTPClient.Cookie
import HTTPClient.CookieModule
import HTTPClient.HTTPResponse
import HTTPClient.NVPair
import groovy.json.JsonSlurper
/**
A simple example using the HTTP plugin that shows the retrieval of a
single page via HTTP. 
This script is automatically generated by ngrinder.
@author Amei
 */
 @RunWith(GrinderRunner)
 class TestRunner {
public static GTest test
public static HTTPRequest request
public static NVPair[] headers = []
public static NVPair[] params = []
public static Cookie[] cookies = []

// 这个方法每个进程只执行一次
@BeforeProcess
public static void beforeProcess() {
 // HTTP请求超时时间,单位毫秒
 HTTPPluginControl.getConnectionDefaults().timeout = 6000
 test = new GTest(1, "lvapi.XXXXXXX.com")
 request = new HTTPRequest()
 // Set header datas
 List<NVPair> headerList = new ArrayList<NVPair>()
 headerList.add(new NVPair("user-agent", "LiveMe/4.3.68 (iPhone; iOS 13.3.1; Scale/3.00)"))
 headerList.add(new NVPair("Content-Type", "application/x-www-form-urlencoded"))
 headerList.add(new NVPair("xd", "e9a061661a7b40056fcb792ff6b047005fa3a638"))
 headerList.add(new NVPair("d", "a3a36e4b25e47ecc47bf8ea611ca230a1acd3c89"))
 headerList.add(new NVPair("t", "1623921491103"))
 headers = headerList.toArray()
 // Set param datas
 List<NVPair> paramList = new ArrayList<NVPair>()
 paramList.add(new NVPair("sig", "ffcbb8e0b9f29d65c9be7e5022220683"))
 paramList.add(new NVPair("tmx_session_id", "6b7cefd0fbe74eab98cc62319c5013d2"))
 paramList.add(new NVPair("token", "XXf86f8d0cfb8ba3ec0c7225aee3d0d223"))
 paramList.add(new NVPair("tongdun_black_box", "4oJq1sjb1abaI9e8QdNQZVRf1pRC3VepVpbtYrmlTtZLXCzU4EYp1pVm2tb92qvR3V3WMqVuOD7jRDZB3tJcRX7cXCyoKsQp3CjU1dep2pNkXCzhTEzkZc7kNrVUKsNjKsbTMGFRPTq8LCJl2oIwIcbPUoIiIdNb2UbaI9e8MTYoMpaoMTQrMDQtMDItN9EqMoIiIdBo1sZf1GVU0WrbI9epMDIvLCJsZXJp0WzkI9e8MouoL9285Q=="))
 paramList.add(new NVPair("tuid", "905575739146371072"))
 paramList.add(new NVPair("tz", "GMT 08:00"))
 paramList.add(new NVPair("uid", "905575739146371072"))
 paramList.add(new NVPair("vid", "16239170244781621879"))
 params = paramList.toArray()
 // Set cookie datas
 List<Cookie> cookieList = new ArrayList<Cookie>()
 cookieList.add(new Cookie("", "", "", "", new Date(32503647599000L), false))
 cookies = cookieList.toArray()
 grinder.logger.info("before process.");
}

// 这个方法每个线程执行一次
@BeforeThread 
public void beforeThread() {
 test.record(this, "test")
 grinder.statistics.delayReports=true;
 grinder.logger.info("before thread.");
}
@Before
public void before() {
 // 设置本次请求头
 request.setHeaders(headers)
 
 // 设置本次请求的 cookies
 cookies.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) }
 
 // 记录日志
 grinder.logger.info("before thread. init headers and cookies");
}

// 在测试停止之前,这个方法将持续执行下去
@Test
public void test(){
 HTTPResponse result = request.POST("https://lvapi.XXXXXXX.com/giftV2/bagGiftList?vercode=4.3.68.2&rel=1&mcc=460&countryCode=CN&mnc=02&cl=zh-Hans-CN&ptvn=2&data=1&ver=4.3.68&os=iOS&cn2=appstore&api=16741140&model=iPhone10%2C3", params)
if (result.statusCode == 301 || result.statusCode == 302) {
    grinder.logger.warn("Warning. The response may not be correct. The response code was {}.", result.statusCode); 
} else {
    assertThat(result.statusCode, is(200));
    def jsonData = new JsonSlurper().parseText(result.text)
    assertThat(jsonData.status, is("200"))

}
}
}

2021-06-17 06:09:02,041 INFO  The Grinder version 3.9.1
2021-06-17 06:09:02,043 INFO  Java(TM) SE Runtime Environment 1.8.0_291-b10: Java HotSpot(TM) 64-Bit Server VM (25.291-b10, mixed mode) on Linux amd64 3.10.0-1127.el7.x86_64
2021-06-17 06:09:02,044 INFO  time zone is EDT (-0400)
2021-06-17 06:09:02,070 INFO  worker process 0 of agent number 0
2021-06-17 06:09:02,077 INFO  Instrumentation agents: byte code transforming instrumenter for Java; byte code transforming instrumenter for Java
2021-06-17 06:09:02,473 INFO  registered plug-in net.grinder.plugin.http.HTTPPlugin
2021-06-17 06:09:02,485 INFO  before process.
2021-06-17 06:09:02,486 INFO  Running "bagGiftList.groovy" using GroovyScriptEngine running with groovy version: 2.2.1
2021-06-17 06:09:02,512 INFO  before thread.
2021-06-17 06:09:02,512 INFO  starting, will do 1 run
2021-06-17 06:09:02,512 INFO  Start time is 1623924542512 ms since Epoch
2021-06-17 06:09:02,521 INFO  before thread. init headers and cookies
2021-06-17 06:09:04,373 INFO  https://lvapi.XXXXXX.com/giftV2/bagGiftList?vercode=4.3.68.2&rel=1&mcc=460&countryCode=CN&mnc=02&cl=zh-Hans-CN&ptvn=2&data=1&ver=4.3.68&os=iOS&cn2=appstore&api=16741140&model=iPhone10,3 -> 200 OK, 67 bytes
2021-06-17 06:09:04,380 INFO  finished 1 run
2021-06-17 06:09:04,380 INFO  elapsed time is 1868 ms
2021-06-17 06:09:04,381 INFO  Final statistics for this process:
2021-06-17 06:09:04,383 INFO  
             Tests        Errors       Mean Test    Test Time    TPS          Mean         Response     Response     Mean time to Mean time to Mean time to 
                                       Time (ms)    Standard                  response     bytes per    errors       resolve host establish    first byte   
                                                    Deviation                 length       second                                 connection                
                                                    (ms)                                                                                                    

Test 1       1            0            1857.00      0.00         0.54         67.00        35.87        0            54.00        327.00       1844.00       "lvapi.aaalive.com"

Totals       1            0            1857.00      0.00         0.54         67.00        35.87        0            54.00        327.00       1844.00      

  Tests resulting in error only contribute to the Errors column.          
  Statistics for individual tests can be found in the data file, including
  (possibly incomplete) statistics for erroneous tests. Composite tests   
  are marked with () and not included in the totals.                      



2021-06-17 06:09:02,488 INFO  validation-0: Starting threads
2021-06-17 06:09:04,383 INFO  validation-0: Finished
脚本装饰器讲解

本地脚本调试

IntelliJ IDEA安装包下载地址:https://www.jetbrains.com/idea/download/#section=mac

注:如果报错:The subversion command line tools are no longer provided by Xcode,请看文档后面的FQA

FQA

1.报错:The subversion command line tools are no longer provided by Xcode.

参见解决方案:https://blog.csdn.net/wueasy/article/details/105304818

➜ ssh_google svn --version

svn: error: Failed to locate 'svn'.

svn: error: The subversion command line tools are no longer provided by Xcode.

ssh_google brew install svn

相关参考资料

nGrinder框架简介

nGrinder 架构简介_ngrinder3.4 多场景test-CSDN博客

使用手册

https://github.com/naver/ngrinder/wiki

脚本指南

nGrinder 的 Groovy 脚本使用指南(Groovy 脚本结构)_ngrinder3.5 groovy-CSDN博客

Script Gallery

nGrinder - Groovy 脚本指南 · 测试之家

nGrinder 改造 - 在详细报告里增加更多统计项 · 测试之家

nGrinder-Groovy脚本参数化方式收集 - 简书

HTTP 请求详解

nGrinder 的 Groovy 脚本使用指南(HTTP 请求详解)_ngrinder设置思考时间-CSDN博客

相关推荐
惜.己2 小时前
使用python读取json数据,简单的处理成元组数组
开发语言·python·测试工具·json
baynk13 小时前
wireshark的常用用法
网络·测试工具·wireshark·ctf
维度软件库13 小时前
集中打印和转换Office 批量打印精灵:Word/Excel/PDF 全兼容,效率翻倍
测试工具·电脑·开源软件
惟余惟余16 小时前
openEuler系统串口文件手法压力测试及脚本使用说明
压力测试
m0_597345312 天前
APP测试之Monkey压力测试
android·压力测试·app测试·回归测试·稳定性测试·monkey测试
测试老哥2 天前
Jmeter+ant+jenkins接口自动化测试框架
自动化测试·软件测试·python·测试工具·jmeter·jenkins·压力测试
技术猿188702783512 天前
实现“micro 关键字搜索全覆盖商品”并通过 API 接口提供实时数据(一个方法)
开发语言·网络·python·深度学习·测试工具
计算机毕设定制辅导-无忧学长4 天前
Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(一
网络·测试工具·wireshark
有谁看见我的剑了?4 天前
iperf3 网络带宽测试工具学习
学习·测试工具
q567315234 天前
Selenium动态网页爬虫编写与解释
爬虫·selenium·测试工具