关于jmeter:JMeter-如何快速实现-gRPC-接口请求

JMeter 是一个弱小的开源工具,因其在软件开发畛域内提供性能和压力测试的能力而受到赞美。它因兼容 gRPC 服务而展现出其多功能性,感激可取得的插件,这进一步加强了其实用性。 应用 JMeter 进行 gRPC 测试的起步筹备阶段为了充分发挥 JMeter 对 gRPC 测试的后劲,首先须要正确设置环境。这包含下载根底的 JMeter,而后集成要害的 gRPC 插件,一个旨在将 JMeter 与 gRPC 性能联合的工具。此插件应被搁置在JMeter装置文件夹的lib/ext目录下,以保障无缝操作。 将插件搁置到指定地位为测试过程做好了筹备: 启动测试之旅装置实现后,启动 JMeter 就揭开了测试之旅的尾声。通过右键 -> 增加 -> 取样器 -> GRPC 申请创立一个新的线程组,为 gRPC 测试设置打下了根底。 在此阶段,精确填写以下必要信息至关重要: 服务器名称或 IP:服务器的端点。端口号:用于连贯的指定端口。SSL/TLS:是否须要 SSL/TLS 认证。Proto 根目录:proto 文件的地位。库目录(可选) :任何辅助库的寄存地位。残缺办法:要调用的确切服务和办法。元数据:须要的 token,特定格局为 key1:value1,key2:value2。截止工夫:指定的超时限度。随申请发送 JSON 格局数据:是否偏好 JSON 格局的申请。通过粗疏的设置和关注细节,JMeter 作为测试 gRPC 服务的严格平台,确保软件可能优雅地解决事实世界的压力。 总结装备了 gRPC 插件的 JMeter,从传统的负载测试工具转变为一个全面的解决方案,用于在各种条件下评估 gRPC 服务。这种共生关系不仅扩充了 JMeter 的适用范围,还为开发人员和测试者提供了进行彻底、事实压力测试的伎俩。从装置到为特定 gRPC 调用进行具体配置的过程,涵盖了一系列设置,容许对测试进行粗疏的方法论探讨。

February 27, 2024 · 1 min · jiezi

关于jmeter:软件测试JMeter常用配置元件剖析

引言性能测试是确保应用程序可能在不同负载条件下失常运行的关键步骤之一。Apache JMeter是一个弱小的开源工具,用于执行各种性能测试,包含负载测试、压力测试、功能测试等。在JMeter中,配置元件是性能测试场景中的重要组成部分,本文将深入探讨JMeter中一些罕用的配置元件,以帮忙初学者更好地了解和应用这一工具。 1. 线程组(Thread Group) 在JMeter中,线程组是测试场景的终点,它定义了测试中要模仿的用户并发数量、循环次数等。初学者须要理解如何正确配置线程组,以达到模仿实在用户行为的目标。 配置要点: 线程数(Number of Threads):定义并发用户的数量。循环次数(Loop Count):指定每个用户线程执行测试计划的次数。2. 配置元件(Config Element) 配置元件用于配置线程组的行为,影响所有线程。以下是一些罕用的配置元件: 2.1 CSV数据文件配置器(CSV Data Set Config) CSV数据文件配置器容许从内部文件中读取数据,将其利用于测试中的每个线程。这对于模仿具备不同输出的用户十分有用。 配置要点: Filename:CSV文件门路。Variable Names:定义CSV文件中的列名。2.2 HTTP申请默认值(HTTP Request Defaults) HTTP申请默认值容许在整个测试计划中共享默认的HTTP申请属性,缩小冗余配置。这是进步测试计划可维护性的重要工具。 配置要点: Server Name or IP:指定被测利用的服务器名称或IP地址。Path:定义申请的门路。3. 监控元件(Listener) 监控元件用于收集和展现测试后果。初学者须要理解不同的监控元件,以便无效地剖析性能测试数据。 3.1 查看后果树(View Results Tree) 查看后果树是一个实时监控和调试工具,用于查看每个申请的详细信息和响应。在调试测试计划时,这是一个十分有用的元件。 3.2 汇总报告(Summary Report) 汇总报告提供了对测试执行后果的汇总信息,包含总申请数、谬误数、均匀响应工夫等。这对于评估整体性能十分有帮忙。 总结JMeter的配置元件是性能测试过程中的要害组成部分,正确的配置能够使测试计划更具可维护性和可扩展性。初学者通过深刻了解线程组、配置元件和监控元件,将可能更好地利用JMeter进行无效的性能测试。心愿本文对初学者在学习JMeter时有所帮忙,更多详细信息可查阅JMeter官网文档。

February 21, 2024 · 1 min · jiezi

关于jmeter:软件测试JMeter-断言元件优化性能测试结果验证的得力工具

引言在进行性能测试时,验证响应后果的准确性是至关重要的。JMeter 提供了弱小的断言元件,使得测试人员可能在测试执行期间对申请的响应进行验证。本文将深入探讨 JMeter 断言元件的应用,为初学者提供实用的常识和实际领导。 什么是JMeter断言?在性能测试中,断言用于验证服务器响应是否合乎预期。JMeter 断言元件能够在每个取样器后增加,以查看响应的内容、响应代码、响应工夫等是否满足预期条件。断言的应用可能无效地辨认潜在的问题,并进步测试脚本的可靠性。 常见的JMeter断言类型响应断言(Response Assertion)响应断言是最罕用的断言类型之一。它容许测试人员定义字符串模式,用于匹配响应中的内容。如果响应中蕴含了不合乎预期的内容,响应断言将标记该申请为失败。 HTML断言(HTML Assertion)HTML 断言用于验证响应是否蕴含了正确的 HTML 格局。它可能查看 HTML 标签、属性等,确保响应的构造正确。 响应头断言(Response Headers Assertion)响应头断言用于验证响应的头部信息是否合乎预期。测试人员能够定义冀望的头部信息,如Content-Type、Content-Encoding等。 XML断言(XML Assertion)XML 断言用于验证响应是否合乎预期的 XML 构造。这对于测试蕴含 XML 数据的接口十分有用。 断言响应码(Response Code Assertion)断言响应码用于查看申请的响应码是否合乎预期。如果响应码与冀望的不统一,断言将标记申请为失败。 如何应用JMeter断言元件?步骤一:创立测试计划 在 JMeter 中,首先须要创立一个测试计划。这是整个性能测试的顶层构造,蕴含了所有的测试组件。 步骤二:增加线程组和取样器 在测试计划中增加线程组和取样器,定义并发用户的数量和测试场景。抉择适当的取样器,如 HTTP 申请取样器。 步骤三:增加断言元件 在每个取样器下方,右键抉择 "Add" -> "Assertions",而后抉择适合的断言元件类型。依据须要能够增加多个断言元件。 步骤四:配置断言参数 每个断言元件都有相应的配置参数,例如响应断言须要设置冀望的字符串模式。依据理论需要配置这些参数,确保断言元件可能正确验证响应。 步骤五:运行测试 配置实现后,运行测试计划。察看 JMeter 的测试后果,查看断言元件的后果。如果断言失败,将会在测试后果中显示详细信息。 JMeter断言元件的优化技巧正当抉择断言类型: 依据测试需要,抉择适合的断言类型。不同的场景可能须要应用不同的断言元件。应用多个断言: 在一个取样器下增加多个断言,以减少验证的准确性。例如,能够同时应用响应断言和响应头断言。灵便应用断言模式: 在响应断言中,能够应用含糊匹配、正则表达式等灵便的模式,以适应不同的状况。联合逻辑控制器应用: 能够联合逻辑控制器,依据不同的条件选择性地启用或禁用断言元件,使测试更加灵便。总结JMeter 断言元件是性能测试中必不可少的工具,通过验证响应后果的准确性,帮忙测试人员发现潜在的问题。初学者在应用 JMeter 断言元件时,应重视抉择适合的断言类型、把握配置参数,并通过理论运行测试计划来深刻了解断言的作用。 通过学习和实际 JMeter 断言元件的应用,初学者将可能更好地把握性能测试的基本原理和实际操作,为我的项目的性能优化提供无力反对。在一直的实际中,初学者将逐步相熟断言元件的灵活运用,进步对系统性能的剖析能力。

February 21, 2024 · 1 min · jiezi

关于jmeter:手把手教程在-Mac-电脑上快速安装-JMeter

Apache JMeter 是一个开源的负载测试工具,能够用于测试动态和动静资源,确定服务器的性能和稳定性。在本文中,咱们将探讨如何下载和装置 JMeter。 装置 Java(已装置 Java 的此步骤可跳过) 要装置 Java,请按一下步骤: 关上 Java 官网下载网站抉择您想要下载的 Java 版本,下载以 .dmg 结尾的安装包,留神 JMeter 须要 Java 8+下载后关上安装包点击“装置”按钮即可下载 JMeter 要下载 JMeter,请遵循以下步骤: 关上 Apache JMeter 官网下载网站 。在 "Binaries" 下拉菜单中,抉择您想要下载的 JMeter 版本,能够抉择 zip 或 tgz 格局。点击下载按钮,期待下载实现。装置 JMeter 装置 JMeter 很简略,只需依照以下步骤操作: 解压下载的 JMeter 压缩文件。将解压缩后的文件夹挪动到您想要装置 JMeter 的地位。进入解压缩后的文件夹,并找到 bin 目录。在 bin 目录中,双击 jmeter 或运行 "./jmeter.sh" 文件,启动 JMeter。扩大浏览JMeter 响应断言详解:如何应用响应断言验证测试后果JMeter 中文版装置及入门指南

September 22, 2023 · 1 min · jiezi

关于jmeter:fastapiuvicorn-压测并发与TCP队列qbit

前言技术栈 操作系统 Ubuntu 20.04内核版本 Linux version 5.4.0-155-genericPython 3.11fastapi 0.99.1uvicorn 0.23.2uvicorn 监听端口 8003用 jmeter 压测 fastapi/uvicorn 接口程序,大量报错: java.net.SocketException: Connection resetorg.apache.http.NoHttpResponseException: ... failed to respond服务器 cpu 和内存应用都不高,揣测是 tcp 连贯队列的问题 解决步骤查看 tcp 连接数 ss -natp '( sport = :8003 )' | awk '{count[$1]++} END {for (word in count) print word, count[word]}'查看应用程序 uvicorn 的 TCP 全连贯队列大小 # ss -nltp '( sport = :8003 )'State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 2048 0.0.0.0:8003 0.0.0.0:* users:(("uvicorn",pid=172724,fd=14))这里的 Send-Q 就是全连贯队列大小,与 uvicorn 文档外面 backlog 2048 的默认值是对得上的 ...

September 5, 2023 · 1 min · jiezi

关于jmeter:Jmeter压测实战Jmeter二次开发之自定义函数-京东云技术团队

