前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Jmeter如何实现参数化用户,并且管理Cookie

Jmeter如何实现参数化用户,并且管理Cookie

作者头像
jmeter技术研究
发布2019-10-19 11:42:27
1.1K0
发布2019-10-19 11:42:27
举报

谈到性能测试,经常需要对用户进行参数化,jemter工具参数化经常使用的一个元件就是CSV数据文件设置

一、 操作步骤

代码语言:javascript
复制
1. 首先建议大家创建一个规范的目录保存文件

目录

作用

data

保存参数

result

保存结果

script

保存脚本

代码语言:javascript
复制
2. 如下图所示

设置目录的好处,就是文件路径可以使用相对路径,这样可以跨系统(window、linux),跨平台而不用修改路径

代码语言:javascript
复制
3. 首先要在用户变量中设置一个变量path,值为../data/,..的意思代表当前目录往上一个目录
代码语言:javascript
复制
4. 然后在data目录新增一个.csv格式的文件,建议新增一个txt格式的文本文件,然后改成.csv格式文件

变量如下

代码语言:javascript
复制
5. 添加CSV元件,线程右键》添加》配置元件》CSV数据文件设置
代码语言:javascript
复制
6. 配置如下:
代码语言:javascript
复制
7. 调用参数
代码语言:javascript
复制
8. 默认系统都是需要登录,才能操作其它接口,所以需要添加一个HTTP Cookie 管理器,默认Cookie管理器是关闭的,需要修改jmeter配置文件jmeter.properties,该文件在jmeter\bin\路径下,找到#CookieManager.save.cookies=false 修改为CookieManager.save.cookies=true,保存配置文件重启jmeter
代码语言:javascript
复制
9. 点击测试计划右键》添加》配置元件》HTTP Cookie 管理器
代码语言:javascript
复制
10. Cookie管理器的作用就是帮你自动管理系统登陆获取的cookie,其它接口需要用到的时候自动调用

Cookie管理器的作用域解释:不同的线程cookie不会互相调用,cookie管理器如果放置在测试计划下,则线程下的所有接口都可以自动调用cookie,如果放置在事物管理器下,则只有该管理器下的接口才会调用到,其他和该事物平级的接口则不会被调用

二、 实际案例分析

分析实际案例一

