安装JDK:https://www.oracle.com/cn/java/technologies/downloads/
安装Jmeter:https://jmeter.apache.org/download_jmeter.cgi
注意:下载JDK,注意电脑操作系统及位数;Jmeter版本要与JDK版本匹配;Jmeter安装路径不能有中文或空格
(1)Jmeter界面汉化
永久性:修改bin目录下的配置文件jmeter.properties,“language=zh_CN”,重启Jmeter即可
临时性:菜单“Options”->Choose Language->Chinese(Simplified)
(2)Jmeter主题修改
菜单“选项”->外观(选择自己喜欢的主题)
(3)响应结果中文不会乱码
打开bin目录下的配置文件jmeter.properties,修改“sampleresult.default.encoding=UTF-8”,重启Jmeter即可

元件:多个类似功能组件的容器(类似于类)
元组:容器中实现独立的某个功能(类似于方法)
在同一个作用域(目录/级别/缩进)的不同元件的执行顺序:
在同一个作用域(目录/级别/缩进)的相同元件的执行顺序:
案例:

执行顺序:定时器1 - 请求1 - 定时器1 - 定时器2 - 请求2 - 定时器1 - 定时器3 - 请求3
介绍:控制Jmeter用于执行测试的一组用户
分类:
参数:

作用:向服务器发送http及https请求
位置:选中线程组->右键->添加->取样器->HTTP请求
参数:

查看请求参数:Request Body(请求行+请求体)
查看响应结果:Response Body(响应体)
1、定义:使用不同的测试数据,调用相同的测试方法进行测试
2、本质:实现测试数据与测试方法的分离
3、实现方式
使用场景:定义全局变量
使用步骤:

使用场景:针对同一组参数,当不同的用户来访问时,可以获取到不同的值
使用步骤:

使用场景:当不同的用户,或者同一个用户多次循环时,都可以获取到不同的值
使用步骤:

使用场景:自动生成不重复的数据,让每个用户每次循环都能取到不同的数据,且不需要提前定义
使用步骤:

用户定义的变量:
用户参数:
CSV数据文件设置:
函数:
1、定义:让程序自动判断预期结果和实际结果是否一致
2、提示:Jmeter在请求的返回层面有个自动判断机制(响应状态码),但是请求成功了,并不代表结果一定正确,因此需要检测机制提高测试的准确性
3、常用断言方法

使用场景:对HTTP请求的响应结果为JSON格式时,可以使用JSON断言
使用步骤:添加线程组->添加HTTP请求->添加JSON断言配置参数->添加查看结果树查看断言结果

作用:检查HTTP请求的响应时间是否超出要求范围
使用步骤:添加线程组->添加HTTP请求->添加断言持续时间设置持续时间->添加查看结果树

1、定义:当请求之间有依赖关系,比如一个请求的入参是另一个请求返回的数据,这时候就需要用到关联处理
2、常用的关联方法
使用场景:任意格式的响应数据,都可以使用正则表达式提取器进行提取
使用步骤:
正则表达式:就是一个公式,或者一套规则,使用这套规则可以从任意字符串中提取出想要的数据内容
公式格式:左边界(匹配符号)右边界:可以提取出想要获取的数据内容
.:是通配符,可以代表任意字符(除换行回车)
*: 代表前面的字符出现0次或者多次
.*匹配规则:找到左边界值后,往右查找有边界,找到最后面的右边界,中间的所有数据都被记录下来
?: 代表非贪婪匹配,找到左边界后,往右查找匹配右边界,只要有匹配的右边界就停止继续查找;再次查找左边界和右边界
公式格式:左边界(.*?)右边界
<title>百度一下,你就知道</title>
<title>(.*?)</title>

使用场景:针对HTML格式的响应结果数据进行提取
使用步骤:

使用场景:针对JSON格式的响应数据进行提取
使用步骤:

使用场景:在不同的线程组之间传递参数
使用步骤:



注意:__setProperty函数执行(JMeter属性):需要通过BeanShell取样器来执行
1、定义:在没有接口文档的旧项目当中,快速录制web页面产生的http接口请求,帮助编写接口测试脚本
2、原理:录制时,JMeter作为代理服务器来拦截和转发请求与响应数据

3、jmeter脚本录制步骤
(1)添加HTTP代理服务器,并进行配置(在非测试元件中)


(2)开启windows操作系统的浏览器代理

(3)启动代理服务器,开始录制


(4)在浏览器页面中进行操作,成功后,就能在JMeter当中看到抓取的接口请求了
当使用代理的过程中,发现抓不到包,可能发生以下情况:
- 过滤规则设置有问题
- 重启Jmeter代理服务器或者重启Jmeter
- 换浏览器来使用(Chrome、IE)
- 检查PC机中的代理设置是否处于可用状态
- 拔掉网线,抓包
1、直连数据库的作用
2、直连数据库的步骤
(1)添加Mysql驱动jar包