1 前言Jmeter是Apache基金会下的一款利用场景十分广的压力测试工具,具备轻量、高扩展性、分布式等个性。Jmeter已反对实现随机数、计数器、工夫戳、大小写转换、属性校验等多种函数,方便使用人员应用。如果在应用过程中存在和业务强耦合的罕用性能函数,在Jmeter不反对的状况下,那就须要独自开发自定义函数实现特定性能。 本文介绍如何开发Jmeter自定义函数实现疾速生成京东宙斯下单规范sign,同时深刻理解Jmeter的插件化机制及高扩展性个性。 2 开发筹备Java根底开发Maven根本应用开发依赖版本 JDK 1.8.0Maven 3.6.3Jmeter 5.4.33 自定义函数外围实现3.1 新建我的项目新建maven我的项目,这里我的项目名为:JSF_Sampler因为是基于Jmeter的扩大,须要依赖包Jmeter两个外围包,别离是:ApacheJMeter_coreApacheJMeter_javaApacehJMeter_functionspom.xml文件外围配置如下 <groupId>com.jd.jmeter.jsf</groupId><artifactId>JSF_Sampler</artifactId><version>1.0-SNAPSHOT</version><properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <jmeter-version>5.4.3</jmeter-version></properties><dependencies> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>${jmeter-version}</version> </dependency> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_java</artifactId> <version>${jmeter-version}</version> </dependency> <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_functions</artifactId> <version>${jmeter-version}</version> </dependency> </dependencies>3.2 继承实现AbstractFunction类实现类顺次实现以下几个步骤 1)新建实现类并继承 AbstractFunction 留神:实现类的包名必须蕴含xxx.functions.xxx,Jmeter应用命名规定实现实现类的加载。2)重写以下办法,每个办法的用处见下方代码正文 execute()setParameters()getReferenceKey()getArgumentDesc() /** * 京东宙斯 下单规范字段常量 */ private static final String APP_KEY = "app_key"; private static final String APP_SECRET = "app_secret"; private static final String ACCESS_TOKEN = "access_token"; private static final String TIMESTAMP = "timestamp"; private static final String V = "v"; private static final String METHOD = "method"; private static final String BUY_PARAM_JSON = "360buy_param_json"; /** * Jmeter中自定义的函数名,在Jmeter的函数助手中能够看到 */ private static final String FUNC_NAME = "__GenSignFunction"; /** * 自定义函数的形容,入参,出参,方便使用人员参考应用 */ private static final List<String> desc = new ArrayList<>(); static { desc.add("This function is used to generate the JD's JOS sign value"); } /** * 此为自定义函数外围实现类,其中,入参SampleResult为上次运行的后果,Sampler为以后的采集器; * 返回值为该函数的返回值 * @param sampleResult * @param sampler * @return * @throws InvalidVariableException */ @Override public String execute(SampleResult sampleResult, Sampler sampler) throws InvalidVariableException { // 入参解决 String param = String.valueOf((CompoundVariable)paramValues[0]); String signResult = paramHandler(param); return signResult; } /** * 按京东宙斯sign加密规定生成规范sign * @param param * @return */ public String paramHandler(String param){ Map<String,String> valueMap = new HashMap(); // 按&符号宰割 String[] paramArray = param.split("&"); for (int i = 0; i < paramArray.length-1; i++) { String key = paramArray[i].split("=")[0]; String value = paramArray[i].split("=")[1]; valueMap.put(key,value); }; // 京东宙斯规范sign String josGign = EncryptUtil.getSignature(valueMap.get("app_secret")+BUY_PARAM_JSON+valueMap.get("360buy_param_json") +ACCESS_TOKEN+valueMap.get("access_token") +APP_KEY+valueMap.get("app_key") +METHOD+valueMap.get("method") +TIMESTAMP+valueMap.get("timestamp") +V+valueMap.get("v") +valueMap.get("app_secret")); return josGign; }/*** 配置入参,jmeter函数助手入参*/ @Override public void setParameters(Collection<CompoundVariable> collection) throws InvalidVariableException { paramValues = collection.toArray(); }/*** 此办法返回自定义的函数名称*/ @Override public String getReferenceKey() { return FUNC_NAME; }/*** 此办法返回函数形容信息*/ @Override public List<String> getArgumentDesc() { return desc; }3.3 最终我的项目构造 ...

July 3, 2023 · 2 min · jiezi

关于jmeter:JMeter-初学者入门指南如何正确启动-JMeter

Apache JMeter 的启动办法Apache JMeter 是一个开源的性能测试工具,常被用来测试动态和动静资源以确定服务器的性能和稳定性。本文将介绍启动 JMeter 的办法。 Windows 零碎如果你曾经配置好 Java 环境,启动 JMeter 能够间接在 bin 目录下关上 ApacheJMeter.jar 文件。 你也能够通过关上 bin 目录下的 jmeter.bat 文件来启动 JMeter。 值得注意的是,在关上 JMeter 的同时,会主动关上一个运行 JMeter 的命令行窗口。请不要敞开这个窗口,否则会将 JMeter 也敞开掉。 Mac 和 Linux 零碎在终端中输出以下命令即可启动 JMeter: sh /path/to/jmeter/bin/jmeter.sh更加快捷的启动形式是,间接在终端中输出 jmeter 命令。你须要进行以下配置: 在 ~/.bashrc 文件中增加以下内容:<!----> export JMETER_HOME=/path/to/jmeter export PATH=$JMETER_HOME/bin:$PATH请将 JMETER_HOME 替换为理论的 Apache JMeter 所在目录。 如果你应用的是 zsh 终端,你须要批改 ~/.zshrc 文件,并增加与上述内容雷同的配置。 让终端配置失效:<!----> source ~/.bashrc或者在 zsh 终端中输出: source ~/.zshrc尝试一下吧,你会胜利启动 JMeter! 常识扩大学习更多对于 Jmeter 相干应用技巧。 Meter 如何配置环境变量 Meter 测试脚本编写技巧

June 9, 2023 · 1 min · jiezi

关于jmeter:jmeter-内置函数整理

jmeter 内置函数整顿明天在做加密的时候,发现jmeter 的MD5 函数在某些场景下竟然不能用,而后发现还有其余函数可代替,萌发了要整顿一下jmeter内置的函数,所有有了这篇文章,当为本人开辟下思路吧!!!函数函数阐明参数阐明应用场景案例${__base64Decode(,)}base64解码1、base64加密参数 2、须要保留的变量解密场景${__base64Decode(MTIzMjE0MTI0,)}${__base64Encode(,)}base64编码1、明文参数2、保留的变量加密场景${__base64Encode(string,)}${__BeanShell(,)}beanshell sampler 的长期代替计划1、beanshell 内容,特殊符号须要转意2、保留的变量变量较小时候的代替${__BeanShell(vars.put("yytest"\,"${__Random(1000,5555)}"),)} | ${__caseFormat(,,)} | 前面的版本删除了这个函数,看源码也没找到 || | |

April 12, 2023 · 1 min · jiezi

关于jmeter:Jmeter使用文档循环怎么用

Jmeter应用文档(循环怎么用)根底用法批改语言 Jmeter之界面语言设置上面应用简体中文的命名进行阐明关上日志 启动后,右上角有个黄色的感叹号图标,点击即可关上即时日志如果没有看到重启下jmeter,局部操作(如长期批改语言)可能导致图标隐没界面模式================================================================================Don't use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI): jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]& increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch fileCheck : https://jmeter.apache.org/usermanual/best-practices.html================================================================================GUI模式:关上jmeter时,能够看到控制台打印了下面这段文字 GUI指客户端界面能够看到外面提醒不要应用GUI进行测试只有在创立和调试的时候应用CLI模式:即非GUI模式 jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]新建一个文件夹,按住"shift",点击右键,能够看到"在此处关上Powershell窗口" ...

March 3, 2023 · 2 min · jiezi

关于jmeter:使用JMeter的条件安装Java

首先下载JMeter,网址:https://jmeter.apache.org/dow...下载Binaries版,即可执行版,已编译好,下载解压就能够用。Source版是源代码版,须要本人编译成可执行文件。tgz压缩格局用于unix零碎。Windows零碎中用WinRAR也能解压tgz.双击 /bin/jmeter.bat,关上GUI mode来设计脚本。如果设计实现后,跑压力测试,要用Non-GUI mode.如果没有装置JAVA,在运行jmeter.bat后,会提醒 Not able to find Java executable or version.Please check your Java installation.按JMeter官网的阐明,起码要装置JRE,但最好装置JDK,因为用到JDK中的keytool。JMeter is compatible with Java 8 or higher. We highly advise you to install latest minor version of your major version for security and performance reasons.Because JMeter uses only standard Java APIs, please do not file bug reports if your JRE fails to run JMeter because of JRE implementation issues.Although you can use a JRE, it is better to install a JDK as for recording of HTTPS, JMeter needs keytool utility from JDK.那么keytool是什么呢?网络上的文章有写到: keytool 是 JDK 自带的一个密钥库管理工具。这里只用到了 keytool 的局部性能,包含生成密钥对,导出公钥等。keytool 生成的公钥/私钥对寄存到一个到了一个文件中,这个文件有密码保护,通称为 keystore。所以,应该是为了HTTPS协定所用。那么怎么下载JRE,或JDK呢?JRE,叫Java运行时环境,当初间接Java8,包含JVM+Java SE外围类库。JDK,叫Java开发工具包,包含 JRE+Java开发工具(java,javac,javadoc,...)JDK,又分为Java EE(企业版),Java SE(标准版),Java ME(小型版)。 按文章https://blog.csdn.net/wangpai...上所讲,JRE当初被蕴含JDK中,个别也不再独自下载。而Java EE曾经融入Java企业框架。Java ME曾经被放弃。当初的下载Java SE,与下载JDK,或者下载Java,都是同义词。OpenJDK,是指开源的JDK。 但在Java官网下载时,发现下载Java时,仍是JRE;而下载Java SE开发工具包,才是下载JDK。如果只装置JRE,没有keytool,那通过JMeter测试HTTPS接口会如何?应用HTTPS协定,就会返回location.replace(location.href.replace("https://","http://"));JMeter2.13时,返回的字符,最多承受204800JMeter5.5时,View Results Tree在后果之间切换时,会卡顿。JMeter4,能应用5.5创立的脚本,而且没有卡顿景象。装置JDK后,报错 Error occurred during initialization of boot layer ...Module java.activation not found开始认为是因为JRE和JDK一起装置的起因,但卸载了JRE,仍是报这个,起初百度,说是因为JMeter4太旧。换了JMeter5.0,能启动,也没有卡顿。但仍是不能应用HTTPS。起初查问,要应用HTTPS,要导入接口网站证书。这个证书须要应用keytool转化为store格局。参考文档如下:https://www.cnblogs.com/benpa...

October 28, 2022 · 1 min · jiezi

关于jmeter:Jemter压测工具安装使用总结

下载和装置配置JDK步骤一:1、下载 jdk,到官网下载 jdk,地址:www.oracle.com/technetwork/java/jav...2、装置 jdk,下载实现后,双击装置 步骤二:配置 jdk 环境变量右键计算机属性 -> 高级零碎设置 -> 零碎属性 -> 高级 -> 环境变量 -> 增加如下的零碎变量:变量名:【JAVA_HOME】变量值:【D:\Program Files\Java\jdk1.8.0_92】【jdk 装置门路】变量名:【path】变量值:【;% JAVA_HOME%\bin;】变量名:【CLASSPATH】变量值:【.;% JAVA_HOME%\lib\dt.jar;% JAVA_HOME%\lib\tools.jar;】 步骤三:在 cmd 中输出 java -version,查看是否显示 jdk 信息,确定是否装置胜利 下载安装下载地址:Apache JMeter - Download Apache JMeter 环境变量【变量名】JMETER_HOME【变量值】D:\Program Files\jmeter\apache-jmeter-5.5(jmeter 解压门路)【变量名】CLASSPATH【变量值】% JMETER_HOME\lib\ext\ApacheJMeter_core.jar;% JMETER_HOME%\lib\jorphan.jar;% JMETER_HOME%\lib\logkit-2.0.jar; 用法创立线程打算和线程组 设置线程数 模仿HTTP申请 HTTP信息头管理器抉择线程组:右键-->增加-->配置元件-->HTTP信息头管理器 导入CSV文件 提取Json增加json提取器:右键http申请-》增加-》后置处理器-》json提取器 查看提取后果——调试取样器:course_id=63 援用提取进去的参数:${courses_id} Json断言 常见问题1.org.apache.http.conn.HttpHostConnectExceptionHTTP申请 > 高级 > 实现:改为java https://blog.csdn.net/R_miss/... 2.TCP申请长时间无反馈起因:没有设置完结字符 解决办法:行尾(EOL)字节值设为125(“}”的ASCII码) ...

October 22, 2022 · 1 min · jiezi

关于jmeter:使用-jMeter-对-SAP-Spartacus-进行并发性能测试

Spartacus是一个基于 Angular 的店面,是为SAP Hybris Commerce/ SAP Commerce Cloud设计的。它应用REST API与Hybris Commerce交互。在初始阶段,它就提供了Hybris店面的大部分外围性能。Spartacus 是可扩大和可定制的。 Spartacus有一个解耦的架构,这意味着店面自身作为一个独立的实体,在它的OOTB个性之上能够有自定义个性。它通过REST API与SAP Commerce Cloud或任何其余SAP、非SAP工具进行交互,这使它成为一个独立的框架。它容许前端开发人员不再了解后端技术,他们所须要的惟一交互是通过web服务层,这使得开发、测试和部署单个平台更加容易。 咱们能够真正应用快捷的UI,即服务器端渲染和提早加载组件等。因为它不再是平台的一部分,所以能够独自部署,容许它独自扩大。 在Angular中,每个性能都作为一个独自的模块存在。如果在SmartEdit或CMS Cockpit中创立了一个新页面,你须要在Angular代码库中创立一个独自的站点页面。 2021 年国庆节期间的成绩。过后用的版本是 5.4.1: 启动之后间接报错: ERROR StatusLogger Log4j2 could not find a logging implementation. Please add log4j-core to the classpath. Using SimpleLogger to log to the console... 换成 5.5 版本,关上文件报错: Problem loading XML from:'C:\Code\jmeter-projects\jerry-static\ssr\JerryStaticPagesTestPlan.jmx'. Cause:CannotResolveClassException: com.blazemeter.jmeter.RandomCSVDataSetConfigDetail:com.thoughtworks.xstream.converters.ConversionException: ---- Debugging information ----cause-exception : com.thoughtworks.xstream.converters.ConversionExceptioncause-message : first-jmeter-class : org.apache.jmeter.save.converters.HashTreeConverter.unmarshal(HashTreeConverter.java:66)class : org.apache.jmeter.save.ScriptWrapperrequired-type : org.apache.jmeter.save.ScriptWrapperconverter-type : org.apache.jmeter.save.ScriptWrapperConverterpath : /jmeterTestPlan/hashTree/hashTree/hashTree[5]/hashTree[3]/com.blazemeter.jmeter.RandomCSVDataSetConfigline number : 258version : 5.5 ...

July 2, 2022 · 1 min · jiezi

关于jmeter:如何在容器中使用jmeter做压测

为什么会有这样的需要,我也不晓得,没有需要就发明需要呗,间接开整: 首先上docker.hub上看看有没有现成的,关键字 alpine/jmeter ,一搜寻果然有: entrypoint.sh内容看不到,后面PATH曾经配置好,应该是间接执行的jmeter程序。先执行下试试: docker run -v /tmp/:/tmp/ alpine/jmeter:5.4.3 -n -t /tmp/test.jmx在服务器/tmp目录上先放上事后筹备好的测试计划文件(能够从jmeter的桌面ui版配置好后导出),-t参数指向这个打算文件,就能够运行起来了: summary + 5913 in 00:00:32 = 184.3/s Avg: 1287 Min: 74 Max: 7110 Err: 0 (0.00%) Active: 300 Started: 300 Finished: 0summary = 10128 in 00:01:01 = 166.0/s Avg: 1427 Min: 74 Max: 7110 Err: 0 (0.00%)summary + 98 in 00:00:58 = 1.7/s Avg: 31453 Min: 69 Max: 63303 Err: 0 (0.00%) Active: 298 Started: 300 Finished: 2summary = 10226 in 00:01:59 = 85.6/s Avg: 1714 Min: 69 Max: 63303 Err: 0 (0.00%)很不便很间接,如果要生成测试报告,也能够在命令前面带上 -l /tmp/result.jtl 或者是同时生成html页面报告文件 -l /tmp/result.jtl -e -o /tmp/jmeter ,而后用nginx指向上这个 tmp/jmeter ,就能够页面查看执行报告了: ...

July 1, 2022 · 2 min · jiezi

关于jmeter:使用-jMeter-对需要-User-Authentication-的-Restful-API-进行并发负载测试

在 SAP 官网 api.sap.com 里有大量公布的 Restful API,不便合作伙伴和客户自开发利用同SAP解决方案进行集成。 比方笔者最近做的一个我的项目,就是和国内一家专一于提供人脸识别技术解决方案的企业单干, 用户通过微信扫码从而实现人脸识别后,在用户受权的状况下,会调用SAP Marketing Cloud的contact API,生成对应的contact数据,并且将人脸识别得出的面部特色码通过Marketing Cloud扩大字段的形式一并存入contact数据中。 因为这个我的项目最初会在上海举办的 SAP 云大会上展现,所以过后笔者实现集成工作后心想,还是得提前测试一下咱们的 Marketing Cloud 在响应并发申请时的性能, 做到心里有数。 咱们在 SAP 上海云大会上演示的场景是,将 SAP Marketing Cloud的 Launchpad 通过大屏幕投影进去,参会嘉宾实现人脸识别后,Marketing Cloud contact创立API主动被调用,在系统生成contact数据,并且Launchpad contact tile的计数器加一。 所以下一步就是如何模仿大量对Marketing Cloud API的并发申请。 对于程序员来说,最容易想到的形式就是本人入手写一个程序来发送大量申请。笔者抉择的最简略的编程形式,在Java程序里新建大量线程,每个线程发送一个申请,当然也能够间接用JDK里提供的线程池库。 除了本人入手编写代码外,还能够重用一些API测试工具来达到同样的目标。Postman是一个API开发人员罕用的接口调试利器,它也有定义变量和繁难的编程性能: 能够通过称之为Collection Runner的性能,一键运行Collection里的多个申请。 笔者在这篇 SAP 社区博客里具体介绍过 Postman 的编程: Just a single click to test SAP OData Service which needs CSRF token validation 笔者在 成都 C4C开发团队时,组内共事就通知过我,jMeter 是另一个功能强大的基于Java的API压力测试工具。所以本文我抉择用jMeter来对API做压力测试。 下文介绍的内容须要大家对jMeter的应用有最根本的理解,如果还不太熟悉的敌人,能够先查阅jMeter的官网文档。 总的思路就是应用jMeter提供的Thread Group(线程组)和控制器这两个工具。Thread Group帮忙工具使用者实现了通过多线程发送HTTP申请的性能,比方下图设定的100,意思是通过100个线程同时发送申请。 ...

May 15, 2022 · 1 min · jiezi

关于jmeter:Jmeter压测MQTT结果分析

前言为了练习应用Jmeter压测MQTT,在内网环境搭建了EMQ v4.4。整个环境应用了6台PC,CPU是雷同型号,EMQ服务器和控制机采纳8G内存,负载机4G内存。EMQ服务器和负载机均为CentOS7.9。 负载机环境指标数值CPUIntel(R) Core(TM) i7-4770 CPU @ 3.40GHz内核4核8线程内存4GB零碎CentOS Linux release 7.9.2009 (Core)JDKopenjdk version "1.8.0_322"Jmeter5.4.3场景设计继续压测10分钟,公布音讯配置高斯随机定时器,4-8毫秒。由4台压测机发动申请。别离设置,线程数别离配置1000、2000、3000、4000、5000。 后果线程数申请数谬误数TPS最大响应工夫90%响应工夫1000 * 49627201016039.29830.002000 * 45797827101709659.73169370.003000 * 4628073818073510479.411820951.004000 * 433009901978695468.662878391.005000 * 41932047547283224.3748624587.00剖析在https://jmeter.apache.org/use...有阐明,对于Jmeter线程数的限度。原文摘录如下: A single JMeter client running on a 2-3 GHz CPU (recent CPU) can handle 1000-2000 threads depending on the type of test.2-3GHz的CPU,能反对1000-2000线程。而测试后果也映证了这一点。在压测过程中,负载机的内存使用率在70%-75%左右,然而CPU都爆满。

April 21, 2022 · 1 min · jiezi

关于jmeter:JMeter-测试组件介绍-物联网大并发测试实战-02

在本系列文章的上一篇中,咱们介绍了开源测试工具 JMeter,并以一个简略的HTTP测试为例一窥JMeter的能力。在本篇文章中,咱们将进一步介绍JMeter丰盛的组件,以帮忙大家构建简单场景的测试脚本。 JMeter的测试脚本在界面中以「树」的模式出现,保留后的测试脚本jmx文件自身也是xml格局。JMeter脚本树以测试计划(Test Plan)为根节点,所有的测试组件都会被蕴含在测试计划中。测试计划中能够配置被整个测试计划中的组件调用的自定义变量、线程组运行模式、测试中应用的库文件等。 在测试计划中应用多种测试组件,就能够构建丰盛的测试场景。JMeter中的测试组件大抵有以下几类:线程组、取样器、逻辑控制器、监听器、配置元件、断言、定时器、前置处理器、后置处理器。接下来将别离介绍,并对次要的组件进行具体阐明。 一、线程组线程组元件是所有测试计划的入口。所有的取样器和控制器必须放在线程组下。一个线程组能够看作一个虚构用户池,其中的每个线程都能够了解为一个虚构用户,多个虚构用户同时去执行雷同的一批次工作。每个线程之间都是隔离的,互不影响的。一个线程的执行过程中,操作的变量不会影响其余线程的变量值。 线程组的界面如下图: 在线程组界面中能够设置以下数据,进行线程组的管制: 取样器谬误后要执行的动作这几个配置项管制了「当遇到谬误的时候测试的执行策略」是否会继续执行。 持续:疏忽谬误,继续执行启动下一过程循环: 疏忽谬误,线程以后循环终止,执行下一个循环。进行线程:以后线程进行执行,不影响其余线程失常执行。进行测试:整个测试会在所有以后正在执行的线程执行结束后进行立刻进行测试:整个测试会立刻进行执行,以后正在执行的取样器可能会被中断。线程数线程数也就是并发用户数,每个线程将会齐全独立地运行测试计划,互不烦扰。测试中应用多个线程用于模拟对服务器的并发拜访。 ramp-up工夫ramp-up工夫用于设置启动所有线程所须要的工夫。例如:线程数设置为10,ramp-up工夫设置为100秒,那么JMeter将应用100秒使10个线程启动并运行,每个线程将在前一个线程启动后的10秒启动。 如果ramp-up值设置得很小、线程数又设置得很大,刚开始执行测试时会对服务器产生很大的压力。 循环次数设置完结火线程组中每个线程循环的次数。 提早创立线程直到须要默认状况下,测试开始的时候,所有线程就全副创立了。如果勾选了此选项,那么线程在须要用到的时候才创立。 线程组调度器调度器配置能够更灵便地控制线程组执行的工夫 (1)持续时间:管制测试执行的持续时间,以秒为单位。 (2)启动提早:管制测试在多久后启动执行,以秒为单位。 二、取样器取样器是用来模仿用户操作的,是向服务器发送申请、接管服务器响应数据的运行单元。取样器是蕴含在线程组外部的组件,因而它必须在线程组中增加。JMeter原生反对多种不同的取样器,如TCP取样器、HTTP申请、FTP申请、JDBC申请、Java申请等,每一种不同类型的取样器依据设置的参数向服务器收回不同类型的申请。 TCP取样器TCP 取样器通过TCP/IP来连贯指定服务器,连贯胜利后向服务器发送音讯,而后期待服务器回复。 界面如图: TCP取样器中能够设置的属性有: 1.TCPClient classname 示意解决申请的实现类。缺省应用org.apache.jmeter.protocol.tcp.sampler.TCPClientImpl, 应用一般文本进行传输。此外JMeter还内置反对BinaryTCPClientImpl和LengthPrefixedBinaryTCPClientImple, 前者应用十六进制报文,后者在BinaryTCPClientImpl的根底上减少了2个字节的长度前缀。 也能够通过继承org.apache.jmeter.protocol.tcp.sampler.TCPClient来提供自定义的实现类。 2.指标服务器设置 「服务器名称或IP」和「端口号」指定了服务器利用的主机名/IP地址和端口号。 3.连贯选项 Re-use connection:: 如果选中,这个连贯会始终处于关上状态,否则读取到数据后就敞开。敞开连贯:如果选中,这个连贯在TCP取样器运行结束之后就会被敞开。设置无提早:如果选中,Nagle算法将被禁用,容许小数据包的发送。SO_LINGER:用于管制在敞开连贯之前是否要期待缓冲区中的数据发送实现。行尾 (EOL)字节值:用于判断行完结的字节值,如果指定的值大于127或者小于-128,会跳过EOL查看。比方服务器端返回的字符串都是以回车符结尾,那么咱们能够将该选项设置成104.超时工夫: Connect Timeout:连贯超时Response Timeout:响应超时5.要发送的文本 申请发送的报文文本 6.登陆配置 设置连贯应用的用户名和明码 HTTP申请取样器HTTP取样器向web服务器发送HTTP/HTTPS申请。 1.名称和正文 2 .申请协定 向指标服务器发送申请时应用的协定,能够是HTTP、HTTPS或FILE,默认为HTTP。 3.域名或IP地址 申请发送的指标服务器名称或IP地址。 4.端口号 Web服务监听的端口号,HTTP默认端口为80,HTTPS默认端口443。 5.申请办法 发送申请的办法,罕用GET、POST、DELETE、PUT、TRACE、HEAD、OPTIONS等。 6 .门路 要申请的指标URL门路(不包含服务器地址和端口)。 7.内容编码 实用于POST、PUT、PATCH和FILE这几种申请形式,对申请内容进行编码的办法 8.更多申请选项 主动重定向:重定向不会被视为独自的申请,不被JMeter记录。追随重定向:每次重定向都被视为独自的申请,都会被JMeter记录。应用KeepAlive:如果选中,JMeter和指标服务器之间通信时会在申请头中退出Connection: keep-alive。对POST应用multipart/form-data:如果选中,将应用multipart/form-data 或 application/x-www-form-urlencoded发送申请。9.参数 JMeter将应用参数键值对来生成申请参数,并依据申请办法以不同办法发送这些申请参数。例如:GET,DELETE申请,参数会附加到申请URL。 10.音讯体数据 如果心愿传输JSON格局的参数,须要在申请头中配置Content-Type为application/json ...

December 14, 2021 · 2 min · jiezi

关于jmeter:压测工具笔记一之主流工具

@TOC 压测工具笔记(一)之支流工具:https://blog.csdn.net/weixin_...) 压测工具笔记(二)之JMeter:https://blog.csdn.net/weixin_... 简介在挪动利用和Web服务正式公布之前,除了进行必要的功能测试和平安测试,为了保障互联网产品的服务交付品质,往往还须要做压力/负载/性能测试。然而很多传统企业在试水互联网+的过程中,往往因为资源或产品迭代速度等起因漠视了这一块工作,导致新产品上线之后频繁呈现卡顿等重大影响用户体验的问题。那么互联网产品为什么要进行压力/负载/性能测试,又有哪些工具帮咱们实现呢,本文将为您细说打量。 压力/负载/性能测试之异同 在产品研发过程中,经常会混同压力/负载/性能测试这三者之间的区别,这三种测试到底有什么不同呢? 压力测试(StressTesting),也称为强度测试,通过模仿理论利用的软硬件环境及用户应用过程的零碎负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。压力测试须要确定一个零碎的瓶颈或者不能接管的性能点,来取得零碎能提供的最大的服务级别。艰深地讲,压力测试是为了发现在什么条件下您的应用程序的性能会变得不可承受。 负载测试(Load Testing)通常被定义为给被测系统加上它所能操作的最大工作数的过程,负载测试有时也会被称为“容量测试”或者“耐久性测试/持久性测试”,其指标是确定并确保零碎在超出最大预期工作量的状况下仍能失常运行。对于WEB利用来讲,负载则是并发用户或者HTTP连贯的数量。负载测试通过测试零碎在资源超负荷状况下的体现,以发现设计上的谬误或验证零碎的负载能力。在这种测试中,将使测试对象承当不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及继续失常运行的能力。 性能测试(PerformanceTesting)的目标不是去找零碎Bugs,而是排除零碎的性能瓶颈,并为回归测试建设一个基准。而性能测试的操作,实际上就是一个十分小心受控的测量剖析过程:“运行负载试验->测度性能->调试零碎”。在现实的状况下,被测利用在这个时候曾经是足够稳固,所以这个过程得以顺利进行。性能测试还有另一个指标就是建设一组被测系统的基准数据。利用在网络上的性能测试重点是利用成熟先进的自动化技术进行网络应用性能监控、网络应用性能剖析和网络预测。 尽管三种测试的目标截然不同,但其测试操作的环节都是基本一致的,因而一次测试过程中齐全能够蕴含性能测试、负载测试、压力测试三个方面的内容,所应用的测试工具往往大同小异。 市面上风行的压力/负载/性能测试工具多是来自国外,同时因为开发的目标和侧重点不同,其性能也有很大差别,上面就为您简略介绍几款款目前最常见的测试产品。 LoadRunnerLoadRunner是一种预测零碎行为和性能的负载测试工具,通过模仿理论用户的操作行为进行实时性能监测,来帮忙测试人员更快的查找和发现问题。LoadRunner实用于各种体系架构,能反对宽泛的协定和技术,为测试提供非凡的解决方案。企业通过LoadRunner能最大限度地缩短测试工夫,优化性能并减速利用零碎的公布周期。 LoadRunner提供了3大次要功能模块:VirtualUser Generator(用于录制性能测试脚本),LoadRunner Controller(用于创立、运行和监控场景),LoadRunner Analysis(用于剖析性能测试后果)既能够作为独立的工具实现各自的性能,又能够作为LoadRunner的一部分彼此连接,与其余模块共同完成软件性能的整体测试。 详见:《性能测试入门——LoadRunner应用初探》(http://www.admin5.com/article...) LoadRunner官网:https://saas.hpe.com/zh-cn/so... Apache JMeterJMeter作为一款广为流传的开源压测产品,最后被设计用于Web利用测试,现在JMeter能够用于测试动态和动静资源,例如动态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP服务器等等,还能对服务器、网络或对象模仿微小的负载,通过不同压力类别测试它们的强度和剖析整体性能。另外,JMeter可能对应用程序做功能测试和回归测试,通过创立带有断言的脚本来验证你的程序返回了你冀望的后果。为了最大限度的灵活性,JMeter容许应用正则表达式创立断言。 JMeter的特点包含对HTTP、FTP服务器、数据库进行压力测试和性能测试;齐全的可移植性;齐全 Swing和轻量组件反对包;齐全多线程;缓存和离线剖析/回放测试后果;可链接的取样器;具备提供动静输出到测试的性能;反对脚本编程的取样器等。在设计阶段,JMeter可能充当HTTP PROXY(代理)来记录浏览器的HTTP申请,也能够记录Apache等WebServer的log文件来重现HTTP流量,并在测试运行时以此为根据设置反复次数和并发度(线程数)来进行压测。 参考文章:《云智慧压测实战分享之JMeter工具应用初探》(https://segmentfault.com/a/11...) 官网链接:http://jmeter.apache.org/ LoadsterLoadster是一款商用负载测试软件,用于测试高负载下网站、Web利用、Web服务的性能体现,反对Linux,Mac和Windows等运行环境。 Loadster可能对Web利用/服务的Cookies、线程、头文件、动静表格等元素发动测试,取得Web在压力下的性能、弹性、稳定性和可扩展性等方面的体现。 官网链接:http://www.loadsterperformanc... CloudTestCloudTest 是一个集性能和功能测试于一体的综合压力测试云平台,专为古代网络和挪动利用测试而设计开发,CloudTest能够图形化实现判断、循环,整体加重了测试开发的工作量,缩短了开发工夫。CloudTest基于内存的剖析引擎,能够实时收集和展现数据,所有数据在3秒内汇聚显示。 CloudTest采纳虚拟化技术,完满的配合私有/公有云计算技术,无需过多的硬件,带宽资源的投入,人力保护老本简直为零,测试按需取得,近程接入,适宜多团队合作。各种规模的模仿老本均远远优于传统工具,同时大大缩短了测试周期。 官网链接:https://soasta.com/cloudtest 阿里云PTS阿里云性能测试(Performance Testing)是一个SaaS性能测试平台,具备弱小的分布式压测能力,可模仿海量用户实在的业务场景,让利用性能问题无所遁形。PTS平台特色包含提供压测机,无需装置软件;脚本场景监控简单化,省时、省力;分布式并发压测,施压能力无下限;疾速大规模集群扩容、反对几十万用户及百万级TPS性能压测;80%以上用户根本不须要破费额定的老本。 PTS分为两个版本,Lite版收费,企业版提供资源包月和按量付费两种计费形式,按量付费采纳阶梯价计算,满足企业客户多种压测需要。 官网链接:https://www.aliyun.com/produc... 压测宝压测宝是云智慧推出的面向实在用户行为与地区散布的全链路云端压力测试平台,通过云端服务器产生实在分布式用户拜访压力,模仿来自各地区用户接入后盾所带来的实在流量,有限靠近生产环境所面临的各种简单因素,测量实在的用户体验。通过集成云智慧利用性能治理和监控产品,帮忙实现基于实在用户行为的压测计划定制、压测过程中实时定位各环节利用资源及代码瓶颈,现场纠错,剖析利用性能肇因。 产品性能特色方面,压测宝通过独有的凋谢架构,反对各种支流网络协议;同时反对手机APP的脚本录制形式,能够大大降低压测脚本制作的工夫和难度。依靠压测宝以及欠缺的产品线,云智慧为用户提供了一站式压测服务,面向云计算时代的简单利用提供业余性能压测服务,帮忙企业主观评估利用性能容量,发现全链路性能瓶颈,对利用架构的调优及架构容量布局提供业余咨询服务,满足企业灵便多变的业务需要。目前压测宝已提供高达10万UV并发级别的压测服务。 官网链接:http://www.yacebao.com/ kylinTOP测试与监控平台kylinTOP测试与监控平台是一款B/S架构的跨平台的集性能测试、自动化测试、业务监控于一体的测试平台,它是深圳是奇林软件有限公司旗下的一款产品,该工具凋谢10个收费虚构用户可供学习和应用。在易用性上较好,录制脚本反对最新版本的浏览器,对谷歌和火狐都反对十分好。对一些https.的网站证书问题,都为用户主动解决好了,能够轻松录制。录制过程高效便捷这是其它性能工具无法比拟的。仿真能力上是目前业界做的最好的性能工具,能够做到齐全仿真浏览器行为,也就是单用户的HTTP申请瀑布图能够和浏览器器齐全一样。总之它是目前国内一款十分难得好用的性能测试工具,能够齐全代替国外的同类产品。目前在军工畛域、测评检测机构、国有企业、银行体系、大型企业有着宽泛的利用。反对的协定较多,尤其在视频畛域反对的协定十分多,具备独特的劣势。官网地址:http://www.70testing.com NeoLoadNeoLoad是Neotys出品的一种负载和性能测试工具,可实在地模仿用户流动并监督基础架构运行状态,从而打消所有Web和挪动应用程序中的瓶颈。NeoLoad通过应用无脚本GUI和一系列自动化性能,可让测试设计速度进步5-10倍,并将保护的脚本维持在原始设计工夫的10%,同时帮忙用户应用继续集成系统主动进行测试。 NeoLoad反对WebSocket、HTTP1/ 2、GWT、HTML5、AngularJS、Oracle Forms等技术协定,可能监控包含操作系统,应用服务器,Web服务器,数据库和网络设备在内的各种IT基础设施,同时能够通过Neotys云平台发动内部压力。 官网链接:http://www.neotys.com/product... WebLOADWebLOAD是来自Radview公司的负载测试工具,它可被用以测试零碎性能和弹性,也可被用于正确性验证(验证返回后果的正确性)。其测试脚本是用Javascript(和集成的COM/Java对象)编写的,并反对多种协定,如Web(包含AJAX在内的REST/HTTP)、SOAP/XML及其他可从脚本调用的协定如FTP、SMTP等,因此可从所有层面对应用程序进行测试。 WebLOAD存在收费和业余两个版本,收费版本反对50个虚构用户,专业版还提供更多的报告和协定供用户抉择。WebLOAD通常用作QA团队的独立运行工具,在开发周期的验证阶段,被测系统(System Under Test,SUT)投入实用之前,在模仿环境中对被测系统进行测试。 官网链接:http://www.radview.com/ LoadstormLoadstorm是一款针对Web利用的云端负载测试工具,通过模仿海量点击来测试Web利用在大负载下的性能体现。因为采纳了云资源,所以Loadstorm的测试老本非常低,用户能够在云端抉择创立本人的测试计划,测试规范和测试场景。 Loadstorm最多能够生成多达50000个并发用户,通过数以千计的云服务器发动拜访。应用Loadstorm不须要任何脚本常识,同时提供多样化的测试图表和报告模版,用于精确测量Web利用的各项性能指标,如错误率,均匀响应工夫和用户数量等。Loadstorm能够申请收费试用,但更多压力和性能须要开明高级帐户。 官网链接:http://loadstorm.com/ Load impact(开源)是一个在线能够收费测试网站负载能力,它就能够满足你的根本要求, 当然成为他的付费用户测试的我的项目将会更多。 Load impact是一款服务于DevOps的性能测试工具,反对各种平台的网站、Web利用、挪动利用和API测试。Loadimpact能够帮忙用户理解利用的最高在线用户访问量,通过模仿测试不同在线人数下网站的响应工夫,估算出服务器的最大负载。 Load impact的应用非常简单,只须要输出网址进行测试,便可统计出加载网站的一些具体数据。包含整体加载和站内图片,javascript, CSS等代码载入。能够在右侧列表抉择不同文件来同时对比最多三个对象的加载数据,并生成图表显示,不便网站设计者来剖析。测试实现之后,网站还能够存储测试过的统计数据。 官网链接:http://loadimpact.com/ ...

December 8, 2021 · 1 min · jiezi

关于jmeter:Jmeter断言之响应断言

jmeter 中有个元件叫做断言(Assertion),它的作用和 loadrunner 中的 检查点 相似;用于查看测试中失去的响应数据等是否合乎预期,用以保障性能测试过程中的数据交互与预期统一。 应用断言的目标:在 reques t的返回层面减少一层判断机制;因为 request 胜利了,并不代表后果肯定正确。所以通过断言,咱们不再会被 200 所蛊惑,而是能够通过断言,看到咱们申请是否真正的胜利。应用办法:给某个申请增加好断言增加对应的断言后果监听器1、响应断言地位: 增加断言: 2、如何查看断言是否正确:增加断言后果增加断言后果地位: 断言胜利与断言失败后果如何展现: 3、其余拓展断言匹配其余范畴、匹配其余模式 上面是我整顿的学习软件测试的一些电子书,有须要的小伙伴能够点击上面链接软件测试学习电子书

December 8, 2021 · 1 min · jiezi

关于jmeter:开源测试工具-JMeter-介绍

前言物联网正在以爆炸式的增长势头飞速发展。随着设施规模的一直增长和业务逻辑的愈发简单,物联网平台在正式上线前,须要通过对平台大量接入设施时的可用性和可靠性进行验证以确保零碎品质。物联网性能测试的价值与必要性因而逐步凸显。 一方面,性能测试为评估物联网零碎提供根据,从设计指标、可扩展性和可靠性多个维度加以验证;另一方面,性能测试也有助于物联网零碎的优化,帮忙及早发现零碎性能瓶颈,提供调优倡议。此外,性能测试还能够辅助容量打算的制订,为将来扩容打算提供参考。 而物联网零碎接入设施量大、协定多样化、集成架构简单、跨部门开发合作频繁这些特点,也使物联网性能测试面临着重重挑战。本系列文章将以基于 EMQ X 的物联网平台为例,介绍如何使用性能测试工具进行平台相干质量指标的验证与测试。 测试工具的抉择——JMeter 简介咱们抉择 JMeter 作为本次的测试工具。 JMeter 是 Apache 基金会旗下一款开源软件,次要通过模仿并发负载来实现性能测试,是目前开源社区的支流性能测试工具。其次要具备以下劣势: 内置多种协定的测试反对,如 TCP、HTTP/HTTPS 等。提供灵便的插件扩大机制,反对第三方扩大其余的协定。对于物联网零碎中品种繁多的协定,只需按 JMeter 的框架要求定制开发所需协定业务逻辑,就能不便地放入 JMeter 的插件库,应用 JMeter 既有性能进行该协定的性能测试。具备良好的社区反对。JMeter 的装置目前 JMeter 最新稳固版本是 5.4.1,因为 JMeter 是基于 Java 的,5.4.1 版本的 JMeter 须要事后装置 Java 8 及以上的反对(可从以下地址获取:https://www.oracle.com/java/t... )。 装置完 Java 后,从官网下载 JMeter:https://jmeter.apache.org/dow... 。 下载实现后解压,并进入解压后目录下的 bin 子目录。依据操作系统的不同,运行 jmeter.bat(Windows零碎)或 jmeter(Unix零碎)。如果一切顺利,JMeter 的脚本编辑界面将会出现在您的背后: 接下来,咱们以 HTTP 为例,看一下如何应用 JMeter 来构建并运行一个简略的测试用例。 增加虚构用户组(Thread Group):右击测试计划 > 增加 > 线程(用户)> 线程组 JMeter 应用单个线程来模仿一个用户,用户组 Thread Group 就是指一组用户,作为模仿拜访被测系统的虚构用户组。 「线程属性」中的「线程数」可用于配置虚构用户组的并发用户数,数值越高,并发量越大;「循环次数」可用于配置每个虚构用户执行多少次的测试。 ...

December 1, 2021 · 1 min · jiezi

关于jmeter:jMeter-Thread-group-对应的-constant-timer

我创立了一个 CSV Data set config,sharing mode 设置成 Current thread,即每个线程会别离从头至尾读取 csv 文件。 我设置的线程数和 loop 数都为 5: csv 文件的内容: 能够看到,第二个线程的第二次,第三次,第四次和第五次执行,都被提早到了很前面的地位。 如果在 thread group 层级加上一个 1秒的延时: 1000 ms 的含意是,每次 loop 的五个线程全副执行完之后,延时1秒,再开始第二次 loop 的执行。 当初就能看到,每次 loop 的每个线程,都读取 csv 文件的同一行,如下表 Label 列所示: 更多Jerry的原创文章,尽在:"汪子熙":

October 17, 2021 · 1 min · jiezi

关于jmeter:jMeter-里-CSV-Data-Set-Config-Sharing-Mode-的含义详解

CSV Data Set Config in Sharing Mode - Made Easy 为了使性能测试更加实在,最好不要在每个线程组中应用雷同的用户。因而,您须要一种办法来配置 Apache JMeter™ 以应用具备惟一用户数据的不同用户,并提出无关如何无效存储将在测试运行期间应用的用户数据的想法。 为此,JMeter 有一个十分有用的配置元素,称为 CSV 数据集配置。 “CSV 数据集配置”容许应用 CSV 文件作为内部数据源,您能够在其中保留惟一的用户数据,如姓名、电子邮件和明码。借助这个配置元素,JMeter 可能逐行读取 CSV 文件,而后应用拆分参数为不同的线程调配不同的值。 乍一看,所有“CSV 数据集配置”参数仿佛都是不言自明的。但其中之一可能并不像您设想的那么简略。此参数为“共享模式”。这篇博文将解释您须要理解的无关此选项的所有信息。 Understanding the JMeter CSV Data Config Element创立一个蕴含五个线程的 user group: 创立一个用户登录的 HTTP 申请: 您将看到“线程组”中的所有 5 个用户都应用雷同的电子邮件和明码执行了登录。 产生这种状况是因为这些值是在申请采样器中硬编码的,并且它们与该线程组中的所有 5 个用户相干: Multiple Users With Multiple Requests然而如果你想在不同的用户下登录怎么办?要模仿实在的 Web 应用程序负载,您可能心愿应用具备不同凭据的不同用户。为此,JMeter 具备“CSV 数据集配置”元素,旨在帮忙解决此类情况。 此元素的次要思维是它逐行读取 CSV 文件并将其值提供给以后线程组的线程。有许多有用的文章和实际会议通过不同的示例解释了这个 JMeter 元素。 但首先,让咱们创立一个简略的 CSV 文件,其中蕴含一个用户列表(每个用户在独自的一行),电子邮件和明码在每行之间用逗号分隔: csv 文件的内容: JMeterSharingModeUser1@example.com,123qweJMeterSharingModeUser2@example.com,234werJMeterSharingModeUser3@example.com,345ertJMeterSharingModeUser4@example.com,456rtyJMeterSharingModeUser5@example.com,567tyuJMeterSharingModeUser6@example.com,678yuiJMeterSharingModeUser7@example.com,789uioJMeterSharingModeUser8@example.com,890ipoJMeterSharingModeUser9@example.com,901opqJMeterSharingModeUser10@example.com,012pqw ‘All threads’ Sharing Mode让咱们将“CSV 数据集配置”元素增加到咱们的性能脚本中(右键单击“测试计划” -> 增加 -> 配置元素 -> CSV 数据集配置)。 在此元素中,您须要指定蕴含用户详细信息和变量名称的文件名,这些文件名将用作从文件中获取的这些值的容器。 ...

October 17, 2021 · 2 min · jiezi

关于jmeter:如何使用-jMeter-Parallel-Controller-并行控制器以及一些常犯的错误

How to Use the Parallel Controller in JMeter 本文咱们将剖析 Apache JMeter™ 的扩大之一 - 并行控制器(Parallel Controller)。 该控制器由 BlazeMeter 开发,作为对开源社区的奉献,由 Andrey Pokhilko 和 Artem Fedorov 开发。 并行控制器可用于创立并行申请。 并行申请是指不是一个接一个执行而是同时执行的申请。 例如,在加载脚本中解决 AJAX 申请或执行其余同步操作。 您能够应用 JMeter 插件管理器装置并行控制器。 它被称为并行控制器和采样器。 咱们还须要一个 Dummy Sampler 和一个 WebSocket 插件来进行此演示,您也能够在 JMeter 插件管理器中找到它们。 咱们将应用 Peter Doornbosch 的 Websocket Samplers。 当初咱们将通过几个例子来看看并行控制器的个性。 让咱们从一个简略的例子开始。 Using the Parallel Controller - A Simple Example首先,让咱们将控制器增加到测试计划中。 增加线程组后:右键线程组->增加->逻辑控制器->bzm-并行控制器 还要在控制器内增加两个 Dummy Sampler 并将雷同的个性利用到它们。右键单击 Parallel Controller -> Add -> Samplers -> jp@gc Dummy Sampler ...

October 17, 2021 · 2 min · jiezi

关于jmeter:0808-性能测试分布式

参考链接: https://testerhome.com/articl... 分布式的起因针对测试:单机无奈反对过大并发量,须要多机器同时执行并发来解决 分布式的原理主机 master 执行与散发脚本给 从机,汇总 从机 的执行后果 从机 salve 执行 主机 散发的脚本,并把数据反馈给主机 分布式实现1 配置主机 master批改配置文件 jmeter.properties在 jmeter.properties 文件中新增 remote_hosts 配置; 配置是 slave 主机的 ip 和 slave 主机里装置的 jmeter 的端口号 批改并删除正文:server.rmi.ssl.disable=true 敞开SSL,保障近程连贯通顺 #---------------------------------------------------------------------------# Remote hosts and RMI configuration#---------------------------------------------------------------------------# Remote Hosts - comma delimitedremote_hosts=127.0.0.1 # 填写从机的 ip:prot(能够不写,默认1098),多个从机以","宰割#remote_hosts=localhost:1099,localhost:2010server.rmi.ssl.disable=true # 敞开SSL,保障近程连贯通顺jmeter.bat(Windows平台) / jmeter(Linux/Mac平台)在 jmeter.bat 文件中新增新增 set rmi_host=-Djava.rmi.server.hostname=本机 ip 2 配置从机 salve从机必须提前装置好 JMeter,并配置环境变量 批改配置文件 jmeter.properties批改 slave 主机的 ip:remote_hosts={slave IP} 批改并删除正文:server.rmi.ssl.disable=true 敞开SSL,保障近程连贯通顺\凋谢三个默认端口 ...

October 6, 2021 · 1 min · jiezi

关于jmeter:0807-性能测试性能监听平台

参考链接:https://testerhome.com/topics... Grafana应用 docker 装置# 创立 influx 与 grafana 共用的文件映射卷:容器的寄存目录docker volume create influx_grafana# 拉取镜像docker pull registry.cn-hangzhou.aliyuncs.com/zhufc/influx_grafana:v6# 运行容器docker run -d -p 2003:2003 -p 8086:8086 -p 8085:8083 -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/zhufc/influx_grafana:v6启动 Grafana# 进入容器docker exec -it 容器id bash# 启动/etc/init.d/grafana-server start# 重启/etc/init.d/grafana-server restart通过 ip:3000 进入 Grafana默认账户明码: admin admin InfluxDB上一步已同时装置好 InfluxDB,间接开始批改配置文件。 配置文件# 进入配置文件vim /etc/influxdb/influxdb.conf批改 hostname 凋谢端口 数据传输通道:bind-address = ":8086" InfluxDB启动端口:bind-address = ":8083" Jmeter 与 InfluxDB 关联端口:bind-address = ":2003" 配置数据库名称(默认为 jmeter) InfluxDB 相干命令# 启动 InfluxDB 数据库influxd# 应用 Ctrl + q + p 将数据库置于后盾运行# 进入 InfluxDB 数据库influx# 增加用户名与明码> CREATE USER root WITH PASSWORD '000000' WITH ALL PRIVILEGES> SHOW USERSuser adminroot true ...

October 6, 2021 · 1 min · jiezi

关于jmeter:0806-性能测试测试报告与数据

性能测试报告模板: 链接: https://pan.baidu.com/s/1iQju... 提取码: 2gu6 前端性能剖析应用 Chrome 浏览器 后果查看: 图中各种色彩代表的含意: 蓝色 Loading:加载黄色 Scripting:脚本紫色 Rendering:渲染绿色 Painting:绘制浅灰 Other:其余若须要通过 Jmeter 进行测试,则须要☑️从HTML文件获取所有内含的资源 前端性能优化动态资源加缓存,应用 CDN 与 独立域名JavaScript 压缩,去掉反复申请JavaScript 加载后移CSS 依赖缩小,置顶异步接口申请优化、合并、缩小查看页面申请失败与跳转的内部资源缩小页面申请个数,缩小 JavaScript 与 CSS 加载JavaScript 内存泄露,JavaScript 革除定时器Cache-Control: max-age=31536000 测试用例场景 数据分析进行性能测试时,GUI 界面仅作为调试用; 实在运行性能测试时,应用非 GUI 形式运行。 应用命令行启动脚本: 参考链接:https://www.cnblogs.com/kaibi... jmeter -n -t xxx.jmx 生成 jtl 文件:jmeter -n -t xxx.jmx -l xxx.jtl 生成的 jtl 文件,可通过 jmeter 中的监听器进行浏览 监听器中生成的图形,能够导出到 csv 间接生成 csv 文件:jmeter -n -t xxx.jmx -l xxx.csv ...

October 5, 2021 · 1 min · jiezi

关于jmeter:0805-性能测试定时器场景

用户定时器|集合点模仿多用户在同一时间点发动申请,放大并发线程启动时间误差 期待达到指定数量的用户数量后,集中发动申请 应用 Synchronizing Timer(同步定时器) 参考链接:https://blog.csdn.net/sun_hm/... 其中 Timeout in millisecond(超时工夫)=0,属于硬性期待 若汇合用户数>=线程数,运行脚本若汇合用户数<线程数,始终期待,不会运行脚本Timeout in millisecond(超时工夫)>0,属于软性期待 只会在设置好的 超时工夫 内期待后果察看: 吞吐量定时器Constant Throughput Timer应用 Constant Throughput Timer ,通过管制单位工夫的申请数,实现间接管制 TPS,察看响应工夫稳定: 毛病:每次批改吞吐量值时,须要进行脚本再启动,不利于察看整体的测试后果 参考链接:https://www.cnblogs.com/eagle... 响应工夫察看: RPS 定时器Throughput Shaping Timer应用 Throughput Shaping Timer , 能够间接管制压力值 参考链接:https://www.jianshu.com/p/303... 后果察看: 固定定时器集合时间满足后,刹时并发申请: 只会影响业务工夫不会影响服务解决工夫 随机定时器 参考链接:https://www.cnblogs.com/yoyok...

October 5, 2021 · 1 min · jiezi

关于jmeter:0804-性能测试复杂情景设计

负载模型1. 并发用户模型剖析性能衰减点;目标是性能调优 应用阶梯加压的线程组:Stepping Thread Group **保障压力平缓减少 相干参考链接:https://www.cnblogs.com/xioaw... 相干的监听器 对于性能衰减: 随着负载一直减少,TPS 绝对安稳,然而响应工夫继续减少监听器:Transaction Throughput vs Threads应用:Concurrency Therad Group 参考链接:https://www.cnblogs.com/poloy... 2. RPS(基于申请) 模型找出并发用户下的最大吞吐量;目标是能力验证 须要为对应申请增加:Throughput Shaping Timer 参考链接:https://www.cnblogs.com/ryan2... 测试场景构建1. 单接口基准测试2. 多接口容量测试场景阐明: 10min 内实现 3000 笔报销单解决; 单笔报销工夫(蕴含填写报销单信息+提交实现的工夫)20s + 1s =21s 并发线程数:(213000)/(6010min)=105 均匀吞吐量:3000 / 600 = 5 笔/s 其中用户填写报销单信息的工夫,应用 固定定时器 进行管制(其中思考工夫不会计算在响应工夫内): 最初运行,通过 聚合报告 察看数据

October 5, 2021 · 1 min · jiezi

关于jmeter:0803-性能测试数据准备与基准场景设计

根底性能脚本延迟时间=网络工夫+服务解决工夫 次要应用监听器,通过两者的差值,判断响应工夫耗费: jp@gc - Connect Times Over Timejp@gc - Response Times Over Time 调试脚本阶段,能够应用查看后果树等监听器来察看运行后果 正式执行时,须要将其禁用,防止耗费服务器资源 筹备数据获取登录 session,提供给后续接口应用: 从登录的响应中获取 session,传递到 后续接口 的申请头中应用 应用 cookies 管理器 后置处理器在登录申请上增加 正则表达式提取器 调试正则表达式是否正确: 在查看后果树中,找到对应的申请,进入正则调试 填写正则表达式(确定左右边界,留神是否采取贪心模式),点击【test】,查看后果: 将调试无误的正则表达式,回填到 正则表达式提取器 中: 参考链接:https://blog.csdn.net/quiet_g... 延长:json 表达式调试 根节点:$ 获取键值对:$.对应的键名称 参考链接:https://blog.csdn.net/df0128/... 通过后置处理器援用获取值: 通过 HTTP 信息头管理器,将提取的 cookie 值传递到下一个申请的申请头中 其次,能够通过 HTTP Cookie 管理器 精准传递指定用户的 cookie 值 断言为对应的申请增加响应断言: 逻辑控制器仅一次控制器 对于单线程屡次循环,只执行一次;然而对于多线程的状况,还是会执行屡次的 吞吐量控制器 无论线程多少,吞吐量控制器下的申请只执行指定次数 ...

October 5, 2021 · 1 min · jiezi

关于jmeter:0802-性能测试负载模型与压力来源

JDK 中的提供的监听工具 Windows 零碎下,Java 过程最多能启动 1000 个线程 Linux 零碎下,Java 过程最多能启动 2000 个线程 JMeter 线程组 其中线程属性(体现的是压力预期,理论后果在聚合报告中查看)中: ramp up:预期线程加载工夫,如图中,预期1秒内启动10个线程,最终应用的工夫以右上角的工夫为准;ramp up=0:示意霎时加压,线程启动工夫无线趋近于0,负载测试时,尽量将其设置大一些,让性能曲线平缓,剖析瓶颈点循环次数:线程的迭代次数/反复发动申请的次数;若循环次数有固定值,持续时间不会失效,以循环次数为准调度器配置中: 持续时间:须要将循环次数设置为永远,持续时间才会失效 压力起源基于协定发动申请,模仿用户实在操作,向零碎施加压力 HTTP申请 入参模式 个别入参模式是固定的,须要与接口文档进行核查 表单模式 json模式(表单与json,两种入参模式只能选其一) url拼接 Advanced 如果存在某些接口,并发数量过大容易产生梗塞,能够设置超时工夫间接抛出谬误,执行下一个申请, 避免申请堵在队列中,影响后续流程 勾选“从HTML文件获取所有外延的资源”,申请会把所有的动态资源加载进去 JMeter 抓包相干工具:XmfBrowser 链接:https://pan.baidu.com/s/1FI6Q... 提取码:7xsz JMeter 内的操作: 增加 HTTP 代理服务器 设置代理服务器 设置申请过滤 启动代理,而后再浏览器工具中设置代理端口,按理论业务进行操作 在抓取的接口中,抉择有用的挪动到对应事务的线程组中 压力监听 次要监听响应工夫、TPS、流动线程、HPS、响应工夫比例 罕用监听器: JDK 下的监听工具: 地位:jdk/bin/jconsole.exe应用浏览器进行录制脚本时,相干的设置: 第一种形式:配置电脑网络代理(不举荐,会代理所有浏览器申请) 第二种形式:应用浏览器插件--SwitchyOmega(举荐) 应用步骤:

October 5, 2021 · 1 min · jiezi

关于jmeter:0801-Jmeter-核心原理与性能测试理论

Jmeter 外围原理基于协定,模仿实在用户场景,并通过多线程模仿用户发动申请。 基于协定:性能测试的对象是网络分布式架构的软件,而网络分布式架构的外围是网络协议多线程:人的大脑是单线程的,电脑的 cpu 是多线程的。性能测试就是利用多 线程的技术模仿多用户去负载模仿实在场景。用户的拜访工夫,拜访频率都不是固定的性能测试实践性能测试的 根本指标:测试零碎性能是否达标;通过肯定的技术手段,模仿用户的并发申请,去测试零碎最大解决能力与稳固运行的能力,找到性能瓶颈,晋升零碎整体解决能力根本办法:基准、负载、压力……外围原理基于协定,通过多线程的形式模仿用户并发,在不同场景下施压服务器 基于协定:包含http,https,tcp,udp,socket,websocket,基于协定发动申请多线程:通过多线程的形式,模仿并发用户,施压服务器波及场景:jmeter 办法,元件;设计用户应用零碎的关联,思考工夫,集合点,对后果进行断言应用领域能力验证:零碎是否在固定条件下具备所申明的能力 乙方向甲方提供的我的项目中,申明了零碎能够反对5000用户同时登录,且响应工夫不超过3s;乙方须要通过性能测试失去测试后果,给予甲方验收报告瓶颈发现:发现瓶颈与缺点,无可参照的性能指标与指标 通过一系列的性能测试伎俩,发现性能瓶颈与缺点性能调优:对系统性能的调优 针对发现的性能瓶颈做调优TPS 瓶颈服务资源瓶颈响应工夫瓶颈SQL 瓶颈容量布局:零碎是否反对将来一段时间内的用户增长以后用户可能只反对5000用户并发;预计将来用户并发量能达到 50000 or 500000;针对将来可能存在的业务量暴发,以预计的用户并发量为基数,做对应的性能测试,提前调整硬件设施测试思路要测什么?前端:web、APP;从用户角度思考,更多关注页面加载工夫,与响应工夫 服务端: 工具层面:关注错误率与吞吐量服务器层面:CPU,内存,IO,JVM数据库:包含慢SQL,死锁…… 怎么测?需要--打算--计划--测试环境搭建--设计用例--数据筹备--设计场景--脚本开发--数据监控--后果剖析--性能调优--提交报告 测试后果通过的规范:依照需要:测试后果合乎预期 无规范需要的:例如测试一个页面的最大并发 性能指标前端性能指标响应工夫:用户视角最优先关注的指标 258准则: 2s以内,很称心5s,个别8s,无奈承受前端相应工夫: 前端资源加载渲染的工夫前后端交互的工夫前端将后端查问的数据,在页面出现进去网络连接工夫: connect time-连接时间:申请收回到服务端接管到,两头的网络工夫latency-提早:网络连接工夫+服务解决返回的工夫服务段解决工夫=latency - connect time错误率 点击率(HPS):用户点击按钮,触发申请 TPS: 单接口业务:单位工夫实现的申请数多接口业务:单位工夫实现的事务数RPS:间接从服务端角度掂量压力值 单位工夫发动的申请数TPS 掂量了服务端/零碎的性能;RPS 掂量了压力 服务端性能指标CPU 内存 磁盘IO JVM 中间件:Tomcat、redis、Nginx 测试视角用户视角 响应工夫零碎稳固运维视角 硬件设施是否须要更换资源利用率是否达标 利用率超标利用率过低零碎容量开发视角 代码是否须要优化SQL 优化零碎架构优化性能测试工程师的视角 测试类型基准测试:每一次版本迭代都须要做基准测试,目标是比照上一次的测试后果,给出调优的根据 负载测试:继续一直地减少压力;须要保障压力的持续性;找到零碎的瓶颈点 并发用户模型:继续一直地减少并发用户RPS模型:继续一直地减少申请数压力测试:当资源处于一个饱和状态,继续运行服务,考查零碎的稳定性;或者负载处于一个顶峰 稳定性测试:最大压力的80%,继续运行一段时间破坏性测试:在最大压力的根底上,仍然一直减少压力,目标是让零碎解体报错失效恢复测试:零碎异样之后,是否及时地复原 容量测试:考查零碎在将来时间段内,能撑持的用户数;测试大容量下,零碎须要的硬件设施

October 5, 2021 · 1 min · jiezi

关于jmeter:jMeter-Transaction-Controller-学习笔记

JMeter 的事务控制器是一个十分不便的工具,用于组织测试的不同局部并确定这些局部将如何呈现在报告中。正如 Apache JMeter 的文档中所述:“事务控制器生成一个额定的样本,用于测量执行嵌套测试元素所破费的总工夫。” 但这意味着什么?这个“额定样本”对您的 BlazeMeter 报告有什么影响? 如果您还不是十分相熟这些性能,那么仅仅因为它是一个形象的概念,可能会让人有点困惑。为了揭开这个话题的神秘面纱,咱们将通过展现后果的各种示例来具体理解此性能,以精确理解它在不同场景中的行为。 这里探讨的所有内容都将围绕这个“生成父样本”的小复选框: Creating a Basic JMeter Script为了演示事务控制器及其父示例如何工作,让咱们首先创立一个十分根本的 JMeter 脚本。 咱们须要这个脚本蕴含在这个试验中的是: A single Thread GroupA single Transaction ControllerTwo HTTP Request samplersA View Results Tree listener将两个 HTTP 申请采样器放在事务控制器中,给每个采样器一个惟一的名称(我的是“标签 1”和“标签 2”),如下所示: 接下来,将每个采样器配置为只需点击 blazedemo.com: 事务控制器将为咱们提供其中所有内容(咱们的两个采样器)的执行工夫,合并为一个“事务”。 让咱们看看咱们如何调整这个事务控制器来从测试报告中取得咱们想要的。 Scenario 1: No Parent Sample对于咱们的第一个试验,咱们将设置咱们的事务控制器,以便通过确保“生成父样本”框未选中(禁用)来生成任何父样本: 保留测试计划,而后在执行测试时察看查看后果树侦听器。 留神咱们的两个采样器是如何显示的: 咱们看到了两个采样器,但有三个标签。 第三个标签是咱们的“父样本”,即事务控制器自身。 不可避免的下一个问题当然是:咱们不是禁用了生成父样本吗? 咱们的确这样做了,因而父样本显示为附加的失常采样器,而不是理论的父样本。 别放心——当你看到第二个场景时,这会更有意义! 接下来,让咱们在 BlazeMeter 中运行此测试,而后查看申请统计报告以理解标签的显示方式: 就像查看后果树一样,咱们有三个标签,第三个代表事务控制器自身。 这是什么意思? 让咱们回到 JMeter 文档的形容:“事务控制器生成一个额定的样本,用于测量执行嵌套测试元素所破费的总工夫。” 换句话说,测试为两者生成了指标(均匀响应、均匀命中数/秒等): 事务控制器的各个内容(“标签 1”和“标签 2”)。两个标签的组合;换句话说,从头到尾的残缺“交易”,显示为第三项。 ...

October 3, 2021 · 1 min · jiezi

关于jmeter:自定义jmeter测试逻辑

最近测试共事在做压测过程中发现同样配置的两台服务器,部署同样的程序压测后果却差了很多(将近100tps),测试共事用的是loadrunner进行的压测,为了不占用测试资源,本地可能模拟出压测后果,须要在jmeter中自定义测试用例。上面介绍一下如何进行自定义。 引入jmeter的jar包新建一个maven我的项目,联合你装置的jmeter版本,引入对应的版本jar包,次要是ApacheJMeter_core和ApacheJMeter_java,我这里用的是5.4.1 <dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_core</artifactId> <version>5.4.1</version></dependency><dependency> <groupId>org.apache.jmeter</groupId> <artifactId>ApacheJMeter_java</artifactId> <version>5.4.1</version></dependency>创立本人的用例创立你本人的测试类,须要继承AbstractJavaSamplerClient,并实现他的几个接口,对应的办法执行机会,我在上面代码中正文了 public class MyTester extends AbstractJavaSamplerClient { //执行测试代码,次要的逻辑 public SampleResult runTest(JavaSamplerContext javaSamplerContext) { return null; } //执行之前的初始化逻辑 @Override public void setupTest(JavaSamplerContext var1){ } //完结办法 @Override public void teardownTest(JavaSamplerContext var1){ } //java request界面的参数 @Override public Arguments getDefaultParameters(){ return null; }}这样看可能不是很分明,举个例子: @Override public Arguments getDefaultParameters() { Arguments params = new Arguments(); params.addArgument("host", ""); return params; }下面代码我实现了getDefaultParameters办法,并设置了一个host参数,那么在jmeter上显示的后果如下:其余几个办法的含意,我感觉正文曾经足够分明了。 打包实现本人的代码之后,就要进行打包了。如果你的我的项目不是springboot,则间接打包。如果你的我的项目是springboot我的项目,则须要去掉相干springboot的引入,把它改为一般包,比方我这里就把相干的包正文掉:而后在maven插件里,把springboot的打包形式也正文掉:而后打包就能够了。 应用根本工作都曾经实现了,接下来开始看看怎么用。找到jmeter的装置目录\lib\ext,把上一步生成的包丢进去,比方我目录是D:\安装包\apache-jmeter-5.4.1\lib\ext,则丢完之后:如果你的我的项目中有依赖其余第三方jar的,则把依赖的第三方jar包也丢进去。启动jmeter并创立对应的java request:能够看到,咱们本人写的测试类曾经能够选到了。当然如果你须要显示tps报告的,则须要在申请之前和响应之后的逻辑上增加统计逻辑 SampleResult sr = new SampleResult();sr.sampleStart(); //开始统计String result = TcpUtil.send(host, content);sr.sampleEnd(); //完结统计View Result Tree里的后果,也能够通过你对理论报文的解析来管制胜利还是失败 ...

September 29, 2021 · 1 min · jiezi

关于jmeter:性能工具之Jmeter脚本python启动

背景     上一节是shell命令启动Jmeter,放心大家对shell脚本语法不是很相熟,如果定制本人想要的恐怕不好弄,这次改用python启动脚本,在革新之前大家先理解下Jmeter线程组相干参数,这样对大家革新脚本有肯定帮忙。知识点 python中os、sys、file模块函数 Jmeter 执行形式【jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]】 以下是线程组款式 解释 Name :Thread Group 线程组的名称,能够依据项目名称定义 Comments :备注信息,形容该打算的目标 Action to be taken after a Sampler error 如果申请失败后,接下来执行什么动作 continue 继续执行接下来的操作start Next ThreadLoop 执行下一个线程循环Stop Thead 进行该该线程,不在执行该线程的任何操作Stop Test 期待该线程的采样完结后,完结整个测试,不会立刻进行Stop TestNow 进行整个测试计划Thread Properites :线程属性Number of Threads(users) :线程数,也就虚构用户数Ramp-uo Period(in seconds) :管制虚构用户启动工夫Loop Count:管制执行次数。Infinite 如果勾选示意无线执行,它次要与前面的 Duration 配合应用Same user on each iteration : 每次迭代应用雷同的用户Delay Thread creation until needed 将线程创立提早到须要的时候Number of Threads * Loop Count 就是 Sampler 执行的次数,能够在 View Results Tree 中看到。specify thread lifetime: 设置执行工夫Duration(seconnds): 申请的执行工夫,它与(Loop Count 的 Infinite)配合应用Startup delay(seconds):延迟时间,工作中很少用。python启动Jmeter脚本python基础知识温习os.sep: 取代操作系统特定的门路分隔符os.name: 批示你正在应用的工作平台。os.getcwd: 失去当前工作目录,即以后python脚本工作的目录门路。os.getenv()和os.putenv: 别离用来读取和设置环境变量os.listdir(): 返回指定目录下的所有文件和目录名os.remove(file): 删除一个文件os.stat(file): 取得文件属性os.chmod(file): 批改文件权限和工夫戳os.mkdir(name): 创立目录os.rmdir(name): 删除目录os.removedirs: 删除多个目录os.system(): 运行shell命令os.exit(): 终止以后过程os.linesep: 给出以后平台的行终止符。os.path.split(): 返回一个门路的目录名和文件名os.path.isfile()和os.path.isdir()别离测验给出的门路是一个目录还是文件os.path.existe(): 测验给出的门路是否真的存在os.listdir(dirname): 列出dirname下的目录和文件os.getcwd(): 取得当前工作目录os.curdir: 返回当前目录('.')os.chdir(dirname): 扭转工作目录到dirnameos.path.isdir(name): 判断name是不是目录,不是目录就返回falseos.path.isfile(name): 判断name这个文件是否存在,不存在返回falseos.path.exists(name): 判断是否存在文件或目录nameos.path.getsize(name): 取得文件大小,如果name是目录返回0Los.path.abspath(name): 取得绝对路径os.path.isabs(): 判断是否为绝对路径os.path.normpath(path): 标准path字符串模式os.path.split(name): 宰割文件名与目录os.path.splitext(): 拆散文件名和扩展名os.path.join(path,name): 连贯目录与文件名或目录os.path.basename(path): 返回文件名os.path.dirname(path): 返回文件门路关上文件函数温习with open( 文件名, '操作类型' ) as f: f.read()open(文件名,操作类型) f.readlines()读取形式有rand()readline()readlines()seek....等等 ...

September 2, 2021 · 3 min · jiezi

关于jmeter:性能工具之Jmeter使用shell启动

背景 在linux中执行Jmeter脚本时候,大家是否始终应用【jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]】命令执行,是否想过通过shell命令执行或者python执行,明天简略介绍下shell命令执行,前置条件须要配置Jmeter环境变量,如果没有配置,须要在脚本中批改相应地位。 成果shell脚本Jmeter环境变量配置参考 vi ~/.bash_profile#jmeter:门路JMETER_HOME=/root/tools/apache-jmeter-3.3PATH=$PATH:$HOME/bin:$JMETER_HOME/bin:export PATH 执行失效:source ~/.bash_profile验证 shell脚本参考代码 !/bin/bashauthor:liwen7DGroup2019/12/08/20/50cmdsh="/home/gaolou/apache-jmeter-3.1/bin/JMeterPluginsCMD. sh"case=$1 mNum=$ 2durationTime=$3 mark=$4 resultDataFileName="resultData.csv" hostIps="101.201.210.163"nowPwd=pwdecho -e "\033[32m-压力机开始执行。。请期待-\033[1m" echo testcaseName:${case}_${mNum}_${durationTime}_${mark} if [ -z ${case} ];then echo -e "\033[32m请输出脚本名,线程数,执行工夫,备注! 输出脚本名\033[0m" echo "ERROR" exit 1 fi if [ -z ${mNum } ];then echo -e "\033[32m请输出脚本名,线程数,执行工夫,备注! 输出线程数\033[1m" echo "ERROR" exit 1 fi if [ -z ${durationTime} ];then echo -e "\033[32m请输出脚本名,线程数,执行工夫,备注! 输出备注\033[1m" ...

September 1, 2021 · 3 min · jiezi

关于jmeter:运维攻坚之jmeter压力测试报错

背景某客户施行DAP,在上线前须要对DAP进行压力测试,有专门的压力测试环境,并且要求并发可能达到1000,团队应用jmeter作为压测工具,整个零碎架构很简略浏览器->Nginx->Tomcat,在压测的时候碰到以下问题 对DAP流程提交接口进行压测,压测不通过部署一个仅仅返回申请参数,没有任何业务逻辑,压测不通过绕过Nginx,间接对Tomcat进行压测,压测通过间接对Nginx进行压测,压测Nginx welcome页面,压测不通过并且对Nginx进行了大量的调优,能调的参数根本都试过,压测不通过,总结下来就是,只有通过Nginx,压测就不通过,看来问题呈现在Nginx上 环境信息Nginx:16CPU 64G内存Nginx配置,这里只列几个比拟重要的参数worker_processes 16;worker_connections 1000;keepalive_timeout 60;这些参数都调整过,对后果影响不大,当然如果调的太极其,比方worker_processes设置为1,必定是会报错的。 Tomcat:16CPU 64G内存这个配置Nginx跑1000并发齐全是足够的 排查先看下两个测试后果比照 压测tomcat简略接口,并发1000,循环50次,总共50000次申请 压测后果 所有申请没有呈现Error 压测Nginx welcome页面,并发1000,循环50次,总共50000次申请 有百分之0.31%的错误率,尽管不高,但这个错误率是始终有的,而且如果说Nginx的压测不如Tomcat,置信这个后果大家都承受不了,Nginx是负载平衡产品中公认最强的产品,一个是负载平衡,一个是应用服务器,负载平衡最重要的就是并发能力,应用服务器最重要的是业务能力,如果Tomcat在并发能力上超过Nginx,可能会颠覆很多人的认知。所以这其中必定是有问题的。 Nginx压测申请的谬误次要集中在以下几点 java.net.ConnectionException: Connection refused: connectjava.net.SocketException: Connection resetjava.net.SocketException: Unexpected end of file from serverorg.apache.http.NoHttpResponseException: failed to respond基本上是网络谬误,为了排除网络谬误,做了两个测试 本地运行我本人电脑(MAC)开nginx和tomcat,用jmeter进行压测,后果更不现实,也是1000并发 尽管有这么高的错误率,然而不论是nginx还是tomcat,并没有报错,这能阐明什么问题呢,阐明很可能是内核层面就报错了,也就是申请基本就没进来 Linux主机运行Jmeter反对在LInux下运行,也反对命令行模式,因而能够思考在内网服务器找一台同网段主机作为压测机器,步骤如下 将jmeter安装包上传到Linux压测机并解压在本地配好测试计划,保留为jmx文件,并将jmx文件上传至Linux压测机执行以下命令以命令行模式开启压测apache-jmeter-5.4.1/bin/jmeter.sh -n -t plan.jmx -l plan.jtl 将后果文件plan.jtl下载到本地,在汇总报告中点击Browser关上文件 错误率为0,联合本地运行的后果,能够猜想跟压测机的环境无关。 压测机本次应用的压测机是一台windows 7主机,如果是压测机的起因,那么为什么压tomcat就没问题,压nginx就有问题,两次压测到底区别在哪,咱们能够用wireshark进行抓包,看两次压测在网络包上有什么不同 Nginx压测抓包,发现有大量RST的包,并且继续疾速呈现 RST是连贯敞开时会发送的数据包Tomcat压测抓包也有RST的包,然而速度显著较慢,而且数量不多也就是说,Nginx压测一直在创立连贯和敞开连贯,tomact创立连贯和敞开连贯动作并没有那么频繁,咱们能够在windows上用以下命令查看连贯状况 netstat -a | find /i /c "TIME_WAIT"该命令能够统计以后零碎处于TIME_WAIT状态的连接数,TIME_WAIT示意连贯处于行将敞开的状态,这时候连贯所占用的端口仍然无奈开释,无奈进行再次调配,如果短时间内产生大量的TIME_WAIT连贯,容易导致端口号耗尽以至于无奈创立新的连贯,服务无奈响应Tomcat压测 TIME_WAIT连接数状况 TIME_WAIT示意期待敞开的连接数,能够看到迟缓增长,并且达到两千左右进行增长 Nginx压测TIME_WAIT连接数状况 能够看到快速增长,并且总数能够达到2w以上,最多能够达到4w,所以两次压测的区别就是TIME_WAIT的数量, 那为什么会产生这种后果,以下是我的集体猜想 nginx采纳的是epoll非阻塞模型,tomcat采纳的是线程模型,一个申请一个线程,属于阻塞模型,所以nginx能够段时间内"吃掉"大量的连贯,tomcat须要排队进入,这样就造成了以上景象,nginx短时间创立大量连贯,tomcat则是迟缓减少连贯论断windows作为压测机进行高并发压测并不适合,因为会在短时间内产生大量连贯,windows作为工作PC,在这方面解决能力不如Linux,加上网络稳定等因素,容易造成谬误,造成压测后果失真,尽管能够通过优化局部参数升高错误率,但解决不了基本问题,倡议通过同网段Linux主机作为压测机,测试计划能够在windows进行配置,后果剖析也能够在windows中实现,但执行测试工作倡议在Linux主机上进行。

July 30, 2021 · 1 min · jiezi

关于jmeter:jmeter压力测试

jmeter压力测试应用 JMeter 进行压力测试 一.前言压力测试是每一个Web应用程序上线之前都须要做的一个测试,他能够帮忙咱们发现零碎中的瓶颈问题,缩小公布到生产环境后出问题的几率;预估零碎的承载能力,使咱们能依据其做出一些应答措施。所以压力测试是一个十分重要的步骤,上面我带大家来应用一款压力测试工具JMeter。二.对于JMeterApache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最后被设计用于Web利用测试,但起初扩大到其余测试畛域。 它能够用于测试动态和动静资源,例如动态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库、FTP 服务器, 等等。JMeter 能够用于对服务器、网络或对象模仿微小的负载,来自不同压力类别下测试它们的强度和剖析整体性能。另外,JMeter可能对应用程序做性能/回归测试,通过创立带有断言的脚本来验证你的程序返回了你冀望的后果。为了最大限度的灵活性,JMeter容许应用正则表达式创立断言。Apache jmeter 能够用于对动态的和动静的资源(文件,Servlet,Perl脚本,java 对象,数据库和查问,FTP服务器等等)的性能进行测试。它能够用于对服务器、网络或对象模仿沉重的负载来测试它们的强度或剖析不同压力类型下的整体性能。你能够应用它做性能的图形剖析或在大并发负载测试你的服务器/脚本/对象。三.筹备工作因为JMeter是应用JAVA写的,所以应用JMeter之前,先装置JAVA环境,本文就不讲不如装置JAVA环境了。.JAVA环境变量配置:https://jingyan.baidu.com/art...解压下载的二进制包,进入bin目录,应用jmeter.bat启动程序。启动之后会有两个窗口,一个cmd窗口,一个JMeter的 GUI。后面不要疏忽CMD窗口的提示信息手游: JMeter: CMD窗口的提示信息Don't use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use NON GUI Mode: jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]& increase Java Heap to meet your test requirements: Modify current env variable HEAP="-Xms1g -Xmx1g -XX:MaxMetaspaceSize=256m" in the jmeter batch file ...

July 23, 2021 · 1 min · jiezi

关于jmeter:性能工具之Jmeter压测Thrift-RPC服务

概述 Thrift是一个可互操作和可伸缩服务的框架,用来进行可扩大且跨语言的服务的开发。它联合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝联合的、高效的服务。 Thrift最后由facebook开发,07年四月开放源码,08年5月进入apache孵化器。thrift容许你定义一个简略的定义文件中的数据类型和服务接口(IDL)。以作为输出文件,编译器生成代码用来不便地生成RPC客户端和服务器通信的无缝跨编程语言。 其传输数据采纳二进制格局,绝对于XML和JSON等序列化形式体积更小,对于高并发、大数据量和多语言的环境更有劣势。 Thrift它含有三个次要的组件:protocol,transport和server,其中,protocol定义了音讯是怎么序列化的,transport定义了音讯是怎么在客户端和服务器端之间通信的,server用于从transport接管序列化的音讯,依据protocol反序列化之,调用用户定义的音讯处理器,并序列化音讯处理器的响应,而后再将它们写回transport。官网地址:thrift.apache.org 基本概念 架构图 堆栈的顶部是从Thrift定义文件生成的代码。Thrift 服务生成的客户端和处理器代码。这些由图中的棕色框示意。红色框为发送的数据结构(内置类型除外)也会生成代码。协定和传输是Thrift运行时库的一部分。因而应用Thrift能够定义服务,并且能够自在更改协定和传输,而无需从新生成代码。 Thrift还包含一个服务器根底构造,用于将协定和传输绑定在一起。有可用的阻塞,非阻塞,单线程和多线程服务器。 堆栈的“底层I / O”局部依据所开发语言而有所不同。对于Java和Python网络I / O,Thrift库利用内置库,而C ++实现应用本人的自定义实现。数据类型: 根本类型: bool:布尔值,true 或 false,对应 Java 的 booleanbyte:8 位有符号整数,对应 Java 的 bytei16:16 位有符号整数,对应 Java 的 shorti32:32 位有符号整数,对应 Java 的 inti64:64 位有符号整数,对应 Java 的 longdouble:64 位浮点数,对应 Java 的 doublestring:未知编码文本或二进制字符串,对应 Java 的 String构造体类型: struct:定义公共的对象,相似于 C 语言中的构造体定义,在 Java 中是一个 JavaBean汇合类型: list:对应 Java 的 ArrayListset:对应 Java 的 HashSetmap:对应 Java 的 HashMap异样类型: ...

June 27, 2021 · 5 min · jiezi

关于jmeter:性能工具之Jmeter压测Hprose-RPC服务

图片概述 Hprose(High Performance Remote Object Service Engine),国人开发的一个近程办法调用的开源框架。它是一个先进的轻量级的跨语言跨平台面向对象的高性能近程动静通信中间件,它反对泛滥语言,例如nodeJs, C++,.NET,Java,Delphi,Objective-C,ActionScript,JavaScript,ASP,PHP,Python, Ruby,Perl等。什么是RPC? RPC(Remote Procedure Call Protocol)——近程过程调用协定,它是一种通过网络从近程计算机程序上申请服务,而不须要理解底层网络技术的协定。 其实简略的说,就是象调用本地的类的办法样来调用服务器端的办法实现。具体参考以下文章: 性能根底之浅谈常见接口性能压测 Hprose特点 反对简直所有常见语言的实现,包含浏览器中的javascript成熟稳固,曾经在很多我的项目中失去验证始终在继续稳步更新国人开发,有QQ群在线反对,回复比拟疾速(5分钟之内)和实体能放弃很好的兼容性,实体工作量较小Hprose服务端 Hprose 2.0 for Java 反对多种底层网络协议绑定的服务器,比方:HTTP 服务器,TCP 服务器和 WebSocket 服务器。 HTTP 服务器反对在 HTTP、HTTPS 协定上通信。 TCP 服务器反对在 TCP 协定上通信,并且反对全双工和半双工两种模式。 WebSocket 服务器反对在 ws、wss 协定上通信。Hprose客户端 Hprose 2.0 for Java 反对两种底层网络协议绑定的客户端:HTTP 客户端 和 TCP 客户端。 其中 HTTP 客户端反对跟 HTTP、HTTPS 绑定的 Hprose 服务器通信。 TCP 客户端反对跟 TCP 绑定的 Hprose 服务器通信,并且反对全双工和半双工两种模式。 只管反对这两种不同的底层网络协议,但除了在对波及到底层网络协议的参数设置上有所不同以外,其它的用法都完全相同。官网地址: http://hprose.com/ 实现逻辑 Hprose利用大抵就做三件事: 复制Hprose文件进我的项目写Hprose服务端写Hprose客户端Hprose服务端要做的事就两件: new一个HproseHttpServer对象用这个对象公布服务,包含函数、办法、对象甚至类Hprose客户端要做的事就两件: new一个HproseHttpClient对象用这个对象调用服务端公布的各种服务压测示例 此处咱们应用官网自带的HellWorld示例 源代码:https://github.com/hprose/hpr... ...

June 24, 2021 · 2 min · jiezi

关于jmeter:通过Jmeter调用easyNmon监控Linux服务器资源

一:引言easyNmon的指标很明确:简略、轻量、绿色,在不须要装置任何开发语言环境和插件的状况下进行Linux系统资源监控 如在固定服务器上进行长期监控,倡议应用open-falcon、Telegraf+InfluxDB+Grafana、Prometheus+Grafana或netdata等优良的监控工具 二:装置部署easyNmon1.下载地址 https://github.com/mzky/easyN... 2.上传至linux服务器相干目录 cd /home/wchtar -zxvf easyNmon.tar.gzcd easyNmonnohup ./easyNmon & [root@localhost easyNmon]# tail -2000f nohup.out Hostname: localhost OS: centos(rhel) 7.6.1810CPU: Intel(R) Xeon(R) CPU E5520 @ 2.27GHz * 16 coresMem: 16 GB Free: 5 GB Used: 10079 MBNetwork: 265139168 bytes / 209661006 bytesDisk: 19 GB Free: 2 GB接口(Get): /start 启动监控,接口方式时,所有参数非必选 参数n为生成报告的文件名, 参数t为监控时长(单位分钟), 参数f为监控频率,每隔多少秒收集一次; http://11.12.110.38:9999/start?n=name&t=30&f=30 /stop 进行所有监控工作: http://11.12.110.38:9999/stop /report 查看报告: http://11.12.110.38:9999/report /close 敞开本身: http://11.12.110.38:9999/close治理页面: 通过浏览器拜访web治理页面: http://11.12.110.38:9999执行的nmon文件:nmon/nmon寄存报告的目录:reportJmeter1.下载地址 https://jmeter.apache.org/dow... 2.上传并解压Jmeter cd /home/wchunzip apache-jmeter-5.4.zip3.设置环境变量 ...

May 31, 2021 · 1 min · jiezi

关于jmeter:JMeter-JDBC-使用过程中遇到的坑

JDBC一、开始执行脚本时,因为读取自定义变量报错,导致呈现字符转化失败异样cannot be cast to java.lang.String具体 log 请看: java.lang.ClassCastException: org.apache.jmeter.protocol.jdbc.config.DataSourceElement$DataSourceComponentImpl cannot be cast to java.lang.String at org.apache.jmeter.threads.JMeterVariables.get(JMeterVariables.java:118) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.engine.util.SimpleVariable.toString(SimpleVariable.java:54) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:147) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.engine.util.CompoundVariable.execute(CompoundVariable.java:116) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.testelement.property.FunctionProperty.getStringValue(FunctionProperty.java:101) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.testelement.AbstractTestElement.getPropertyAsString(AbstractTestElement.java:281) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.testelement.AbstractTestElement.getName(AbstractTestElement.java:165) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.threads.JMeterThread.processSampler(JMeterThread.java:449) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.threads.JMeterThread.run(JMeterThread.java:254) [ApacheJMeter_core.jar:3.2 r1790748] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_144]起因起因是因为 Sampler 的名称带上读取公共参数${read-public-parameters}的例子,请查看以下截图。 解决办法将以上截图,名称的公共参数名称改为创立数据库-${testDataBaseName}即可。 二、查问中文内容无后果的解决办法在应用 JMeter 进行 JDBC 查询数据库时,sql 语句应用英文和数字能够查问到记录,而应用中文则查问不到记录,而且应用雷同的中文语句,能够在终端命令上和数据库管理工具上也能够查问到。 起因以上问题是因为数据库应用的编码与jmeter 查问时,应用的编码不统一,导致查问的条件转换后不统一,导致查问不到正确记录或查问到谬误记录。 JMeter 的默认编码是ISO-8859-1,而 mysql 数据库因为要存储中文信息,所以个别应用utf-8。在 JMeter 上填写的中文查问语句经字符编码转换到 mysql 上,不是之前填写的中文字段,导致查问条件生效,天然就无奈查问到正确的后果了。 ...

