1、创建测试计划
2、新建线程组
线程属性:
a.Number of Threads(users) :线程数,一个线程相当于一个虚拟用户
b.Ramp-Up Period(in second):线程启动开始运行的时间间隔,单位秒。即所有线程在多长时间内全部启动。例如线程60个,Ramp-Up Period设置为20s,那么每秒启动60/20=3个线程,不填写默认设置为0,即所有线程在开启场景后立即启动。
c.Loop Count:循环次数。勾选forever,将一直执行,除非手动停止或崩溃
d.Delay Thread creation until needed:延时创建线程直到该线程需要采样时。
勾选,例如50个线程Ramp-Up Period为10s,那么每隔1s启动50/10=5个线程并运行下面的请求(状态为running);不勾选,测试计划开始后启动所有线程(状态为new),但是不立即执行下面的请求。例如50个线程Ramp-Up Period为10s,那么计划开始后所有线程全部就绪,但第一秒只有5个线程开始运行请求。实际应用中选择哪种都可以,不影响测试结果。
个人理解:例如银行办业务10个人,勾选,柜台只有一个人在办理(running状态),剩下的人可以坐在位置上等候;不勾选,10个人都站在柜台外面排队等候(不是坐着),等待叫号。
3、用户定义变量,当前线程组内的请求都有引用${变量名称},可以设置服务器名称等值。
4、一个测试计划内最好只有一个cookie manager,我这个设置的是每次清除cookie,特意网上查了一下说是有的请求跟cookie有关系,需要从cookie中取值使用。
5、设置http默认请求的服务器,在以后的请求里可以不设置服务器
6、添加计数器,生成学生的数量
注:与每用户独立的跟踪计数器(Track Counter Independently for each User):换言之,这个是全局的计数器,还是说每个用户拥有自己的计数器。如果不勾选,即全局的,比如用户#1 获取值为1,用户#2获取值为2,如果是独立的,即不勾选,每个用户有自己的值,比如用户#1 获取值为1,用户#2获取值还是为1
7、循环控制器,设置循环的次数,这里可以设置一个学生,循环进行多次考试
8、因为有不同的学生进行考试,所以这里请求参数引用了学生计数器中变量 ${stu}
9、学生进入考试页面后,我们从响应信息中了解到接下来考试操作,需要点击开始考试1这个按钮,而这个按钮的链接正好可以在,响应体中提取出来提取path路径,需要添加后置处理器中的正则表达式提取器,提取的规则如下<a href="(.+)" target="_blank">开始考试1</a>
10、创建http请求,进行点击开始考试1按钮操作,而这个路径就是引用刚才提取到的变量&{startExam}
请求开始考试后,响应体会返回获取试卷的url,以及学生的信息
添加后置处理器中的正则表达式提取器,提取学生id的规则如下new ExamObj\(\d+?,'(.+?)',
添加后置处理器中的正则表达式提取器,提取试卷路径的规则如下iframe.prop\('src','(.+?)'\);
11、创建http请求,请求试卷的信息
通过抓包工具,分析试卷信息的响应结果
添加后置处理器中的正则表达式提取器,从响应结果中提示试题id,提取规则class=".*?" id="q_(.*?)" code=".*?"
添加后置处理器中的正则表达式提取器,从响应结果中获取考题顺序,提取规则id=".*?" code="psq_(.*?)">这个顺序号后续测试我也没有用到
12、接下来就是进行答题操作,因为这里分析了一下试卷(我这里只能针对这一套题操作),前25个题目都是选择题,所以添加了一个foreach控制器,qNum就是上面获取的题目id
创建http请求,进行答题操作,答题url中要求有学生的id和做题序号,所以学生的id信息就是从刚才进入开始考试以后获取到的/exam/student/exam/myanswer/save/${userExamid}/${n}答题参数如下设置,这里就能执行25次了相当于做了25个单项选择题
接下来是主观题作答,这个地方可能我写的不对,但是实现可以做完全部简答题首先我设置了一个循环控制器来控制做题的数量,因为主观题有13个,我就设置执行13次
因为上面只设置了循环次数,但是做题的题目id还是要每一次给请求,所以我又添加了一个计数器,来控制这个题目的id从26题开始到38题结束。
创建http请求进行主观题作答,请求参数同样要有学的id和题目序号/exam/student/exam/myanswer/save/${userExamid}/${zn}
13、提交试卷请求
14、完成试卷
15、查看考试记录,这个跟提交考试1操作类似,也是在进入考试界面以后,通过正则表达式获取考试记录的URL
请求考试记录页面引用以上提取到的url路径
16、查看结果树、聚合报告
17、在每次发出http请求操作后,都有添加一个断言操作,才能判断响应结果对不对如
18、Jmeter导出报告
在你的脚本文件路径下,执行cmd命令:jmeter -n -t test.jmx -l result.jtl -e -o /tmp/ResultReport
参数说明:
● -n: 非GUI模式执行JMeter
● -t: 执行测试文件所在的位置
● -l: 指定生成测试结果的保存文件,jtl文件格式
● -e: 测试结束后,生成测试报告
● -o: 指定测试报告的存放位置