博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ngrinder 压力测试实践(二)groovy 脚本实战
阅读量:6573 次
发布时间:2019-06-24

本文共 3105 字,大约阅读时间需要 10 分钟。

前言

groovy脚本

ngrinder 的 groovy 脚本是顺序结构的,用户可通过编写脚本执行过程中被预置的函数进行用户操作,完成各种复杂的测试工作。

ngrinder 的进程与线程

ngrinder 使用进程和线程来模拟多个用户。例如,如果您设置了如下的测试。只有一个代理将被激活,1个进程将被调用,然后这个进程将包括2个运行线程。每个线程的行为就像1个用户。因此,2个虚拟用户正在运行。如果将代理计数增加到2,则总共有4个虚拟用户(Vusers)。

ngrinder 压力测试实践(二)groovy 脚本实战

并发量=代理数x进程数x线程数

如果在Vuser per agent 中输入总的虚拟用户数时,nGrinder根据内部算法,会进行适当的计算,如输入100,当agent数为1时, 会变成99,该算法可以通过 process_and_thread_policy.js 这个文件来修改。
若果agent 的内存4G以下的话,建议进程不要超过10个,线程数不要超过200.

  • 官方最新测试:4G内存的agent 最多可以模拟4000 虚拟用户。

 

预置函数

依据上面对agent、进程与线程的解释,就比较好理解ngrinder groovy 脚本的

结构了。
控制器将脚本分发给agent,每个agent按照算法启动对应数量的进程,每个进程里在启动对应数量的线程,执行测试任务。

注解 描述 执行次数 用例
@BeforeProcess 在进程被调用之前执行的函数 每进程一次 加载被线程共享的资源文件,定义 公共变量等
@AfterProcess 在进程被终止之前执行该函数 每进程一次 关闭资源文件
@BeforeThread 在每个线程被调用之前执行的函数 每线程一次 登录目标系统,建立线程内的一些值,例如,Cookie 处理
@AfterThread 在每个线程被终止之前执行的函数 每线程一次 退出系统
@Before 每个被 @Test 注解的方法被执行前应执行的函数 同虚拟用户数 每个被 @Test 注解的方法的共享逻辑、变量设置
@After 每个被 @Test 注解的方法被执行后应执行的函数 同虚拟用户数 很少使用
@Test 主测试行为,将被被执行多次 同虚拟用户数 测试体

 

groovy 脚本实例

 

压测实例

/*这个脚本是对需要验签接口的压测*/import static net.grinder.script.Grinder.grinderimport static org.junit.Assert.*import static org.hamcrest.Matchers.*import net.grinder.plugin.http.HTTPRequestimport net.grinder.plugin.http.HTTPPluginControlimport net.grinder.script.GTestimport net.grinder.script.Grinderimport net.grinder.scriptengine.groovy.junit.GrinderRunnerimport net.grinder.scriptengine.groovy.junit.annotation.BeforeProcessimport 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.3import org.junit.Beforeimport org.junit.BeforeClassimport org.junit.Testimport org.junit.runner.RunWithimport java.util.Dateimport java.util.Listimport java.util.ArrayListimport org.slf4j.LoggerFactory; import ch.qos.logback.classic.Level;import HTTPClient.Cookieimport HTTPClient.CookieModuleimport HTTPClient.HTTPResponseimport HTTPClient.NVPairimport java.text.SimpleDateFormat;import org.apache.commons.codec.binary.Base64;import java.security.spec.PKCS8EncodedKeySpec;import java.security.KeyFactory;import java.security.PrivateKey;import java.security.Signature;import java.util.Arrays;import org.apache.commons.lang.StringUtils;import java.lang.StringBuilderimport java.io.UnsupportedEncodingException;/** * 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 admin */@RunWith(GrinderRunner)class TestRunner {    public static GTest test    public static HTTPRequest request    // 定义全局变量    public static NVPair[] params = []    public static Cookie[] cookies = []    public static String private_key    public static String[] contents = []    @BeforeProcess    public static void beforeProcess() {        HTTPPluginControl.getConnectionDefaults().timeout = 6000        test = new GTest(1, "Test1")        request = new HTTPRequest()        // 获取加密私钥内容        contents = new File("./resources/rsa_private_key_pkcs8.pem") as String[]        StringBuilder private_str = new StringBuilder();        for(int i=0;i

转载于:https://blog.51cto.com/13673090/2306627

你可能感兴趣的文章
LINUX 11G RAC ASM磁盘组在线增加磁盘扩容
查看>>
OGG 11g Checkpoint 详解
查看>>
PHP中使用socket通信响应速度慢的原因与解决办法
查看>>
Win7下安装Mysql(解压缩版)
查看>>
react-developer-tools
查看>>
几行c#代码,轻松搞定一个女大学生
查看>>
UVA 11992 Fast Matrix Operations (降维)
查看>>
Asp.net core Identity + identity server + angular 学习笔记 (第一篇)
查看>>
暂时不想读研的几点理由
查看>>
增加临时表空间组Oracle11g单实例
查看>>
Diff Two Arrays
查看>>
浅谈java垃圾回收机制
查看>>
shell脚本学习之for循环
查看>>
stark组件(1):动态生成URL
查看>>
169. Majority Element
查看>>
大整数加法
查看>>
下拉菜单
查看>>
C/C++中extern关键字详解
查看>>
[清华集训2014]玛里苟斯
查看>>
Doctype作用?严格模式与混杂模式如何区分?它们有何意义
查看>>