April 30, 2021 · 1 min · jiezi

关于jmeter:JenkinsJmeter接口成功率识别构建状态

问题形容Jmeter接口自动化测试对接Jenkins后,其中有局部接口执行失败返回对应错误码,然而Jenkins构建状态仍为胜利,此时再进行上游构建可能会存在问题。解决方案首先查看Jmeter测试报告,当接口全副执行胜利且断言胜利时,Success Rate为100.00% 在工程中减少执行shell,填写以下信息grep -c "100.00%" /home/ci/workspace/workspace/CKMSKdcTest/Report/TestReport.htmlif [ $? == 0 ]then exit 0else exit 1fi 通过搜寻报告中是否存在100.00%成功率来确认是否所有接口都执行胜利且断言胜利grep -c命令返回后果即示意$? == 0胜利,返回状态0,此时Jenkins通过状态0来确认build胜利,否则确认为build失败

April 7, 2021 · 1 min · jiezi

关于jmeter:Windows下JMeter分布式压测环境搭建

本文首发于:行者AI在我的项目中咱们常常会有压测的需要,而玲珑轻便且收费的JMeter也趁势成为了咱们的支流压测工具。 JMeter是Apache组织开发的开源我的项目,设计之初是用于做性能测试的,同时它在实现对各种接口的调用方面做得比拟成熟,因而,常被用作接口功能测试和性能测试。它可能很好的反对各种常见接口,如HTTP(S)、WebService、JDBC、FTP等、并以多种形式展现测试后果。 然而,在应用JMeter进行压测时,单机受限于内存,CPU,网络IO。咱们发现当被测接口须要很高的并发量,或者有些接口拜访数很高的时候,很容易就导致本地端口被占满,呈现申请报错的状况。此时,本地的一些TCP配置、性能峰值就可能成为性能测试的瓶颈点。(服务器还没被压崩,本地曾经崩了== ) 因而,本文梳理了基于JMeter的分布式压测环境的搭建办法来解决这个问题,并可能满足参数化的需要。 1. Jmeter分布式执行原理JMeter分布式执行时,抉择其中一台作为调度机(master),其余机器作为执行机(slave); master会在本地编辑好jmx压测脚本,执行时,master将jmx脚本发送至slave上,slaver执行时不须要启动jmeter,只须要把jmeter-sever.bat文件关上以非GUI模式执行; slave执行结束后将后果回传给master,并由master进行后果的汇总; 简略来说能达到的成果也就是:比方我在JMeter jmx脚本中设立的线程数是100,我在本地单机运行就会产生100次申请。如果我有1台master机器,2台slave机器,那么每次会向服务器发送的申请数总共就是100*3次。 2. 环境搭建办法2.1 环境筹备(1)master:JMeter版本5.1.1,jdk版本1.8; (2)slave:另外1台测试机,JMeter版本5.1.1,jdk版本1.8; 留神:JMeter和jdk版本与master统一,否则会呈现一些意外的问题。具体的装置教程就不在这里做赘述了,网上有很多参考文章,可自行查阅。 2.2 master机器配置(1)要保障master机器进行测试脚本的无效散发,须要配置slave机器的ip地址和端口号。在master装置目录的bin文件下,关上Jmeter/bin/jmeter.properties,找到remote_hosts=127.0.0.1的值并做批改: PS:若有多台近程机须要都加进来,用逗号隔开,后面127.0.0.1为本机,默认端口为1099(可自定义) (2)参数化配置 参数文件必须为绝对路径,否则脚本执行时无奈找到参数配置文件,因为master调度机在散发jmx脚本时,不会散发脚本中对应的参数文件。因而,须要手动将参数文件分发给slave机器(并且放在绝对路径下对应的地位,不然slave会找不到文件) 2.3 slave机器的配置(1)slave装置jdk和JMeter,并配置环境变量。尽量放弃与master机器版本统一。两台slave机器JMeter的装置门路也保持一致,不便后续进行参数化配置; (2)在Slave机器上,找到Jmeter/bin/jmeter.properties设置:server_port=1099; (3)进入slave的bin目录下,执行jmeter-server.bat,启动JMeter服务;启动胜利如下图: 2.4 验证分布式环境是否搭建胜利启动master机器中JMeter的GUI界面,在运行-近程启动选项中能够看到配置好的slave机器,此时阐明曾经连贯上近程slave机器。 如果你的环境在抉择全副启动之后,没有报错,且发动申请数量和事后jmx设置的线程数统一,阐明JMeter分布式测试环境搭建胜利,能够开始测试了。 3. 问题及注意事项master和slave必须是在同一网段;敞开防火墙;在master启动近程机器时,提醒FileNotFoundException;起因:自JMeter 4.0以来,RMI的默认传输机制将应用ssl协定。ssl协定须要密钥和证书能力工作。 解决方案:在Jmeter/bin/jmeter.properties中,找到server.rmi.ssl.disable,并设置:server.rmi.ssl.disable=true,示意不应用ssl。master和salve都得批改。 线程数的设定; 最终的并发线程数=jmx脚本设定的并发数*salve机器数量 JMeter分布式测试,是通过网络连接将执行脚本散发至机器下来的,也就是每个执行机拿到的脚本都是独立的,都会去执行jmx中设定的并发数。 同步定时器的应用; 该定时器的作用是用来设置集合点,从而阻塞线程,直到指定的线程数量达到后,再一起开释,能够霎时产生很大的压力。那么在分布式中是怎么来利用的呢? 举个栗子: 咱们在一个线程组中设立线程数为100,因为有3台slave,因而咱们冀望刹时并发能达到300,故减少了一个固定定时器,并冀望达到300的刹时并发,如下图: 启用3台slave机器之后发现,并没有任何申请。这是因为同步定时器的设置只在以后的jvm中起作用,而3台 slave则是3个独立的jvm,而同步定时器是须要在线程数达到设置的线程数后才会开释,若没有达到就会始终死 等。显然每台独立的slave永远也不会达到300的线程数,因为每台slave设置的线程数也才100,所以不会执行。 因而, 在分布式的状况下,设立的同步定时器中的阻塞线程数不要大于每个jvm中启用的线程数。 slave机过了一段时间打印了“starting...”之后,始终没有变动,也没有finish,master机也没有执行后果; 查看JMeter-sever.log发现:connection refused to host:172.2x.xxx.x.... 那该IP又是从哪里来的呢?最终发现,该IP为虚拟机网... 解决方案:如果近程负载机有虚构网络,须要敞开虚构网络。 论断:JMeter是JAVA利用,对于内存和CPU的占用较大,当应用单机进行测试时,对于高并发的压测,JMeter自身就会耗费本机很多资源,再想增大并发,一台机器就会显得有心无力,很容易达性能瓶颈。应用分布式压测,能够无效缩小因本机性能对压测后果的影响。

