编写不易,不定时更新,求关注!!!
本人只是针对个人项目进行一个建议的demo测试,不是针对完整测试。
完整的结构
新建线程组(添加用户)
线程组就是模拟用户,没用模拟用户那什么去实现压力测试。
参数 | 值 |
---|---|
名称 | 任意取 |
线程数 | 5 |
Ramp-Up时间 | 5 |
循环测试 | 5 |
备注:
其实就是一个demo环境,时间压测测时候需要根据实际场景进行分析,得到结果后在填写此处数据。
还是简单的介绍一下怎么分析吧:
- 某软件用户数量 10K上下
- 软件的使用时间高峰:9:00 – 18:00 约 1000 用户数同时在线
- 软件接口100个左右,平均每个用户上线后操作10 个接口退出
上面数据是我随便编写的,具体情况需要找你老大get这些数据然后分析
分析结果:
- 最大用户数 10000
- (18 - 9)/ 1000 ~= 110 平均每小时 在线数
得出结果:
参数 | 值 |
---|---|
名称 | 任意取 |
线程数 | 110 + (110 * 0.2) ~= 135 向上浮动20%向上取整数 |
Ramp-Up时间 | 300 秒钟 五分钟内达到最大值 平均每2秒增加一个用户 |
循环测试 | 1 小时 (选择永久,运行到一定条件时手动结束) |
然后就是 配置采样器,集合点,等待时间,断言什么等等的测试组件了,往后我会慢慢全部写出来,下面我也写了一部分最基本的配置。
新建http请求默认值
就是java的规范,写一次仅写一次。定义了默认值,就不用了每一个请求都写网址,请求什么乱七八糟的东西了。
参数 | 值 |
---|---|
协议 | http |
服务器IP | 网址或者IP地址 |
端口号 | 80(http协议基本都是 80端口) |
路径 | 可以不写 |
其他 | 默认。 |
新建http请求采样器
参数 | 值 |
---|---|
名称- | 这个采样器是做什么的,我写的是访问后台。 |
协议,服务器IP,端口号- | 使用请求默认值; |
方法 | get |
路径 | /console |
编码 | 默认 |
参数 | 空; |
其实就是把访问服务器时在地址栏写的网址,分被写在了请求默认值,和采样器里面。
完整的网址:http://testpress.cnknowledge.com/console
处理服务器token认证
- 改写jmeter 的配置文件
jmeter.properties中CookieManager.save.cookies 删除注释,把值改为true如图:
- 添加token获取器
我使用的是边界值提取器,也可以用json提取器总之找到那一串token值就可以了。
将页面中的token提取出来,并保存到token变量中,等待后面使用。
参数 | 值 |
---|---|
名称 | 边界值提取token |
应用范围 | 全部 |
检查响应字段 | 主体; |
引用名称 | token |
左边界 | 界面中储存token的左边界 |
右边界 | 界面中储存token的右边界 |
匹配字数 | 1,匹配第一个 |
缺省值 | 匹配不到使用的默认值,我写null,为后面添加断言使用。 |
- 添加Cookie管理器
刚刚开启了 自动保存cookie信息,用调试采集器能找到,就是多出来哪些COOLIE_开头的。
用${COOKIE_XSRF-TOKEN} 作为值,去掉COOKIE_作为名称。有几个写几个。
- 添加 HTTP信息头管理器
消息头使用来模拟浏览器访问用的,里面可以写一些浏览器的参数。
参数 | 值 |
---|---|
Token | 刚刚第二步捕捉到的${token}; |
User-Agent | 用户代理;模拟浏览器访问随便选择一个就行: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6788.400 QQBrowser/10.3.2843.400 |
一切准备就绪,下面开始向服务器发送登录请求;
登录请求
编写登录采样器的时候应该看一下页面,或者接口API,看一下 token认证的方式。
如果认证方式是以消息头的形式发送就不用在表单中填写token信息。
参数 | 值 |
---|---|
名称 | 这个采样器是做什么的,我写的是登录后台。 |
协议、服务器IP、端口号 | 使用请求默认值; |
方法 | post |
路径 | console/login |
编码 | 默认 |
参数 | _token (查看form表单时中的提交项),username,password不用多说了吧。 |
备注:登录成功了,后面想要访问那个页面直接访问就好了,下面简单介绍几个。
进入联合出版界面
测试一下进入界面的请求响应时间。
下面是这个页面的请求,无视歌词。
参数 | 值 |
---|---|
名称 | 这个采样器是做什么的,我写的是访问后台联合出版。 |
协议、服务器IP、端口号 | 使用请求默认值; |
方法 | get |
路径 | console/publications |
编码 | 默认 |
搜索数据
进入联合出版界面有一个搜索功能,我们要准备搜索数据。
搜索接口API内容大致内容:
参数:
1:keyword 关键字;可为空,
2:user_id 用户ID;下拉列表。
测试用例:
Case 1 :keyword=空,user_id=1,返回user_id为1的所有数据。
Case 2 :keyword=test,user_id=空,返回书名中包含test的所有数据。
Case 3 :keyword=test,user_id=1,返回user_id为1并且书名中包含test的所有数据。
获取user_id列表数据
使用XPATH提取器获取下拉框中的VALUE数据。
参数 | 值 |
---|---|
Apply to | 所有 |
Xml parsion Option | 使用默认。 |
引用名称 | 定义的变量名称,找到数据后使用此名称引用。 |
XPATHQuery | 查询语句://select//option//attribute::value |
匹配字数 | 0 |
缺省值 | 如果找到使用NULL。 |
准备keyword数据
编写 csv 文件 内容如下:
参数 | 值 |
---|---|
文件名 | CSV文件所在地址。 |
文件编码 | CSV文件的编码方式。 |
变量名称 | 随便写,自己知道就行。一个文件包含多个列使用英文逗号隔开。 |
忽略首行 | 文件的第一行是否被忽略。 |
分隔符 | 没列之间使用什么分割。 |
其他默认选项,需要特殊情况在做修改。
发送搜索请求
上面吧搜索的两个参数都准备就绪了,下面就是发送请求了。
其他和以前一样,都介绍好几遍了,就介绍一下参数
参数 | 值 |
---|---|
Keyword | 接口API中描述的请求key,我将CSV中的值给他:${USER_SITE_keyword} |
User_id | 接口API中描述的请求key,XPATH 搜索到的数据给他:${XPATH_FIND_user_id} |
前面两个变量在这里引用,变量名称定义的时候要有点意义,自己看了能知道是什么意思。
进入图书管理界面
这是最普通的一个请求了,没有任何参数,就是证明一下可以随意发请求了,没有别的意义。
真正的压力测试使用还有很多接口需要编写,我就先写到这里。
执行测试计划。
在命令行中写入这句话。
Cmd>jmeter -n -t .\图书测试.jmx -l tushu -e -o D:\result
Cmd>jmeter -n -t jmx 文件位置 -l 报告名称 -e -o 已经存在的空文件夹
解释一下:
参数 | 值 |
---|---|
-h, --help | 获得命令使用帮助 |
-n, --nongui | 以非gui(界面)模式运行JMeter |
-t, --testfile | 要运行的jmeter测试(.jmx)文件 |
-l, --logfile | 运行结果保存的路径 |
-r, --runremote | 启动远程服务器(在remote_hosts中定义) |
-e,–reportatendofloadtests | 测试结果后,生成测试报告 |
-o,–reportoutputfolder | 指定测试报告的存放位置 |
其实 还有很多,但是基本上用不上 可以使用 jmeter -? 查看所有命令的详细介绍
等待运行成功后会生成一个结果文件:
下一篇 写 “Html 测试报告详细介绍”,求关注!!!
到此一个测试模型就搞定了。
数据库测试等其他测试参考:https://jmeter.apache.org/usermanual/index.html