实现思路
最简单的登录
直接调用接口,传入用户名、密码
添加HTTP请求取样器,设置参数
复杂的登录
用户名,密码在前端经过加密方法加密后传到服务器
相较于简单的登录,复杂的登录需要在请求前对参数进行处理,根据JMeter元件类型可知,要在请求前进行处理,需要使用到前置处理程序。
所以复杂的登录,相较于简单的登录,需要多添加一个前置处理器元件,我们这里需要根据算法对密码进行加密,所以这里选择前置处理器中的JSR223预处理程序。
添加HTTP请求取样器、给HTTP请求取样器添加前置处理元件JSR223预处理程序,语言选择Java,也可以根据实际需求来选择,添加密码加密方法,对密码进行加密,将加密后数据存入变量中,在HTTP请求参数中可以直接获取到加密后的参数。
实现模拟登录
简单登录接口
新建测试计划,添加线程组,给线程组添加一个HTTP请求取样器
根据接口文档,选择适合的HTTP请求类型:GET、POST等
登录参数根据接口文档,选择是添加到参数,还是消息体参数,这里只是一个示例,具体以要模拟登录的接口文档为准,选择适合的格式
如果需要查看结果,可以添加一个监听器,添加查看结果树等监听器元件
复杂登录接口
新建测试计划,添加线程组,线程组添加一个HTTP请求取样器,给HTTP请求取样器添加一个JSR223预处理程序,用户执行密码加密操作
这里预处理程序选择Java实现
登录时传入加密后的参数,在JMeter中使用变量的方式${variableName}(${变量名}),我们在JSR223预处理程序中定义的加密后密码变量名为encryptedPassword,所以我们取加密后的密码时,可以直接使用${encryptedPassword},这样调用接口时就是传的加密后的密码了
如果我们需要查看JMeter中的变量,我们可以添加一个调试取样器(Debug Sample),然后我们就可以在查看结果树中调试取样器看到JMeter中的变量。
其他
HTTP请求取样器配置请求头
添加配置元件HTTP信息头管理器,参考下图添加需要的请求头信息
获取页面指定元素的属性值
要对返回的结果进行处理,我们可以使用后置处理器,这里我们假设获取返回页面中id为home的a标签的href属性值,配置可以参考下图
变量名称:homeHref,自己随便定义,在其他位置这个变量的值:${homeHref}
css选择器表达式:#home,代表页面中id为home的元素,其他的选择器可以去学习下css选择器相关知识
属性:我们通过选择器表达式选择到的元素的属性
页面元素示例:
主页
获取HTTP请求取样器返回的响应头信息
这里是处理响应的信息,我们可以添加一个后置处理器,要获取响应头相关信息,我们可以添加一个正则表达式处理器,这里是模拟响应头中Cookie-Set中的JSESSIONID的取值
引用名称:与变量名称作用一致,随便定义,可以在其他元件中获取到这里定义的变量
正则表达式:这里是获取JSESSIONID的值,简单点就这样处理了,如果需要获取其他值,可以按自己需求定义正则表达式进行获取数据。
模板:表示使用提取到的第几个值:$1$代表第一个,依次类推
匹配数字:0代表随机取,1代表取全部值
使用后置处理器中定义的变量
模拟多个用户登录
这里我们从csv文件中取用户名和密码,这里我们添加一个配置元件,CSV数据文件配置
第一步,选择我们自己的csv文件
定义变量名称,我这里的csv文件只有两个字段,所以我给这两个字段分别定义为username,password,代表一行内的数据,第一个参数赋值给username变量,第二个参数赋值给password变量
分隔符:我这里csv文件内容以“,”进行分割,所以我这里配置分隔符就是","
csv文件格式如下
预登录多个用户
为了达到更高的并发测试效果,可以先提前登录所有的用户,在请求接口时随机获取已登录的用户信息进行配置后访问接口,减少每次登录的时间消耗
HTTP协议是无状态的,服务器区分登录的用户是通过Cookie实现的(现在不止Cookie了),现在有更多的实现方式。
所以,我们可以先调用登录接口,然后把所有的Cookie信息保存到文件中,在之后的请求中,我们可以从文件中随机取一个Cookie中,添加到HTTP请求头中,实现已登录相同的效果。