February 25, 2021 · 1 min · jiezi

关于jmeter:如何将Postman-API测试转换为JMeter以进行扩展

https://xueqiu.com/4544212997...https://xueqiu.com/4544212997...https://xueqiu.com/4544212997...

January 25, 2021 · 1 min · jiezi

关于jmeter:jmeter压测时自动获取token给其他接口使用

1、新增setup线程组,将获取token申请放到setUp线程组中; 2、调用获取token申请,应用json提取器或者正则表达式提取器,取得登录接口返回的token返回的token如上图所示格局,json提取器如下图设置。若应用正则表达式提取器,如下图设置: 阐明:(1)援用名称:下一个申请要援用的参数名称,如填写access_token,则可用${access_token}援用它。 (2)正则表达式:{"access_token":"(.+?)","token_type ():括起来的局部就是要提取的。 .:匹配任何字符串。 +:一次或屡次。 ?:在找到第一个匹配项后进行。 (3)模板:用$援用起来,如果在正则表达式中有多个正则表达式,则能够是$2$$3$等等,示意解析到的第几个值给title。如:$1$示意解析到的第1个值 (4)匹配数字:0代表随机取值,1代表全副取值,通常状况下填0 (5)缺省值:如果参数没有获得到值,那默认给一个值让它取,我填的null。 3、应用BeanShell后置处理器,将access_token设为全局变量。这样能力在别的线程组中调用该变量,否则只能在该线程组上面应用,不能在其余线程组中应用。${__setProperty(token,${access_token},)} 4、在下一个线程组中应用token时,应用${__property(token,,)}来援用。

January 12, 2021 · 1 min · jiezi

关于jmeter:JMeter压测时跑一会聚合报告就不动了

最艰难的事件就是意识本人!集体网站 ,欢送拜访!前言:最近,应用 JMeter 对我的项目进行压力测试;起初, JMeter 设置的并发线程数只是10个,而后在进行压力测试时,发现跑了一会后 JMeter 聚合报告 中的中数字全副不动了(像卡死了一样);下面简略形容了本文要说的问题;上面将次要从两方面来进行聊。 ①、具体问题形容 ②、具体的排查思路 问题详述:我的项目部署状况: 提供服务接口的我的项目 + Tomcat + Oracle提供服务接口的我的项目:接口中蕴含很多的数据库查问、更新、新增操作; 部署我的项目的应用服务器: Tomcat 连贯的关系数据库: Oracle 数据源配置 : 在Tomcat中的 context.xml 中配置数据源,连接池应用的是 Druid; 依据下面的部署状况, 而后应用 JMeter 进行压测,就呈现了文中一结尾说的问题,如下图: 问题排查:上面会简略的形容下此问题的排查过程,让大家在面对这种问题时,能够有一些思路。鉴于自己程度无限,如有问题敬请提出。 1、查看 JMeter 后果树:首先看下 JMeter 后果树 中是否存在谬误的日志,如果存在,而后看看是什么问题,具体进行解决; 然而,本文遇到这个问题时,发现后果树中并没有输入谬误日志,阐明申请接口时未呈现问题; 2、服务端排查:因为 JMeter 后果树中未展现出谬误的内容,阐明此时程序是失常运行着;而后查看服务端日志,发现没有呈现任何 异样 日志; 看到这,就发现怪异之处了,服务端也没有报任何谬误,那问题到底出在哪里呢? 别着急,还得去看 JMeter 的聚合报告去,通过聚合报告能够发现一些问题,就是聚合报告中 申请接口的均匀响应工夫太长了,高达 2 秒多,这个不失常呀,然而代码逻辑确保是没有任何问题的; 噢,对了,接口中存在很多数据库操作,是不是数据库呈现了问题,导致数据库操作比拟耗时呢;通过查看数据库服务发现是失常的;那是不是连接数不够用了呢? 嗯嗯,那来看下具体数据源的配置信息: 通过查看 数据源 的配置信息发现,Druid 连接池没有配置 最大连接数 以及最小连接数等 ;要晓得 druid默认的最大连接数是 8 ,而后咱再去应用命令查问下以后数据库的连接数: netstat -pan | grep 1521 | wc -l ,发现连接数是 8,阐明以后压测时,连接数曾经达到了最大值;因为连贯不够用,导致程序中进行 JDBC 数据库操作时须要期待可用连贯,所以说十分耗时,响应工夫就慢了,进而导致大量达到 Tomcat的申请得不到及时的解决,最终导致 JMeter 像卡死一样。 ...

September 24, 2020 · 1 min · jiezi

关于jmeter:使用jMeter测试通过SAP-ID-Service认证的SAP-Cloud-API

Recently I am working on a co-innovation project with one local partner in China. They will provide a Face Recognition solution which consists of a set of hardware & software. Once a person is recognized, the partner software will consume SAP S/4HANA contact creation API to create a contact instance in the system.Since we need to deliver this demo in SAP Cloud Forum site in Shanghai, and it is assumed that there will be lots of guests who would like to try this solution which leads to the possibility that multiple contact creation request would be sent to S/4HANA system simultaneously. As a result as one of demo preparation steps, I would like to generate a large number of concurrent contact creation request using jMeter and measure its performance. ...

August 31, 2020 · 5 min · jiezi

关于jmeter:如何使用jMeter对需要CSRF-token验证的OData服务进行并发性能测试

In my previous blog JMeter beginner – how to use JMeter to measure performance of OData service accessed parallelly I have demonstrate the way how to generate a large number of parallel request to a given OData service endpoint to measure the performance how this OData service implementation behaves via: Write a Java program by yourself, using standard API HttpClientBuilder provided by JDK.Use Open source tool JMeterIn that blog, the type of HTTP request I perform is “GET”, in that simple case no XSRF token generation and validation is necessary.Now in this blog we will deal with more complex stuff: initiate a large number of Service request creation request via HTTP post. In this case it is necessary to: ...

August 30, 2020 · 4 min · jiezi

关于jmeter:如何使用jMeter测试SAP-OData服务并发访问时的性能

For project reason I have to measure the performance of OData service being accessed parallelly. And I plan to use the open source tool JMeter to generate a huge number of request in parallel and measure the average response time. Since I am a beginner for JMeter, I write down what I have learned into this blog. I will continue to explorer the advanced feature of JMeter in my daily work. ...

August 29, 2020 · 3 min · jiezi

关于jmeter:jmeter-入门篇

1 Test Plan2 Add Test Group 3 Add Http Header Manageradd Authorization 4 Add Http Request 5 Add CSV Data Set Config参数的简要阐明: FileName:即同目录下csv文件的名称File Encoding: 默认为ANSIVarible Names: 定义文本文件中的参数名,参数之间逗号分隔.定义后可在脚本在以Shell变量的同样的形式援用Allow Quoated data: 双引号相干Recycle on EOF: 设置为True后,容许循环取值Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,进行运行Sharing Mode: 设置是否线程共享6 Add View Results Tree7 Add Aggregate Report

August 18, 2020 · 1 min · jiezi

关于jmeter:jmeter-入门篇

1 Test Plan2 Add Test Group 3 Add Http Header Manageradd Authorization 4 Add Http Request 5 Add CSV Data Set Config参数的简要阐明: FileName:即同目录下csv文件的名称File Encoding: 默认为ANSIVarible Names: 定义文本文件中的参数名,参数之间逗号分隔.定义后可在脚本在以Shell变量的同样的形式援用Allow Quoated data: 双引号相干Recycle on EOF: 设置为True后,容许循环取值Stop Thread on EOF: 当Recycle on EOF为false并且Stop Thread on EOF为true,则读完csv文件中的记录后,进行运行Sharing Mode: 设置是否线程共享6 Add View Results Tree7 Add Aggregate Report

August 18, 2020 · 1 min · jiezi

jmeter相关脚本testerhome

jmeter相干脚本-testerhome

July 12, 2020 · 1 min · jiezi

Jmeter之访问一个SSL双向认证的接口

我之前的章节接口测试之证书,对于各种不同格局的证书做了阐明。可是Jmeter须要的证书都不是这篇文章里提到的。 Jmeter须要导入的证书是keystore证书。这一章节,我讲会以一个例子来阐明如何应用Jmeter来拜访一个SSL双向认证的接口。 1 生成keystore证书如果你领有的是key和crt的话,那你要失去keystore的证书须要经验两个步骤。一步是依据key和crt生成p12,而后应用p12生成keystore。 1.1 把.key + .crt 生成 P12 证书命令行执行上面的命令,会生成一个p12的文件,叫server.p12 ,留神同时还会设置一个p12的明码,须要记住,下一步会用到。 openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt这一部分能够参考 [接口测试之证书]这篇文章1.2 应用p12生成keystore文件1.2.1 keytool介绍这里须要提到提到jdk自带的keytool工具,咱们须要应用这个工具来生成keystore证书。 咱们能够应用which命令,查看keytool的装置门路 Hongs-MacBook-Pro:bin hong.liu1$ which keytool/usr/local/opt/openjdk@11/bin/keytool1.2.2 keytool生产keystore先cd到方才生成的p12文件的门路下,而后执行上面命令 keytool -importkeystore -srckeystore certificate.P12 -srcstoretype PKCS12 -srcstorepass certificate_password -keystore mystore.keystore -storepass keystore_passwordcertificate.P12: 就是之前生成的p12证书,在咱们的例子里叫 server.p12certificate_password: p12的明码keystore_password: 设置keystore的明码,这个明码要记住,之后jmeter导入后须要应用。咱们这个例子里,咱们的命令如下,p12的明码和keystore的明码咱们都设置为porschepreview keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass porschepreview -keystore myporshe.keystore -storepass porschepreview到这一步为止,咱们就生成了一个名字为 myporshe.keystore 明码为 porschepreview的证书。 2 证书导入Jmeter2.1 进入SSL 治理页面导入证书点击左上角的 Options->SSL Manager, 选中之前生产的 myporsche.keystore 证书。 ...

July 9, 2020 · 1 min · jiezi

Jmeter如何提取响应头部的JSESSIONID

Jmeter如何提取响应头部的JSESSIONID

July 8, 2020 · 1 min · jiezi

jmeter对https的网站进行测试是否要导出https的证书在jmeter里头进行转换

jmeter对https的网站进行测试,是否要导出https的证书,在jmeter里头进行转换

July 5, 2020 · 1 min · jiezi

JMeter-How-to-record-HTTPS-traffic

JMeter : How to record HTTPS traffic?

July 5, 2020 · 1 min · jiezi

jmeter入门之用户变量设置文件参数化方法

一:jmeter用户变量设置1.在线程组鼠标右击--添加--配置元件-用户定义的变量, 2.根据业务需求自定义变量的名称,添加需要的变量和对应的值 3.在脚本对应位置添加参数 二:文件参数化:两种方式: 1.函数助手 2.csv data set config 函数助手: jmeter(版本5.3) 工具--函数助手对话框--选择函数类型,以csvRead为例说明使用过程, 1.函数参数第一行值填写测试构造数据文件位置,如E:jmeterparams.txt, 2.第二行填写数据中内部数组的第一个数据下标0, 3.点击生成按钮,将函数字符串拷贝到相应的脚本请求中 csv data set config 1.添加--配置元件--csv data set config, 2.设置对应的数据 文件名:测试数据的文件名文件编码:utf-8变量名称:根据业务自定义,如添加帖子,测试数据包括title,des等分隔符:与文件数据中分隔符一致,如.text文件中用",",这里也应该填","下面几个暂时可以不动,需要用到的情况再分析,灵活修改3.将参数添加到对应的脚本请求中

July 2, 2020 · 1 min · jiezi

Jmeter数据库批量新增

这里使用Jmeter5.1.1版本,需要对Jmeter会继续基础操作。 如果需要进行体验,导入 jmx文件 到Jmeter中。 使用到的 mysql-connector-java-5.1.48.jar、jmeter-function-plugins。 一、适用情况1、直接对数据表进行重复性操作2、数据有严格的创建函数或存储过程限制,不能通过编写数据库存储过程实现3、需要一些生成随机数据二、Jmeter数据库操作计划1、创建线程组 2、创建JDBC连接配置1、创建JDBC连接配置2、设置数据库连接池名称,后面使用3、设置JDBC连接参数,包括url、驱动类名、用户、密码 3、创建数据库操作请求1、创建JDBC请求2、指定JDBC请求使用到的数据连接池名称,上一步已经定义的。3、编写数据库操作SQL,字段值可以是常量,也可以是变量。变量写法符合Jmeter变量写法,使用${}包括起来。 4、创建字段随机值1、创建用户变量2、如果需要每次获取用户变量值时,需要进行重新计算,请勾选“每次迭代更细一次”3、定义变量名和变量的取值。如果需要使用到Jmeter函数,可以使用Jemter函数助手进行帮助。 5、执行计划三、Jmeter函数Jmeter函数返回的都是字符串类型的数据,如果需要时间格式,可能需要额外的转时间处理 Jmeter函数助手目的是为了快速写出正确的Jmeter函数表达式 这里使用到自定义Jmeter函数,需要复制 jmeter-function-plugins-1.0-SNAPSHOT.jar 到 %JMETER_HOME%/lib/ext下,并重启Jmeter 1、Jmeter函数助手入口 2、Jmeter函数助手使用 3、函数说明这里只列举例子中使用到的一些函数,更多函数使用参考Jmeter官网函数说明 函数名使用例子解释说明__RandomString${__RandomString(6,0123456789abcdefghijklmnopgrstuvwxyz,)}从“0123456789abcdefghijklmnopgrstuvwxyz”中生成随机的6个字符串,可重复__time${__time(yyyy-MM-dd HH:mm:sss,)}按指定时间格式,生成随机时间字符串__UUID${__UUID}生成UUID,包含“-”__Random${__Random(10,99,)}生成10到99的范围的一个数字,包含10和99__RandomChineseName${__RandomChineseName}生成随机中国姓名(非内置函数)__RandomMobile${__RandomMobile}生成随机手机号码(非内置函数)__RandomIdCardNo${__RandomIdCardNo}生成随机身份证件号(非内置函数)__RandomEmail${__RandomEmail}生成随机电子邮箱(非内置函数)__RandomIP${__RandomIP}生成随机IPv4地址(非内置函数)四、自定义Jmeter函数上一步使用到的Jmeter自定义函数,需要进行Java编码。参考项目 jmeter-function-plugins

October 5, 2019 · 1 min · jiezi

jmeter性能接口测试从入门到精通

本场交流内容大纲:1.JMeter介绍及安装配置2.实战脚本编写3.脚本增强-参数化4.脚本增强-关联5.脚本增强-断言6.脚本增强-思考时间、集合点7.html报告生成8.JMeter操作数据库9.插件使用 JMeter是一款基于Java开发的、开源的跨平台测试工具,使用它可以做接口测试,可以做性能测试,甚至数据库测试,虽然轻量级但功能强大,可以说是麻雀虽小,五脏俱全,对于测试人员来说,甚至不用编码即可完成一些常规测试,对于一些扩展功能,官方提供了插件,若还不能满足我们的需求,我们甚至可以自己去编码写插件集成进去,这样一款工具,对于测试人员,可以说是一款利器。 下面我们一一来看:Jmeter的安装其实很简单,只需配置好jdk环境变量,然后去官网下载最新版本,解压即可使用,点击jmeterbinjmeter.bat即可运行jmeter,真正的开箱即用。下载地址:请点击这里,另附上jdk8下载地址。1.脚本实战Jmeter的组件已经把一些底层的东西做了封装,这使得我们在一部分基础场景下,不需要编码即可完成测试。下面已一个简单的具体实例来完成脚本的编写。如果有接口文档我们可参考接口文档编写脚本,若无接口文档,我们可通过抓包来写,如图一:登录接口接口文档 抓包图如下:图二 图 二 通过接口文档或抓包,我们可以掌握以下信息:Host、接口地址、请求方法、参数字段、header我们写成脚本,如下图:图三、图四、图五 图 三 图 四 图 五运行结果如图六: 图 六脚本写完了,真正的工作时,我们是需要脚本增强的,下面我们通过几个方法来实现。2.参数化在实际的测试过程中会发现,就登录来说,我们需要大量账户来进行测试,这时我们总不能把脚本复制百遍千遍,你会发现,脚本逻辑是一样的,只是用户名密码变了。所以我们可以进行参数化。说到参数化,有些有基础的同学第一反应可能是csv,没错,但这只是其中的一个,其实参数化方式有很多,但总结起来,无非是csv读取,数据库读取,程序生成,还有一个特殊的是关联,关联其实是一种特殊的参数化。Csv读取比较常用比较简单,适合预先把数据存储起来的时候使用,那数据库读取其实和csv一样,只不过,读取的数据源改为了数据库而已,读取前需要先配置jdbc连接。至于程序生成就有很多了,比如,订单时间,我们是无法事先生成保存的,只有当订单生成时,才会读取当前服务时间,然后插入,在jmeter中,已经预置了此函数,选项-函数助手对话框中的__time,注意是两个下划线。可生成当前时间,默认是当前时间的时间戳,如图: 图 七有的同学会想,我们公司订单时间是2019-01-01 0:01:30这种格式啊,没关系,支持时间格式化,想要什么样的格式,自己调就好了,如图: 图 八函数助手还有很多函数,如生成随机字符串、随机日期、随机数字等等,在不同的场景下有不同的应用,甚至可以自己写一个,比如身份证号,jmeter本身肯定不支持,但是我们可以写一个方法,每次调用返回一个身份证号,这个相信很多做金融相关的小伙伴用到的还是很多的。参数化的方式有很多,我们需要学会在不同的场景下,使用最适合的方式。2.关联关联说白了就是把上一个请求返回的数据保存下来,在后续的请求中使用此数据的一个过程。说起关联,很多小伙伴就想到了正则表达式提取,图样图森破,jmeter已经不是以前的jmeter了,关联支持的方式多种多样,比如接口中,常用的数据格式是json,那么,当然用json提取器最合适了,效率更高,使用更简洁,下面以一个实例来看一下:还是刚才的登录接口,登录后,请求个人中心接口,那么,服务端怎么知道是谁请求此接口呢,token由图二或图六可以看出,登录接口返回了token,个人信息接口,在请求时需要带上此token,服务端方可识别是哪个用户在请求,所以在header中需要带上token,抓包截图为证: 图 九那,脚本怎么写呢?我们需要在登录接口返回值中提取token,如图: 图 十在个人信息接口请求时的header中带上提取的token即可,就这么简单!如图: 图 十一4.断言很多同学,不加断言,运行脚本,查看结果树一片绿,很开心,觉得没问题jmeter不加断言的情况下,只要请求发送出去,服务端返回了,且状态码不是4XX,5XX,它就认为是成功的,用张三的账号密码,登进系统,显示是李四的账号信息,jmeter也不会报错的,你认为靠谱么,说两个直白的例子:导弹发射出去,就认为成功了,打到哪儿不管。。。送快递,送到手里就算成功,不管快递物品对不对。。。所以,不加断言,是万万不行的,我们需要一个确认的动作。断言一般用的最多的是响应断言和json断言,在需要断言的请求上直接添加即可,像一般的接口测试,数据格式是json,一般都用json断言。5.思考时间还是以登录为例,我们人类需要输入用户名密码点击登录按钮等一系列操作,这期间至少需要几秒钟,而如果通过工具的话,那可能就是毫秒级了,为了使用工具也可以模拟人类的操作,就有了思考时间设置,在jmeter中,可以通过定时器去实现6.集合点像在一些秒杀、抢购等活动时,瞬间并发量会很大,这时怎么用jmeter去模拟呢,有人可能会说线程组啊,设置100个线程,但是,要知道,jmeter中线程是谁先起来谁先运行,是不会等着攒够100个再跑的,而我们要想实现模拟并发,就是要攒够100个,然后再同时发起请求,这时就用到了集合点,jmeter中集合点是通过定时器中的Synchronizing Timer来实现的。7.操作数据库jmeter连接数据库和java连接数据库是一样的,以mysql为例:首先我们需要下载java连接mysql数据库的驱动mysql-connector-java-5.1.46-bin.jar放到jmeter/lib目录下,然后从配置元件里面添加JDBC Connection Configuration,进行主要的配置,需要注意的点已用红框圈选,如图: 图 十二配置完成后,我们再在取样器中添加JDBC Request,在JDBC Request中写sql进行操作即可,如图: 图 十三运行查看结果: 图 十四8.生成HTML报告Jmeter从3.0开始有了美观的html报告,命令行运行生成,第一种,运行测试时生成Jmeter –n –t test.jmx –l test.jtl –e –o ./repot第二种,先运行测试生成结果文件,再生成报告Jmeter –n –t test.jmx –l test.jtlJmeter –g test.jtl –o ./report在最新的5.1.1版本中,提供了图形界面生成HTML报告的入口,菜单栏-选项-generate HTML report,如图十五 ...

July 26, 2019 · 1 min · jiezi

jmeter代理录制

1、浏览器设置代理2、jmeter添加http代理服务器3、录制脚本后,删除不需要的请求4、取消代理5、导出csv,分析报告1、浏览器设置代理(Chrome) 勾选http和https,填写127.0.0.1,端口8088,点击好后,记得点应用 2、jmeter添加http代理服务器1、端口:与浏览器代理设置的端口一致2、目标控制器:填写请求存放的地方3、点击启动 导出csv中包含表头1、创建一个空文件夹,用于保存报告2、修改配置 vi bin/jmeter.properties,修改后重启jmeter/Header 定位 jmeter.save.saveservice.responseHeaders=truejmeter.save.saveservice.requestHeaders=true 3、勾选Save Label 4、浏览选中空文件,之后后面补上目标文件名(不需要新建),直接写名字就好

June 27, 2019 · 1 min · jiezi

jmeter从登录接口抓取headersession中的token信息做为其他接口的参数使用

说明一下场景,我们准备先进行用户登录,再去获取当前登录的用户发表的文章列表。 首先add一个Thread Group,在此基础上创建两个http request,如图: 填写好login接口需要的信息,如下图: 我们可以先运行一下Login,添加一个View Results Tree看一下返回的header包含的信息: 运行没有问题之后选择 login --> add --> post processors --> Regular Expression Extractor 为login请求添加一个后置的正则表达式提取器,目的是抓取我们login接口返回的session信息或者header信息。我这里是需要主区header中的信息,所以选择response Headers标签页: 顺便附上常用正则操作符: 至此login请求设置完毕,接下来设置我们的下一个请求接口: 单单设置接口是没有token信息的,我们还需要添加一个Http Header Manager,右击选择 posts --> add --> Config Element --> Http Header Manager,配置一下: ok,到这里就全部完事了,点击运行,就可以看到后台已经收到我们刚才发送的参数了~

May 22, 2019 · 1 min · jiezi

JMeter-Beanshell

Jmeter实现对字符串加密 package com.wjika.test;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class mymd5{ public static String getMd5(String plainText) { try{ MessageDigest md = MessageDigest.getInstance("MD5"); md.update(plainText.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(""); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } //32位加密 return buf.toString(); // 16位的加密 //return buf.toString().substring(8, 24); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); return null; } }}生成Jar包放入jmeterlib目录中。 ...

May 21, 2019 · 1 min · jiezi

jmeter入门mac

使用版本jmeter3.1 1、下载zip文件并解压2、cd apache-jmeter-3.1/bin3、./jmeter 运行ps或者直接到bin目录,双击jmeter运行 下载地址jmeter历史版本下载jmeter下载地址(最新版本)

May 1, 2019 · 1 min · jiezi

接口测试

前端iOS安卓后台java, python, php, .net接口把client端和server端联系起来,两端之者使用的数据类型是json。json是一种通用的数据类型,返回的格式为key-value,键值对,{“name”:“张三”,“age”:23"}也有使用xml的,格式为:<name>zhangsan</name><sex>male</sex>测试接口之前,得有一个接口文档,文档中有请求方式,请求参数,响应信息等。功能测试测的是业务逻辑。接口测试属于业务测试中一种。关注业务逻辑正常的,异常的如果是get请求,不需要借助任何工具,只需要用流星器就可以发送请求http://api.xxxx.cn/api/user/stu_info?stu_name=小黑返回结果如下:{ “error_code”: 0, “stu_info”: [ { “id”: 5671, “name”: “小黑”, “sex”: “男”, “age”: 28, “addr”: “河南省济源市北海大道32号”, “grade”: “天蝎座”, “phone”: “18799932946”, “gold”: 120054446 } ]}请求中格式为http://ip:port/路径/接口名?key1=value1&key2=values2。如果有多个参数中间用&连接多个参数使用postman发送请求POST请求入参为json类型,body中选择raw,JSON类型,如未标明,使用key-vaule格式cookie,放在本地的一个键值对,请求时发送cookie中的sessionId与服务端sessionId进行匹配,匹配成功则通过验证。session,放在服务端的一个键值对,有一个过期时间。查看Cookie信息,通过浏览器F12可以看到存储的cookie信息添加Cookie信息,在Headers中添加Cookie信息添加header信息文件上传POSTMAN全局变量使用方式DNS, HTTP协议,三次握手,4次挥手HTTP请求分为两个部分,请求头和请求体,请求头中是一个额外的信息,比如浏览器类型,cookie等。请求体中传的是具体的数据。GET请求只有请求头,没有请求体。它的数据直接放在url中。POST请求放在body中。GET请求有长度限制,POST请求没有长度限制。GET请求没有POST安全,但通过抓包都可以看到信息。请求头(header):额外的信息浏览器cookie需要什么样的数据请求体(body):key=value接口用例项目模块用例id用例描述请求URL请求方式请求数据预期结果请求报文返回报文测试结果测试人员HTTP状态码200 请求成功302 重定向404 客户端请求不合法,页面未找到500 服务端有问题使用JMeterJmeter乱码处理JMeter查看结果树中返回信息乱码在Jemter的bin目录下,jmeter.properties文件中添加sampleresult.default.encoding=utf-8,后重启jmeter。JMeter中body data中乱码Jmeter的bin目录下,jmeter.properties文件中添加jsyntaxtextarea.font.family=Hack,后重启jmeter。GET请求POST请求POST入参为JSON类型,如果避免插入到数据库中的中文为乱码,需要在Content encoding中填写utf-8。添加cookie信息,cookie信息写在HTTP信息头管理器中,HTTP信息头如果放在线程组下与HTTP请求同级,则线程组中的所有请求都可以使用该HTTP信息头中的信息,如果放在某个HTTP请求下,则只对该请求单独生效。添加Referer信息文件上传,Jmeter 3.0以上版本需要填写MIME TYPE信息,随便填写就行,比如填写为text。JMeter参数化用户自定义的变量函数助手中__Random__counter__time从文件中读取线程组->配置单元->用户自定义的变量,填写变量名和变量值使用方式为${变量名}使用函数助手中__Random函数成生随机数,在此例中由于压测用户注册功能,用户名是不可重重的,此处的随机数用于生成用户名后的数字选项->函数助手对话框->__Random,输入最小值和最大值后,生成。使用方式如下:在线程组中循环5次,在查看结果树中可以看到5次请求中的用户名都不一样使用计数器__counter函数进行自增使用__time函数取时间,需要传入一个格式,yyyyMMddhhmmss,HH为24小时制,hh为12小时制时间表示格式化好的时间 201904161004时间戳,在__time函数中不对其进行格式化出来的就是时间戳,JMeter为Java开发,Java中时间戳默认是精确到毫秒,所以需要除以1000才是真真的时间戳。从文件中读取数据有场景需要大批量数据,数据是从数据库中导入到文件中。线程组->配置元件->CSV Data Set Config如果Filename中只写了文件名,则需要把文件放到Jmeter的bin目录下。如果文件中有多列,用符号分隔,需要在Delimiter中添写相关的符号。在Variable Names中也需要填写多个变量名,中间用",“分隔,会每次取一行数据Ignore First Line,是否忽略第一行Allow quoted data,是否允许带引号Recycle on EOF,遇到文件结束后是否循环Stop thread on EOF,遇到文件结束符停止线程Sharing Mode,是否所有线程组生效,还是只在当前线程组生效All Threads,所有线程组Current Thread Group,当前线程组关联关联:调用第一个接口,从第一个接口中返回的数据中取到某个值,放到第二个接口中使用HTTP请求->后置处理器->JSON PATH EXTRACTOR登录接口返回为如下:{ “error_code”: 0, “login_info”: { “login_time”: “20190416115043”, “sign”: “96b4de24614f0796402c54f889e50147”, “userId”: 9786 }}我们需要取到login_info中的sign,将sign的值放到充值接口中用作cookie值。写法为$.login_info.sign,其中$代表最外层的{},一层一层往内取。将取到的sign放到充值接口的cookie中如果需要查看各类变量中取到的值,可以使用线程组->Sampler->Debug Sampler查看各变量所对应的值。JMeter压测Jmeter压测分布式压测linux下运行10-15分钟稳定性测试,2天或一周左右在线程组中设置线程数及压测的持续时长,如果要进行长时间压测,需要勾选"永远”,以及勾选调度器,并填写持续时间填写了持续时间后,结束时间会失效填写了启动延持后,启动时间会失效Ramp-Up Period,线程在多少秒内会启动完,0为所有线程全部同时启动。一般为1即可。TPS,服务器每秒钟能处理的请求数响应时间,请求从发出后与接收到服务器返回给数据所花时间聚合报告Samples,发出的请求数Average,平均响应时间,单位为毫秒Throughput,TPSError%,错误率,不同业务要求不一样,像银行业务要求100%的正确率。断言,用于校验结果JMeter操作数据库测试计划->Add directory or jar to classpath线程组->配置单元->JDBC Connection Configuration填写Variable Name填写Databse URL,jdbc:mysql://192.168.1.116:3307/bugfree?characterEncoding=UTF-8&allowMultiQueries=true添加JDBC Request,在Variable Name中需要填写JDBC连接配置中填写的变量名JDBC请求中,Query Type为Callable Statement时,可以同时执行查询和更新语句。JMeter分布式压测有多台电脑,每台电脑上都有jmeter,且这几台电脑能相互PING通控制机修改本地Jmeter中jmeter.properties中remote_hosts项,添加负载机ip和端口,remote_hosts=192.168.177.128:1099如果需要控制机也发送压力的话,可以在remote_hosts中加班localhost:1099在负载机上修改jmeter.properties文件,(如果负载机为Windows,不需要修改rmi的两项)server_port=1099client.rmi.localport=0server.rmi.port=1099负载机上运行jmeter-server.bat如果负载机为Linux,需要关闭防火墙./jmeter-server -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx(负载机本机IP)如果控制机也发送压力,同样需要运行jmeter-sever.jbat如果有参数化文件,需要在其它负载机的同样位置放置一份。控制机,运行->远程全部启动负载机压测时,控制机的查看结果树中响应结果内容会为空,需要添加断言,用以判断返回结果是否正确。Linux下NO GUI非图形化方式运行Jmeter把Jmeter的bin目录加入到环境变量(不加环境变量则需要到Jmter目录下运行jmeter命令)把在windows上制作好的jmeter脚本放到Linux上如果有参数化文件,需要把参数化文件放到jmeter的bin目录中运行jmeter -n -t /路径/脚本名.jmx -l 结果.jtl-n 非图形化界面运行-t 指定测试脚本-l 指定结果文件,以.jtl结尾生成.jtl文件后,下载到windows上打开jmeter,添加查看结果树,在结果树中打开.jtl文件 ...

April 18, 2019 · 1 min · jiezi

sh jmeter 报配置错误

jmeter 很好的测试工具,尤其是开发APP中真对接口测试,比postman更方便快捷!推荐使用!1、问题描述:输入 sh jmeter 命令后,报配置错误:TerrydeMac-mini:bin dgtle$ sh jmeterjmeter: line 128: [: : integer expression expectedjmeter: line 192: /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/bin/java: No such file or directory2、根本原因:jdk版本已升级,需要重新配置3、问题定位查看电脑当前java版本TerrydeMac-mini:bin dgtle$ Java -versionjava version “1.8.0_191"Java(TM) SE Runtime Environment (build 1.8.0_191-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)查看环境变量中的信息TerrydeMac-mini:bin dgtle$ /usr/libexec/java_home -VMatching Java Virtual Machines (1): 1.8.0_191, x86_64: “Java SE 8” /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home经对比:jmeter报错的版本是:1.8.0_121java版本是:1.8.0_1914、解决方案TerrydeMac-mini:bin dgtle$ vim .bash_profileTerrydeMac-mini:bin dgtle$ cd TerrydeMac-mini: dgtle$ vim .bash_profileTerrydeMac-mini:~ dgtle$ source ~/.bash_profile其中.bash_profile信息如下:export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Homeexport CLASSPAHT=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$PATH把1.8.0_121修改成1.8.0_191,保存然后执行source ~/.bash_profile。问题解决! ...

April 10, 2019 · 1 min · jiezi

JMeter参数化(一):CSV数据的使用

JMeter的参数化内容不少,我们分几次来讲解,今天先讲最基础的使用CSV数据。 在测试过程中我们需要批量的随机性数据,比如测试登录需要用到大量的用户名及对应的密码,我们可将需要的数据写在csv文件中,并在JMeter中读取此文件中的数据。 0.准备工作 新建csv文件,并用notepad++等专业代码编辑工具打开编辑(保证文件编码格式为utf-8),按照JMeter读取csv文件的逻辑,每次读取一行参数,一行代表一组参数。我准备的数据部分如下,其中逗号需要注意是英文符号,其中也故意参杂了一些错误的用户名和密码:添加CSV数据文件设置在需要用到参数的接口上右键点击添加,选择CSV数据文件设置。配置内容如下:变量名称:待会调用时用到的名称忽略首行:是否忽略csv文件中的首行内容分隔符:一般使用英文逗号使用变量在需要使用的接口中,将参数值改为变量 3.设置线程数及循环次数

April 8, 2019 · 1 min · jiezi

Linux安装Jenkins+JMeter+ANT自动化测试平台

前排提示下面几个工具运行都需要基于jdk,请大家自行百度安装jdk,并配置好环境变量安装jmeter下载包,解压,配置JMeter_home点击这里下载最新的jmeter的tar包,直接放到服务器的/root目录中输入命令tar zxvf apache-jmeter-5.1.1.tgz解压2.配置JMeter_HOME打开/root下的.bash_profile文件,下面的代码写入文件最后export JMETER_HOME=/root/apache-jmeter-5.1.1 export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/logkit-2.0.jar:$CLASSPATH export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin保存后运行 source /root/.bash_profile (让配置文件立马生效)运行 jmeter -v,成功后如下图所示3.jmeter自带的报告模板内容不够详细,我这提供一个网上的更加详细的模板,点此下载,放到/root/apache-jmeter-5.1.1/extras/目录下4.点击这里下载jmeter的插件jar包,放到/root/apache-jmeter-5.1.1/lib/ext/目录下安装ANT1.点击这里下载最新的ANT tar包,同一解压到/root目录下2.编辑/etc/profile,把下面的代码添加到文件末尾ANT_HOME=/root/apache-ant-1.10.5CLASS_PATH=.:$JRE_HOME/libPATH=$JRE_HOME/bin:$ANT_HOME/binexport ANT_HOME CLASS_PATH PATH3.保存后运行 source /etc/profile,使配置立即生效4.运行ant -version看一下配置成功没有,成功的话如下图所示安装运行Jenkins0 Jenkins需要放在tomcat中运行,tomcat下载后解压到/root目录下几个,参考上面jmeter安装步骤第1步即可1 点击这里下载Jenkins最新的war包,并放到/root/apache-tomcat-7.0.86/webapps/目录下。2 运行命令 cd apache-tomcat-7.0.86/webapps/ 进入war包所在目录, 运行命令nohup java -jar jenkins.war –httpPort=8080 & 启动Jenkins。8080为默认端口,如果和其他服务冲突可改变为其他端口3.浏览器访问 服务器地址:端口号(例如192.168.0.100:8080)即可访问Jenkins4.Jenkins中创建任务和在win环境下没有什么区别,只是需要改变路径路径配置1 在全局工具配置中添加ant2 build.xml中的报告生成路径下面三个步骤是针对 HTML report和performance 和E-mail插件的3 把任务中的html报告路径和build.xml中的路径匹配起来4 把任务中的jtl路径修改为build.xml中的路径(这里的时间变量是我自定义的,具体原因可看这篇文章)5 配置邮件提醒的附件路径

March 26, 2019 · 1 min · jiezi

Jmeter压测工具使用总结

1、常用测试工具对比1、loadrunner 性能稳定,压测结果及细粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多 2、apache ab(单接口压测最方便) 模拟多线程并发请求,ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载, 简单DDOS攻击等 3、webbench webbench首先fork出多个子进程,每个子进程都循环做web访问测试。子进程把访问的结果通过pipe告诉父进程,父进程做最终的统计结果。2、Jmeter目录文件讲解bin:核心可执行文件,包含配置 jmeter.bat: windows启动文件: jmeter: mac或者linux启动文件: jmeter-server:mac或者Liunx分布式压测使用的启动文件 jmeter-server.bat:mac或者Liunx分布式压测使用的启动文件 jmeter.properties: 核心配置文件 extras:插件拓展的包 lib:核心的依赖包 ext:核心包 junit:单元测试包3、Jmeter基础功能组件介绍线程组和Sampler1、添加->threads->线程组(控制总体并发) 线程数:虚拟用户数。一个虚拟用户占用一个进程或线程 准备时长(Ramp-Up Period(in seconds)):全部线程启动的时长,比如100个线程,20秒,则表示20秒内100个线程都要启动完成,每秒启动5个线程 循环次数:每个线程发送的次数,假如值为5,100个线程,则会发送500次请求,可以勾选永远循环 2、线程组->添加-> Sampler(采样器) -> Http (一个线程组下面可以增加几个Sampler) 名称:采样器名称 注释:对这个采样器的描述 web服务器: 默认协议是http 默认端口是80 服务器名称或IP :请求的目标服务器名称或IP地址 路径:服务器URL Use multipart/from-data for HTTP POST :当发送POST请求时,使用Use multipart/from-data方法发送,默认不选中。 3、查看测试结果 线程组->添加->监听器->察看结果树4、Jmeter的断言基本使用增加断言: 线程组 -> 添加 -> 断言 -> 响应断言 apply to(应用范围):Main sample only: 仅当前父取样器 进行断言,一般一个请求,如果发一个请求会触发多个,则就有sub sample(比较少用)要测试的响应字段:响应文本:即响应的数据,比如json等文本 响应代码:http的响应状态码,比如200,302,404这些 响应信息:http响应代码对应的响应信息,例如:OK, Found Response Header: 响应头模式匹配规则:包括:是响应文本的一个子集,是包含关系,可以用正则表达式 匹配:使用正则表达式匹配 equals:完全与响应文本相同,不能使用正则表达式 substring:也是包含关系,但是不能使用正则表达式2、断言结果监听器: 线程组-> 添加 -> 监听器 -> 断言结果里面的内容是sampler采样器的名称 断言失败,查看结果树任务结果颜色标红 通过结果数里面双击不通过的记录,可以看到错误信息)3、每个sample下面可以加单独的结果树,然后同时加多个断言,最外层可以加个结果树进行汇总5、结果聚合报告分析新增聚合报告:线程组->添加->监听器->聚合报告(Aggregate Report)lable: sampler的名称 Samples: 一共发出去多少请求,例如10个用户,循环10次,则是 100 Average: 平均响应时间 Median: 中位数,也就是 50% 用户的响应时间 90% Line : 90% 用户的响应不会超过该时间 (90% of the samples took no more than this time. The remaining samples at least as long as this) 95% Line : 95% 用户的响应不会超过该时间 99% Line : 99% 用户的响应不会超过该时间 min : 最小响应时间 max : 最大响应时间 Error%:错误的请求的数量/请求的总数 Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps KB/Sec: 每秒接收数据量6、Jmeter用户自定义变量1、线程组->add -> Config Element(配置原件)-> User Definde Variable(用户定义的变量) 2、引用方式${XXX},在接口中变量中使用7、CSV数据文件使用1、线程组->add -> Config Element(配置原件)-> CSV data set config (CSV数据文件设置) 2、如果是多个参数需要同时引用,则在CSV数据文件里面设置加多个字段 Variabled names(comma-delitited): csv_name,csv_pwd8、数据库压测操作配置讲解:1、Thread Group -> add -> sampler -> jdbc request 添加数据库请求 2、jar包添加 mysql-connector-java-5.1.30.jar 添加连接数据库的jar包 3、JDBC connection Configuration 配置JDBC request->add -> config element -> JDBC connection configuration核心配置Max Number of connections : 最大连接数MAX wait :最大等待时间 Auto Commit: 是否自动提交事务DataBase URL : 数据库连接地址 jdbc:mysql://127.0.0.1:3306/blogJDBC Driver Class : 数据库驱动,选择对应的mysqlusername:数据库用户名password:数据库密码数据库语句:1、Debug Sampler使用(结果树中查看) Thread Group -> add -> sampler -> debug sampler 2、参数讲解:(sql结尾不要加";") 1、variable name of pool declared in JDBC connection configuration(和配置文件同名) 2、Query Type 查询类型 3、parameter values 参数值 4、parameter types 参数类型 5、variable names sql执行结果变量名 6、result variable names 所有结果当做一个对象存储 7、query timeouts 查询超时时间 8、 handle results 处理结果集9、Jmeter非GUI界面参数-h 帮助 -n 非GUI模式 -t 指定要运行的 JMeter 测试脚本文件 -l 记录结果的文件 每次运行之前,(要确保之前没有运行过,即xxx.jtl不存在,不然报错) -r Jmter.properties文件中指定的所有远程服务器 -e 在脚本运行结束后生成html报告 -o 用于存放html报告的目录(目录要为空,不然报错)官方配置文件地址 http://jmeter.apache.org/usermanual/get-started.html10、Jmeter压测接口的性能优化1、使用非GUI模式:jmeter -n -t test.jmx -l result.jtl 2、少使用Listener, 如果使用-l参数,它们都可以被删除或禁用。 3、在加载测试期间不要使用“查看结果树”或“查看结果”表监听器,只能在脚本阶段使用它们来调试脚本。 4、包含控制器在这里没有帮助,因为它将文件中的所有测试元素添加到测试计划中。 5、不要使用功能模式,使用CSV输出而不是XML 6、只保存你需要的数据,尽可能少地使用断言 7、如果测试需要大量数据,可以提前准备好测试数据放到数据文件中,以CSV Read方式读取。 8、用内网压测,减少其他带宽影响压测结果 9、如果压测大流量,尽量用多几个节点以非GUI模式向服务器施压11、Jmeter图形化HTML压测报告dashboard1、Test and Report informationsSource file:jtl文件名 Start Time :压测开始时间 End Time :压测结束时间 Filter for display:过滤器 Lable:sampler采样器名称2、APDEX(Application performance Index)apdex:应用程序性能指标,范围在0~1之间,1表示达到所有用户均满意 T(Toleration threshold):可接受阀值 F(Frustration threshold):失败阀值3、Requests Summary 请求总结OK:成功率 KO:失败率4、Statistics 统计数据lable:sampler采样器名称 samples:请求总数,并发数*循环次数 KO:失败次数 Error%:失败率 Average:平均响应时间 Min:最小响应时间 Max:最大响应时间 90th pct: 90%的用户响应时间不会超过这个值(关注这个就可以了) 2ms,3ms,4,5,2,6,8,3,9 95th pct: 95%的用户响应时间不会超过这个值 99th pct: 99%的用户响应时间不会超过这个值 (存在极端值) throughtput:Request per Second吞吐量 qps received:每秒从服务器接收的数据量 send:每秒发送的数据量12、Jmeter图形化HTML压测报告Charts报表讲解1、Over Time(随着时间的变化)Response Times Over Time:响应时间变化趋势 Response Time Percentiles Over Time (successful responses):最大,最小,平均,用户响应时间分布 Active Threads Over Time:并发用户数趋势 Bytes Throughput Over Time:每秒接收和请求字节数变化,蓝色表示发送,黄色表示接受 Latencies Over Time:平均响应延时趋势 Connect Time Over Time :连接耗时趋势2、ThroughputHits Per Second (excluding embedded resources):每秒点击次数 Codes Per Second (excluding embedded resources):每秒状态码数量 Transactions Per Second:即TPS,每秒事务数 Response Time Vs Request:响应时间和请求数对比 Latency Vs Request:延迟时间和请求数对比3、Response TimesResponse Time Percentiles:响应时间百分比 Response Time Overview:响应时间概述 Time Vs Threads:活跃线程数和响应时间 Response Time Distribution:响应时间分布图13、Jmeter压测注意事项the firewalls on the systems are turned off or correct ports are opened. 系统上的防火墙被关闭或正确的端口被打开。 all the clients are on the same subnet. 所有的客户端都在同一个子网上。 the server is in the same subnet, if 192.x.x.x or 10.x.x.x IP addresses are used. If the server doesn’t use 192.xx or 10.xx IP address, there shouldn’t be any problems. 如果使用192.x.x.x或10.x.x.x IP地址,则服务器位于同一子网中。 如果服务器不使用192.xx或10.xx IP地址,则不应该有任何问题。 Make sure JMeter can access the server. 确保JMeter可以访问服务器。 Make sure you use the same version of JMeter and Java on all the systems. Mixing versions will not work correctly. 确保在所有系统上使用相同版本的JMeter和Java。 混合版本将无法正常工作。 You have setup SSL for RMI or disabled it. 您已为RMI设置SSL或将其禁用。 官网地址 http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.html 压测注意事项:一定要用内网IP,不用用公网IP ...

January 29, 2019 · 3 min · jiezi

如何使用jMeter对某个OData服务进行高并发性能测试

For project reason I have to measure the performance of OData service being accessed parallelly. And I plan to use the open source tool JMeter to generate a huge number of request in parallel and measure the average response time. Since I am a beginner for JMeter, I write down what I have learned into this blog. I will continue to explorer the advanced feature of JMeter in my daily work.我们公司某团队开发了一个OData服务,现在我接到任务,要测试这个服务在高并发访问场景下的性能指标,比如5万个请求同时到来后,每个请求的平均响应时间,因此我选择了jMeter这个好用的工具来模拟高并发请求。Download JMeter from its official website:http://jmeter.apache.org/Go to the installation folder, add the following text in file binuser.properties:httpclient4.retrycount=1hc.parameters.file=hc.parametersCreate a new test plan for example Customer_Query_OData_test, and right click on it and create a thread group from context menu.创建一个新的测试plan,基于其再创建一个线程组:Below configuration means I would like to generate three request in parallel via three threads, each thread is executed only once. And there is no delay during the spawn of each threads ( Ramp-Up Period = 0 )下列设置意思是我想创建三个并发请求,每个请求通过一个线程实现,每个线程仅仅执行一次。每个线程派生后的延时是0秒,意思是主线程同时创建三个线程。创建一个新的HTTP请求,维护下列设置:Create a new Http Request and maintain the following settings:(1) Protocol: https(2) Server name:(3) Http request method: GET(4) Http path: /sap/c4c/odata/v1/c4codata/AccountCollection/ - 这就是OData服务的相对路径了(5) Use KeepAlive: do NOT select this checkbox - 记得这个勾别打上In Parameter tab, maintain query option $search with value ‘Wang’这个意思就是每个并发请求同时发起OData查询,参数为我的名字WangSwitch to Advanced tab, choose “HttpClient4” from drop down list for Implementation, and maintain proxy server name and port number.如果有代理的话,在下图位置维护代理服务器信息。Create a new HTTP Header Manager and specify the basic authentication header field and value.在HTTP Header Manager里维护访问这个Odata服务的credential。因为我们开发的OData服务支持Basic Authentication这种认真方式,所以我在此处的HTTP header字段里维护Authentication信息。Create a listener for the test plan. In my test I simply choose the most simple one: View Results in Table.创建listener,主要用途当然是显示测试结果了。我使用的是jMeter自带的Listener,Table类型的,以表格形式显示高并发请求和响应的各项指标。Once done, start the test:一切就绪,点击这个绿色的三角形开始测试:After the test is finished, double click on View Result Listener and the response time for each request and the average response time is displayed there:测试完毕后,双击我们之前创建的Table Result Listener,我这三个并发请求的性能指标就显示出来了。可以看到三个请求中,最快的请求用了5.1秒,最慢的6.9秒当然,jMeter也支持命令行方式使用:Or you can use command line to achieve the same:-n: use non-GUI mode-t: specify which test plan you want to run-l: specify the path of output result file为了检验jMeter采集的数据是否正确可靠,我还花时间写了一个Java程序,用JDK自带的线程池产生并发请求,测试的结果和jMeter是一致的。And I have written a simple Java application to generate parallel request via multiple thread and the result measured in Java program is consistent with the one got from JMeter.The source code could be found from my github:我的Java程序放在我的github上:https://github.com/i042416/Ja…How to generate random query for each thread in JMeter到目前为止,我的三个并发请求进行搜索的参数都是硬编码的Wang,这个和实际场景不太符合。有没有办法生成一些随机的搜索字符串,这样更贴近真实使用场景呢?Suppose we would like each thread in JMeter to generate different customer query via OData with the format JerryTestCustomer_<1~100>, we can simply create a new user parameter:当然有办法:右键菜单,Add->Pre Processors(预处理器)->User Parameters:参数名Parameter name,取为uuid参数值Parameter value: use JMeter predefined function __Random to generate random number. 使用jMeter自带的随机数生成函数__Random。因此最后参数uuid的值为${__Random(1,100)},意思是生成1到100内的随机正整数and in http request, just specify reference to this variable via ${uuid}:在http请求里,用固定的前缀JerryTestCustomer_加上随机参数,以此来构造随机搜索字符串:So that in the end each thread will issue different query to OData service end point.通过Table Result listener,能观察到这次确实每个请求发起的搜索都使用了不同的字符串了。希望这篇文章介绍的jMeter使用技巧对大家工作有所帮助。要获取更多Jerry的原创文章,请关注公众号"汪子熙": ...

January 13, 2019 · 2 min · jiezi

使用jMeter构造逻辑上有依赖关系的一系列并发请求

相信前端开发工程师对CSRF(Cross-site request forgery)跨站请求伪造这个概念都非常熟悉,有的时候也简写成XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。CSRF攻击的防御方式有多种,最简单最易实现的一种思路就是在客户端向服务器发起的请求中放入攻击者无法伪造的信息,并且该信息没有存储于 cookie 之中。技术上来说,当客户端向服务器发起请求执行一些敏感操作之前(比如用HTTP post实现的转账,扣款等功能),服务器端随机产生一个token,返回给客户端。客户端接下来的操作,必须在HTTP请求中以参数的形式把这个服务器端颁发的token带上。同时服务器端在实现给客户端分配token的同时,也要加入一个token校验机制。如果请求中没有 token 或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。这个token我们一般称为CSRF token。讲了这么多,是为了引入本文想要讨论的话题。假设我想用jMeter测试一个OOdata服务创建Service Ticket的性能。因为创建功能不像读操作,执行之后会对系统产生持久化影响(Persistence side-effect), 因此服务器端的实现加入了CSRF token的校验。这就是说,如果我们直接用jMeter构造并发的HTTP post请求,是没有办法完成测试的,这些请求因为没有包含CSRF token,会被服务器端直接拒绝掉。根据前面描述的CSRF攻防原理,CSRF token是服务器端随机生成的,客户端无法用任何技术进行伪造,因为为了测试接口HTTP post操作进行Service Ticket的创建,我们必须构造一个它的前置HTTP GET请求,专门用于得到服务器返回的CSRF token,然后再构造真正用于性能测试的HTTP POST请求,把第一步GET请求获得的CSRF token附到POST请求的头部中去。本文介绍在jMeter里如何维护并配置这种具有依赖关系的一组请求。当然如果您不喜欢用jMeter,想自己写代码实现,也是可以的。可以参考我放在github上的Java代码实现。用jMeter的好处是不需要编程,通过简单的配置就能实现这个性能测试需求,一般没有开发背景的测试人员也能独立完成。First let us have a look how JMeter could archive the same without even one line of programming.My project in JMeter is displayed with the following hierarchy. I have configured with “Number of 5 threads” in my thread group, so once executed, the response time of these 5 threads are displayed in result table together with average response time.从下图能看出,因为拿CSRF token的HTTP GET在逻辑上必须先于实际需要测试性能的HTTP POST请求,这实际上构成了一个Transaction-事务,所以我使用jMeter里提供的Transaction Controller来管理。Some key points for this JMeter project creation(1) Since now one thread should cover both XSRF token fetch via HTTP get and Service request creation via HTTP post, so a transaction controller is necessary to include both request.(2) Create the first HTTP request to fetch XSRF token. The setting could be found below: adding a http header field with name asx-csrf-token and value as “fetch”:在HTTP GET请求的头部加上一个名为x-csrf-token的字段,值赋成fetch。这样服务器接到这个请求,就知道这是客户端发起的CSRF token请求,于是服务器响应这个请求,把创建好的随机CSRF token通过HTTP response头部字段的方式返回给客户端。下一个问题就是,服务器返回给客户端合法的CSRF token后,jMeter如何读取到这个token,并用于接下来的请求?幸运的是,jMeter提供了正则表达式提取式,可以让我们很方便地从HTTP响应结构中提取出token来。Create a Regular Expression Extractor to parse the XSRF token from response header and stored it to a variable named “jerrycsrftoken”.下图构造了一个jMeter正则表达式提取器,工作于HTTP响应的头部字段,解析出的token值存储于变量jerrycsrftoken中。Before you continue, please make sure that the XSRF token is correctly parsed from request header, which could be confirmed by printing it out in a debug sample:这个请求构造完之后,我们先试着运行一次,确保在变量jerrycsrftoken里确实看到解析好的CSRF token。(3) Create another HTTP request with type POST.这时万事俱备,我们可以开始构造真正要进行性能测试的HTTP post,即Service Ticket的创建请求了。请求的报文正文:Just paste the following text to the tab “Body Data”:–batch_1Content-Type: multipart/mixed; boundary=changeset_1–changeset_1Content-Type: application/httpContent-Transfer-Encoding: binaryPOST ServiceRequestCollection HTTP/1.1Content-Length: 5000Accept: application/jsonContent-Type: application/json{“ServicePriorityCode”: “2”,“Name”: {“content”: “Jerry Testing ticket creation via JMeter ${uuid} “},“ServiceRequestDescription”: [{“Text”: “Piston Rattling 1 - Generic OData Test Create”,“TypeCode”: “10004”},{“Text”: “Piston Rattling 2 - Generic OData Test Create”,“TypeCode”: “10007”}]}–changeset_1—-batch_1–In the body text I use a user-defined variable ${uuid} which we could create it in last step. And for this post request, use the XSRF token fetched from previous HTTP get request.前面说过,POST请求的头部需要加上合法的CSRF token,此处我们使用前面GET请求已经拿到的并且存储于变量jerrycsrftoken中的token值:我希望最后通过并发测试生成的Service Ticket的描述信息的后缀是1到100的随机正整数,因此我使用jMeter里自带的一个随机数发生器:(4) As the last step, create a user variable by using JMeter built-in function __Random, to create a random number between 1 ~ 100 as a fragment of created Service Request description.Now execute the Thread group, and the execution detail for these three HTTP request could be reviewed separately in tree view:试着运行一下,发现这个POST操作确实按照我们期望的那样,在HTTP头部字段里加上了正确合法的CSRF token:For example, the XSRF token is successfully fetched in the first request: rdPy7zNj_uKDYvQLgfQCFA==And used as one header field in second HTTP Post request as expected:And finally in UI we could find the created Service request with random number between 1 ~ 100 as postfix:在UI上观测到我构造的5个并发请求创建的Service Ticket,说明CSRF token在服务器端的校验成功,同时发现描述信息都带上了随机数,说明我的jMeter随机数生成器的用法也正确。希望本文对大家的工作有所帮助。要获取更多Jerry的原创文章,请关注公众号"汪子熙”: ...

January 1, 2019 · 2 min · jiezi