前言:前面有篇博客记录了接口自动化框架的搭建过程,Pytest+Excel+Mysql+MongDB+Allure接口自动化测试框架从0到1搭建,在实际项目中,调用其他业务接口一般都需要携带Cookie和请求头,还有Tooken、Session是什么,这些概念,本篇博客主要学习下基本的概念,Cookie、Session是怎么产生的,以及在实际接口自动化项目中具体怎么应用
上篇接口自动化测试框架的博客地址:
Pytest+Excel+Mysql+MongDB+Allure接口自动化测试框架从0到1搭建_MRJJ_9的博客-CSDN博客
基本概念
根据自己的理解画了张草图
用户在第一次访问时需要输入用户名和密码,服务器会存储Cookie,Cookie里的值会有sessenID,也就是会话ID,同时也会生成Token令牌
第二次访问时,服务端会返回Cookie,浏览器保存了Token令牌,用Token令牌去访问,就不需要再次输入用户名和密码
Cookie Session Tooken
非常清晰的一篇文章,推荐!
一文讲透Token与Cookie、Session的区别 - 知乎 (zhihu.com)
如何生成Cookie和Session
用java代码演示一下,Cookie、Session是如何生成的
package com.example.interfaceautotest.controller;
import com.example.interfaceautotest.mapper.CaseMapper;
import com.example.interfaceautotest.model.MysqlUserData;
import com.example.interfaceautotest.model.Result;
import com.example.interfaceautotest.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@RestController
@RequestMapping("/test")
public class Login {
@Resource
UserService UserService;
@PostMapping("/login")
public Result login(String username, String password, HttpServletRequest request, HttpServletResponse response) {
HttpSession session = request.getSession();
String sessionId = session.getId();
System.out.println("sessionId是" + sessionId);
session.setMaxInactiveInterval(10);
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
System.out.println(cookie.getName() + ":" + cookie.getValue());
}
}
Object loginName = session.getAttribute("loginName");
if (loginName != null) {
if (loginName.toString().equals(username)) {
return new Result(-100, "不能再次登录", "已经登录过了");
} else {
return new Result(-101, "不能再次登录", "其他用户已经登录了");
}
}
Result login = UserService.login(username, password);
if (login.getCode() == 200) {
session.setAttribute("LoginName", username);
Cookie jsessionidCookie = new Cookie("JSESSIONID", sessionId);
jsessionidCookie.setMaxAge(120);
jsessionidCookie.setPath("/");
response.addCookie(jsessionidCookie);
}
return login;
}
@GetMapping("/logout")
public Result logout(HttpServletRequest request) {
HttpSession session = request.getSession();
String sessionId = session.getId();
System.out.println("登出接口的sessionId是" + sessionId);
session.invalidate();
return new Result(200, "登出成功", "注销!");
}
}
结果展示
在用request调用接口时,可以看到返回的Cookie里返回的sessionID
在用postman调用接口时,也可以看到Cookie里的值
再调用登出接口后,JSESSION的值改变
未完待续……
后续会完善这部分,包括自动化测试中怎么去绕过验证码