目录
【前言】
【1. 添加Cookie管理器】
【2. 登录接口获取Cookie】
【3. Cookie关联】
【4. 动态修改Cookie值】
【结论】
【附录】
【前言】
在接口测试中,我们经常需要对Cookie进行处理和关联,来模拟用户在浏览器中的操作。特别是在登录和权限校验等场景下,Cookie的正确处理和关联是非常重要的。
【1. 添加Cookie管理器】
首先我们需要在测试计划中添加Cookie管理器。选择“添加”菜单下的“Config Element”-“HTTP Cookie Manager”即可。
【2. 登录接口获取Cookie】
通常我们需要先登录接口获取Cookie,JMeter可以通过HTTP请求模拟登录操作,并且在正文处理Cookie信息。
下面是一个示例代码:
POST /login HTTP/1.1
Host:www.xxx.com
Content-Type:application/x-www-form-urlencoded
Content-Length:20
username=test&password=123456
在该请求中,我们可以在“正文”中添加用户名和密码。当请求成功后,服务器会返回登录用户的Cookie信息。我们需要将该信息保存下来,用于后续的接口测试。
【3. Cookie关联】
在一些需要使用Cookie的接口请求中,我们需要使用之前获取的Cookie信息。这个时候就需要用到JMeter的Cookie关联技巧了。
关联技巧,顾名思义,就是根据前面的请求结果,将相应的信息提取出来,并在后续的请求中使用。关联技巧通常使用正则表达式来实现。
下面是一个示例代码:
GET /userinfo HTTP/1.1
Host:www.xxx.com
Content-Type:application/x-www-form-urlencoded
Cookie: ${login_cookie}
在该请求中,我们使用了Cookie Manager中保存的Cookie信息,通过${login_cookie}来引用变量。
【4. 动态修改Cookie值】
一些场景下,我们需要在测试过程中更改Cookie的某些值,比如sessionid,来模拟用户在不同场景中的操作。这时候,我们可以使用JMeter的BeanShell或JSR223技术,来动态修改Cookie的值。
下面是一个示例代码:
vars.put("login_cookie", "${COOKIE_JSESSIONID}");
vars.put("new_session_id","abcdefghi");
cookie = vars.get("login_cookie");
index = cookie.indexOf("JSESSIONID");
new_cookie = cookie.subString(0, index+11) +vars.get("new_session_id") + cookie.subString(index+11+36)
vars.put("login_cookie", new_cookie);
在该示例中,我们使用了BeanShell技术,将原来的Cookie信息中的JSESSIONID替换成了随机生成的新值,然后将更新后的Cookie信息放回到变量中。
【结论】
本文介绍了JMeter接口测试中的常用Cookie处理和关联技巧,同时提供了一些针对公司产品的示例代码,希望能为大家的接口测试工作提供帮助。
【附录】
Cookie Manager的常用属性:
1. Clear Cookies每次执行测试前是否清除cookies
2. Cookie Policy指定Cookie的策略
3. Implementation选择Cookie管理器的具体实现方式
Java代码示例:
import java.io.IOException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
public class testhttp {
public static void main(String[] args) throws IOException {
//获取HttpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
//创建HttpGet请求实例
HttpGet httpGet = new HttpGet("https://www.baidu.com");
//执行请求并获取服务器响应对象
CloseableHttpResponse response = httpClient.execute(httpGet);
//打印响应码和响应数据
System.out.println(response.getStatusLine().getStatusCode());
System.out.println(EntityUtils.toString(response.getEntity()));
//关闭资源
response.close();
httpClient.close();
}
}
作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试的必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!
留【自动化测试】即可
【测试交流】:574737577(备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=rX-rPzfPYeSH_v0uvLvM8rGZzqN7DHNV&authKey=6QTg887e0uLrxKmMkY1wHIrGRCX1Am54wFozK%2BTMSgdSFPauLc2Z44QRoRXUiTLb&noverify=0&group_code=574737577