测试需求跟上一篇实践一样,区别是之前用python-requests去实现,现在用Jmeter实现。
使用Jmeter测试授权流程,https请求,步骤描述如下
1)用户名密码登录CAS服务器,拿到TGT
2)使用TGT,拿到ST
3)通过接口url+ST,向应用服务器请求数据
打开Jmeter后自动生成一个测试计划,在测试计划下新建线程组(一个线程组可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户)。先把这个用户组将要执行的动作添加进去,如下步骤。
一、Jmeter发送HTTPS请求
成功地发送HTTPS请求,关键之处就是代理的设置。首先我们要在线程组里添加一个录制控制器,不然无法生成Jmeter的CA证书文件。然后在工作台右键添加-〉非测试元件-〉HTTP代理服务器。选择默认端口是8080即可。我电脑8080端口被占用了,用8888也可以。直接点击启动。
接着找到工具栏“选项”-〉SSL管理器。打开bin目录下的ApacheJMeterTemporaryRootCA.crt,开启Jmeter代理。
二、添加HTTP请求头
出于服务器安全方面的考虑,在设计的时候,公共请求头还添加了一个自定义的特殊的字段。在这里加上就好了。
三、添加HTTP请求
因为是HTTPS,将端口号填写443。协议:https。方法我这里用的是POST。将服务器名称和路径填入。并添加请求参数username和password。底部代理服务器填写本机地址和之前设置的端口号8888。(后面会发现运行后,录制控制器那里会记录下通过该代理服务器的请求)
这里的HTTPS请求实现了第一步:用户名密码登录CAS服务器,拿到TGT,可以看到响应信息中TGT的值。
四、正则表达式提取器
接下来需要实现第二步:使用TGT,拿到ST。怎么在新增的HTTP请求中用到上一请求的返回值呢?这里就用到正则表达式提取器。右键后点击:添加>后置处理器>正则表达式提取器。
正则表达式括号中表示提取的内容。
正则表达式提取器说明如下:
然后添加新的HTTP请求,填入相应路径和参数。这里路径里需要用到刚才提取的TGT值,使用${TGT}进行引用。
最后的两个请求实现第三步:通过接口url+ST,向应用服务器请求数据。需要用到getTicket中的ticket返回值。也是使用正则表达式提取器就好了。
五、扩展
1)性能测试
实现单独某个接口测试后,可以进行该接口的性能测试。比如测试系统的及时性、处理能力等特性。通过响应时间、吞吐量、并发用户量去衡量服务器性能。
这里可以在线程组的参数中调整。最开始说到,线程组中的每个线程都可以理解为一个虚拟用户。
线程数:虚拟用户数
Ramp-up Period:设置的虚拟用户数需要多长时间全部启动。如果线程数为10 ,准备时长为2 ,那么需要2秒钟启动10个线程。也就是每秒钟启动5个线程。
循环次数:每个线程发送请求的次数。如果线程数为10,循环次数为100,那么总请求数为1000。
运行后查看聚合报告,也有其它类型的比如图形结果、结果树等。
衡量指标一般有:平均响应时间,90%Line值(指90%请求响应时间不会超过这个值),错误率(一般要求为0或<0.01%),吞吐量等。
2)Cookie管理器
对于软件或web中一些需要登录后才有权限的操作,当进行接口测试时不可能每一次都登录一次。这时候可以在最开始登录后,获取Cookie信息,以便其它操作直接用到。可以用Cookie管理器。这个还没仔细研究,所以仅作为可能的扩展写在这里。