代码语言:javascript
复制
1. 本案例添加了cookie管理器,实际请求还是报错,响应结果提示:status":400,"error":"Bad Request",Missing cookie 'timeZone' for method parameter of type in
代码语言:javascript
复制
2. 查询请求使用的cookie管理器,管理器调用的cookie参数
代码语言:javascript
复制
3. 由于cookie管理器不是万能的,如果遇到报错,就要实际结合接口请求进行分析,手动进行查询调试,手动的cookie如下:
代码语言:javascript
复制
4. cookie值详细如下:
代码语言:javascript
复制
 sid=c4d29545-3409-4117-81be-a6562a6f8c2f; mip_curr_lang=zh-CN; user_info=%7B%22id%22%3A%22u_10212853605%22%2C%22parentId%22%3A%22d_9743384365%22%2C%22name%22%3A%22%E8%B0%A2%E7%94%B0%22%2C%22fdLangType%22%3A%22zh-CN%22%2C%22fdPositionName%22%3A%22%E6%B5%8B%E8%AF%95%E5%B7%A5%E7%A8%8B%E5%B8%88%22%2C%22fdEmail%22%3A%22tian2.xie%40meicloud.com%22%2C%22loginName%22%3A%22xietian1%22%2C%22fdEnglishName%22%3A%22%22%2C%22fdTimeZone%22%3A%22Asia%2FShanghai%22%2C%22fdEmployeeNumber%22%3A%2220215183%22%2C%22fdDepartmentEnglishName%22%3A%22Midea%20Holding%20Group_Midea%20Group_Shenzhen%20Midea%20Cloud%20and%20Intelligent%20Technology%20LTD_Midea%20Cloud%20Department_MQ%20Technology%20Platform_Devops%20Platform%20Research%20and%20Development%22%2C%22fdDepartmentName%22%3A%22%E7%BE%8E%E7%9A%84_%E7%BE%8E%E7%9A%84%E9%9B%86%E5%9B%A2_%E6%B7%B1%E5%9C%B3%E7%BE%8E%E4%BA%91%E6%99%BA%E6%95%B0%E7%A7%91%E6%8A%80%E6%9C%89%E9%99%90%E5%85%AC%E5%8F%B8_%E7%BE%8E%E4%BF%A1%E4%BA%91%E4%BA%8B%E4%B8%9A%E9%83%A8_%E7%BE%8E%E6%93%8E%E6%8A%80%E6%9C%AF%E5%B9%B3%E5%8F%B0_Devops%20%E5%B9%B3%E5%8F%B0%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%22%2C%22locale%22%3A%22zh_CN%22%2C%22fdHierarchyId%22%3A%22x526x1460494117x7509007994x7659897777x9732499571x9743384365x10212853605x%22%2C%22shiroid%22%3Anull%7D; OAM_LANG_PREF=v1.0~cHJlZmVycmVkTGFuZ3VhZ2U9emh+ZGVmYXVsdExhbmd1YWdlTWFya2VyPWZhbHNl; oam_locale=zh; mip_lang=zh; mideatest_sso_token=eOXIT3uFt6jYti%2FYd3JLHcaL2nd0xvXmBE7enJMQJsWkLsvg9Uu4FA%3D%3D; MAS_TGC_UAT=eyJhbGciOiJIUzUxMiJ9.WlhsS05tRllRV2xQYVVwRlVsVlphVXhEU21oaVIyTnBUMmxLYTJGWVNXbE1RMHBzWW0xTmFVOXBTa0pOVkVrMFVUQktSRXhWYUZSTmFsVXlTVzR3TGk1SVlrdFdURWhrYlZCa2JVcHVTRXQwUmsxcGRrSjNMbGR4VldGYVdrczBiVTFSYm5CM2MydDViWEl3VGxGVVVGaDVWWEJXTTJWa2FsRnFSV05wVUc5MVgxWlZSek5pUVZwdVUyNUNObFpFZVdGWVZubDZiV2hvVXpGdWF6UnllbnB5WVRkSWJYUklXVVZtTm1KRFJrZzBabWszVmpOZldXaGZjMDlYYVhOM1kyc3RkVXhMZFhsa1JETmxORzVMVUdwbGEzZFJWRUZzUTIxbFFUVjNZMVpaTVdWRVJsaFhPWEZOVTJWa2NrYzVRVlZJUXpOR1UyWjJNWFJRZEdwUmVXRk1PV3d3ZWtoUVpsQk9iRmxYYW5GeGFYVmlPREZNYVU1bVVGOXBWbm80ZHpJeWMxTkNOVEJtTW5CcVgxUlJVbEpyTW1oQlVuRmlUWEF6YzFoMVlYaG1RMUJMVnpOd01sZFJaRGRhUmxKMlltOW1TM1p4VDBndU1YTkdMVE5aVEdoUExXTTJTREZuY0ZkTVJtdEtkdz09.XI9uAFyY6XWSA7CRcmMwGuNvIcAig6wF5wlVF4o9qE8F6jKEfq6OHoFqZg40jO87RyAW3fivDzrNZkJmo9AIyw; ObSSOCookie=DoSRzdMFH1aFXJM9XH5G×××wj0dG2BDxv01ftZRX1PLroXfL6MPfHpSHXHCn0gJBn195Iccn4CvlQ0cydDfUfaMGTKM5%2FQzzWBuGownsQIPc9WTP4rZNbbIOsZ2tGcg%2Btl5FK7QqmsKRYg9PknRhklmgUKeq%2FWamFaPJgwuyhGQ%2BKqxCut%2FwpnpBtccz0McnG%2BsP5h3pyPNaydZQK3eXpQk1xFZdBZuuXsbuhKADTW1HEJtk8NzAbXhWN4ZLCJHrqzvsjSgLmCph2X1O3gBZrenzuA4yVizUSUo5RFobUz5v%2FWvp3zKkp%2FkfM%2FT%2FzrPTGUGkwduxXugMIM%2BNAyIXnY%2FokAg3sokv345cjMcgnGHY%3D; language=zh-CN; timeZone=8
代码语言:javascript
复制
5. 结合响应报错,原来是调用的cookie丢失了; language=zh-CN; timeZone=8,导致请求失败,因为自动cookie管理器会报错,所以需要把cookie管理器放置到登录事物管理器下,这样cookie管理器就不会影响到查询请求设置的cookie,设置如下
代码语言:javascript
复制
6. 由于ObSSOCookie变量是cookie管理器进行管理的,所以可以打开debug sample查看该变量在cookie中的命名,如下
代码语言:javascript
复制
7. 经过调试,只需要在查询请求下的表头,增加一个Cookie变量,值为ObSSOCookie=${COOKIE_ObSSOCookie}; language=zh-CN; timeZone=
代码语言:javascript
复制
8. 修改完成之后,进行调试,调试成功

分析实际案例二

代码语言:javascript
复制
1. 响应结果提示:,"status":400,"error":"Bad Request","exception":"org.springframework.web.bind.ServletRequestBindingException","message":"Missing cookie 'language' for method parameter of type String"
代码语言:javascript
复制
2. 提交请求使用的cookie管理器,管理器调用的cookie参数
代码语言:javascript
复制
3. 结合响应报错,原来是调用的cookie丢失了: language=zh-CN,导致请求失败,可以在HTTP Cookie管理器中维护该字段,如下:
代码语言:javascript
复制
4. 调试结果,提交成功
代码语言:javascript
复制
5. 此时,每个该域名下的请求,Cookie参数都会被添加language=zh-CN进去,如下所示:

分析实际案例三

代码语言:javascript
复制
1. 1线程循环3次,首先登录,然后提交请求,系统只成功了第一笔提交数据,第2、3笔提交失败
代码语言:javascript
复制
2. 原因分析:由于使用了HTTP Cookie管理器,但是却没勾选每次反复清除Cookies,导致第2、3次循环使用的cookie依然是第一次循环获取的cookie值,只需要勾选即可,如下:
代码语言:javascript
复制
3. 修改完成之后,进行调试,调试成功

此时,不管多个用户还是单个用户,都可以实现并发查询

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 jmeter相关技术交流 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档