Cookie Session Token是什么?

前言:前面有篇博客记录了接口自动化框架的搭建过程,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的值改变

未完待续……

后续会完善这部分,包括自动化测试中怎么去绕过验证码

猜你喜欢

转载自blog.csdn.net/MRJJ_9/article/details/131254614