接口测试中数据关联技术的运用
2021-05-23王芬
王芬
摘要:接口测试是软件测试工作中重要的组成部分之一,同时也是整个测试工作的难点。如何切实提高软件接口测试技术的效率以及检测结果的可靠性,是当前软件测试领域主要研究的内容。在接口测试中,Web后台登录认证机制,可以通过JMeter 测试软件中后置处理器的正则表达式提取器,提取登录身份验证信息token值,从而进行数据关联来实现登录状态保持。
关键词:接口测试;JMeter;数据关联正则表达式提取器
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2021)11-0067-02
软件开发既要做前端也要做后端,前端只是提供一个页面给用户看结果以及提供页面给用户做输入,后端才是整个业务的核心,用于处理业务请求实现具体的功能。后端逻辑相对很复杂,所以在开发的时候,会由架构师确定接口,然后再针对各个接口实现其具体的功能,比如登录接口、注册接口,增、删、改、查接口等。接口测试是验证这个接口的功能是否正确实现,它是基于Http的请求和Http的响应,所以需要通过请求和响应分别来输入数据以及检查的结果。接口测试工具有很多,比如soapUI、postman、JMeter等,这里选择JMeter[1]测试工具进行接口测试。
1 什么是数据关联
将服务器提供动态变化的值存放在变量中,当需要使用该变量时,自动从服务器响应的信息中获取该值,并在后面使用的过程中进行替换。JMeter测试软件的后置处理器之正则表达式提取器可以实现数据关联,应用场景:1)在一个线程组中,B请求需要使用A请求返回的数据,将上一个请求的响应结果作为下一个请求的参数;2) 用每次用户登录后,token信息都不同,后面的其他操作都要在登录状态保持下进行,所以需要将这个token信息保存下来。下文介绍数据关联技术在第二种场景的使用。
2 什么是token
token[2]在计算机身份认证中是令牌(临时)的意思。一般作为邀请、登录系统使用。token实现登录状态保持/身份认证的机制的原理过程如下:
1)用户首次登录,将输入的账号和密码提交给服务器;
2)服务器对输入内容进行校验,若账号和密码匹配则验证通过,登录成功,并生成一个token值,将其保存到数据库,并返回给客户端;
3)客户端拿到返回的token值将其保存在本地(如cookie/local storage),作为公共参数,以后每次请求服务器时都携带该token(放在响应头里),提交给服务器进行校验;
4)服务器接收到请求后,首先验证是否携带token,若携带则取出请求头里的token值与数据库存储的token进行匹配校验,若token值相同则登录成功,且当前正处于登录状态,此时正常返回数据;若不存在或两个值不一致,则说明原来的登录已经失效,此时返回错误状态码,提示用户跳转至登录界面重新登录;
5)用户每进行一次登录,登录成功后服务器都会更新一个token新值返回给客户端。
3 什么是正则表达式
正则表达式[3]是在执行搜索时匹配的格式,它由一些字母和数字组合而成。使用正则表达式解析响应结果,()括号表示提取字符串中的部分值,前后是提取的边界内容。
正则表达式提取器:允许用户从作用域内的sampler请求的request或response中通过正则表达式提取值所需值,生成模板字符串,并将结果存储到给定的变量名中。
4 获取token值的实现方法
下面以国内优秀的免费开源论坛社区管理系统phpwind社区论坛系统为例,进行获取token的实践。用户的操作流程:1)打开网站:http://www.phpwind.net.cn,如图1。
2)登录网站,实例采用的登录账号wf29020,密码13076939060wf,用户可以自行注册。
3)进入会员中心:http://www.phpwind.net.cn/index/user/index.html,用户在会员中心界面可以进行以下操作:
①修改密码http://www.phpwind.net.cn/index/user/changepwd.html;
②充值金额http://www.phpwind.net.cn/index/recharge/recharge.html;
③系统下载http://www.phpwind.net.cn/index/soft/index.html;
④订单详情http://www.phpwind.net.cn/index/dingdan/index.html。
使用JMeter接口测试工具模拟用户进入会员中心进行一些操作,如修改密碼、充值金额、系统下载、订单详情,需要在系统登录保持的状态下实现,而token实现登录状态保持,所以需要获取登录系统token值。使用fiddler抓包工具[4]进行抓取登录系统的数据包,在请求头里可以获得token的值。实例中此次登录的token值为图2中右栏最后两行值。
5 使用JMeter接口测试工具实现
1)打开JMeter软件,创建一个新的测试计划。
2)在测试计划中添加线程组、信息头管理器、Http请求默认值、Cookie管理器、用户定义变量先添加一个线程组,在线程组中添加信息头管理器,将图2中的信息头(右栏Header标签下的数据)存储在信息头管理器中。请求默认值设置该网站的Http默认请求,即配置页面请求的协议Http、服务器名称www.phpwind.net.cn、端口号80。Cookie管理器、用户定义变量的内容可不填写,如图3。
3)添加打开登录页面的Http请求
因为前面添加了Http请求默认值,已经配置了协议、服务器名、端口号等信息,所以在这里只需要配置登录页面请求的路径名称/index/user/login.html,请求方法为get,如图4。
4)在打开登录页面请求中添加后置处理器中的正则表达式提取器。
正则表达式提取器用来提取登录页面的token值,根据正则表达式的规范写出正则表达式为name=\\"__token__\\" value=\\"(.+?)\\" \\/>
5)添加用户登录系统的Http请求。
在这里只需要配置登录页面请求的路径名称/index/user/login.html,请求方法为post,数据体url=http%3A%2F%2Fwww.phpwind.net.cn%2F&__token__=${token}&account=wf29020&password=13076939060wf&keeplogin=1,用来提交登录数据(账号、密码、令牌等信息),令牌信息来自正则表达式提取器所提取的token值,如图5。
6)添加進入会员中心请求。
在这里只需要配置登录页面请求的路径名称/index/user/login.html,请求方法为get。如果需要进一步操作,还可以继续添加请求,如修改密码、充值金额、系统下载、订单详情等。
7)添加查看结果树,运行测试计划,如图6。
6 总结
接口测试中JMeter在进行数据关联应用时,后置处理器中的正则表达式提取器是最常使用的一个元件,非常简单方便,功能也很强大。使用正则表达式获取登录界面的token值,登录成功后,用户可以带着这个token 进行登录后的其他操作,比如进入会员中心进行订单管理、余额管理、充值等操作。
参考文献:
[1] 陈志勇,马利伟,万龙.全栈性能测试修炼宝典 JMeter实战[M].北京:人民邮电出版社,2016.
[2] 张久杰,王春晖,张丽萍,等.基于Token编辑距离检测克隆代码[J].计算机应用,2015,35(12):3536-3543.
[3] Jan Goyvaerts,Steven Levithan.正则表达式经典实例[M].2版. 郭耀,迟骋,译.北京:人民邮电出版社,2014.
[4] 肖佳.HTTP抓包实战[M].北京:人民邮电出版社,2018.
【通联编辑:唐一东】