(2)配置数据库连接信息
添加方法:测试计划->线程组->配置元件->JDBC Connection Configuration

(3)添加JDBC请求
添加方法:测试计划->线程组->取样器->JDBC Request

(4)使用SQL语句返回结果的变量名替代原有的固定数据
作用:if控制器用来控制它下面的测试元素是否运行
位置:测试计划->线程组->逻辑控制器->IF控制器

作用:控制下面的测试元素循环执行一次或多次
位置:测试计划->线程组->逻辑控制器->循环控制器

注意:线程组也可以控制循环次数,但是与循环控制器的作用范围不同。线程组的循环对线程组下的所有HTTP请求有效,而循环控制器对子节点下的HTTP请求有效
作用:一般和用户自定义变量或者正则表达式提取器一起使用,读取返回结果中一系列相关的变量值。该控制器下的所有取样器都会被执行一次或多次,每次读取不同的变量值
位置:测试计划->线程组->逻辑控制器->ForEach控制器

例如:


那么后续的请求使用${kw}时就会依次赋值1、2、3
定义:阻塞线程(积累一定的请求),当在规定的时间内达到一定的线程数量,这些线程会在同一个时间点一起释放,瞬间产生很大的压力
位置:测试计划->线程组->添加定时器->Synchronizing Timer

超时时间建议设置,不然会一直死等;也不能设置太小,不然没有达到指定的线程数就释放
定义:模拟用户真实的使用场景,让Jmeter按指定的吞吐量执行,以每分钟为单位
位置:测试计划->线程组->添加定时器->Constant Throughput Timer

案例:
—模拟用户真实的业务场景要求:20 QPS(每秒的请求数)
—如果线程数设置为1,则目标吞吐量设置为 20 * 60 = 1200
—如果线程数设置为2,则目标吞吐量设置为 20 * 60 / 2 = 600
定义:指定线程等待的时间(以毫秒为单位)
位置:测试计划->线程组->添加定时器->固定定时器

1、应用场景:在使用Jmeter进行性能测试时,如果并发数比较大(比如项目需要支持10000并发),单台电脑的(CPU和内存)可能无法支持,这时可以使用Jmeter提供的分布式测试的功能
2、原理:

3、注意事项
4、分布式测试步骤
(1)代理机配置
注:代理机可以是自己电脑上安装有多个Jmeter,也可以是其他电脑上的Jmeter
(2)控制器配置
1、应用场景:在Jmeter中可以以图形化(饼状图、柱状图...)的方式显示脚本运行结果,比聚合报告或查看结果树组件实现更直观,用户体验更好
2、使用方法
命令:jmeter -n -t 脚本文件 -l 日志文件 -e -o 目录
-n 无图形化运行
-t 被运行的脚本
-l 将运行信息写入日志文件
-e 生成测试报告
-o 指定报告输出目录
注意:
1、脚本文件必须指定目录或者将脚本文件放置在jmeter的bin目录下
2、日志文件和目录可以不填写,默认在当前目录;如填写必须保证文件和目录为空
3、实例


我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
我打算为ruby脚本创建一个安装程序,但我希望能够确保机器安装了RVM。有没有一种方法可以完全离线安装RVM并且不引人注目(通过不引人注目,就像创建一个可以做所有事情的脚本而不是要求用户向他们的bash_profile或bashrc添加一些东西)我不是要脚本本身,只是一个关于如何走这条路的快速指针(如果可能的话)。我们还研究了这个很有帮助的问题:RVM-isthereawayforsimpleofflineinstall?但有点误导,因为答案只向我们展示了如何离线在RVM中安装ruby。我们需要能够离线安装RVM本身,并查看脚本https://raw.github.com/wayn
我有一个奇怪的问题:我在rvm上安装了rubyonrails。一切正常,我可以创建项目。但是在我输入“railsnew”时重新启动后,我有“程序'rails'当前未安装。”。SystemUbuntu12.04ruby-v"1.9.3p194"gemlistactionmailer(3.2.5)actionpack(3.2.5)activemodel(3.2.5)activerecord(3.2.5)activeresource(3.2.5)activesupport(3.2.5)arel(3.0.2)builder(3.0.0)bundler(1.1.4)coffee-rails(
我刚刚为fedora安装了emacs。我想用emacs编写ruby。为ruby提供代码提示、代码完成类型功能所需的工具、扩展是什么? 最佳答案 ruby-mode已经包含在Emacs23之后的版本中。不过,它也可以通过ELPA获得。您可能感兴趣的其他一些事情是集成RVM、feature-mode(Cucumber)、rspec-mode、ruby-electric、inf-ruby、rinari(用于Rails)等。这是我当前用于Ruby开发的Emacs配置:https://github.com/citizen428/emacs
我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e
我有一个在Linux服务器上运行的ruby脚本。它不使用rails或任何东西。它基本上是一个命令行ruby脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm