报错:Cannot create PoolableConnectionFactory (FATAL: invalid value for parameter "TimeZone": "Asia/Shanghai")
原因:数据库中缺少timezone文件,导致时区问题
首先查找数据库时间和时区:
select now();--2019-10-11 07:46:18.489796+00
show time zone;--GMT
再次查找服务器时间和时区:
两者时间相差8个小时,因此报错。
解决措施:
设置jmeter全局配置jmeter.bat中:set JVM_ARGS=-Duser.timezone="GMT+08"
首先要获取到登陆时候的cookie:利用浏览器的开发者模式
然后,把存储中cookie的名称、域名、路径、值全部填写到http cookie manager中,这样就为脚本添加了一条cookie:
再将登录的http request中的参数全部删掉,即可:
参考:
https://blog.csdn.net/maybe_frank/article/details/80783504
设置多个缓存,脚本在执行过程中就会自己添加缓存至设定的数字
打开bin目录下的properties:
设置:CookieManager.save.cookies=true,并将前面的注释“#”去掉
然后,添加http cookie manager
不勾选清除cookie
这样会自行保存每次执行的缓存信息。
脚本样例:
(1)Number of Simulated Users to Group by:按组分组的模拟用户数。即为当用户总数达到1000时,一起去执行脚本的操作。若线程总数为10000,那么就会分10批进行
(2)timeout in milliseconds:Timout的意思是等待请求多久后,不管线程数有没有到达设置的并发数量都开始运行测试。如果设置为0,Timer将会等待线程数达到了"Number of Simultaneous Users to Group"中设置的值,也就是1000才释放。如果设置了数字2,即使没有达到1000,只要到了时间就执行脚本。
cookie:是保存客户端的一组数据,主要用来保存用户的个人信息,主要存放浏览器请求服务器时的请求信息,这些信息是非敏感信息。主要用于当用户访问您的系统时,应用程序可以检索以前存储的信息。
如:浏览器中的历史记录:
session:
保存在服务器中。
参考:
https://www.cnblogs.com/supersnowyao/p/8544747.html
https://www.cnblogs.com/danyuzhu11/p/10419949.html
https://www.cnblogs.com/uestc2007/p/10683372.html
Numbers of threads表示模拟多少个用户来进行测试;线程数代表多少个进程,也就是代表多少个用户;
Ramp-up period(in seconds)表示多长时间把所有的Thread启完,也就是说隔xx这个时间就启动一个thread;0代表同时并发;
Loop count表示一个thread发出多少次测试请求,对于我们的web应用来说,就是发出多少次http request;循环次数代表执行几次.
Label:请求类型,
Samples:表示这次测试一共发出了多少个请求;如果模拟10个用户,每个用户迭代10次,那么这里显示100
Average:平均响应时间---默认情况下是单个请求的平均响应时间;
Median:中位数,也就是50%用户的响应时间;
90% Line:90%用户的响应时间;
Min:最小响应时间;
Max:最大响应时间
(以上时间单位为ms)
Error:本次测试中出现错误的请求的数量/请求总数;
Thoughput:吞吐量---默认情况下表示每秒完成的请求数---服务器每单位时间处理的请求数;
Kb/sec:每秒钟请求的字节数(以流量做衡量的吞吐量)
可以通过写代码,来获取变量,一些函数可以通过“函数取助手对话框”获取
函数取助手对话框:选项---函数取助手对话框
DATABASE URL中添加:?allowMultiQueries=true
Query Type选择:Callable Statement
查询结果:
参考:https://blog.csdn.net/yuansanmei104/article/details/96571638
样例:
需要的文件:jdbc connection configration,jdbc request,http request等
首先:配置jdbc connection configration
然后:添加第一个jdbc request:
将查询出来的两个字段id,username分别作为参数tid,tusername
再给第一个jdbc request添加调试后置处理器:用来查看详细的sql获取的数据:
再添加第二个jdbc request,通过传递参数${tid_1}查询出serial_number:
其中:
运行结果:
备注:用户:a1571040310表中没有对应数据所以serial_number值为空。
分析步骤:
查看登录POST http request参数:密码、验证码是写死的,账号为参数,那么只有账号有问题:
这个参数tusername的值是怎么出来的,是通过sql查出来的:
我们又用sql放到数据库里面查询,发现可以查询出结果,说明值正确:
那么最后原因就是传递的参数名有问题:
给jdbc request添加调试后置处理器,查看详细的数据:
发现:传递的参数名并不是tusername而是tusername_1。
更改:${tusername}为${tusername_1},问题解决。
select (apply_info::json ->> 'name') as name,(apply_info::json ->> 'idNo') as idNo from tb_endorsement
要注意填写的文本信息,要覆盖:返回正确的以及不正确的请求,虽然这个请求返回不正确的代码,但是确实是去校验过了,说明代码逻辑正确。
添加断言结果
参考:https://blog.csdn.net/weixin_43652535/article/details/94591803