JavaWeb16(sessionCookie)

news2024/10/7 18:21:52

目录

1.会话跟踪&HTTP无状态协议.

1.1会话跟踪.

1.2HTTP无状态协议.

2.Cookie.

2.1何为Cookie.

2.2Cookie的有效期.

2.3案例讲解.

2.3.1用cookie做登陆状态验证.

2.3.2验证cookie是将数据保存到客户端及有效期.

2.3.2用cookie做注销.

2.3.3用cookie实现自动登陆.

2.3.4用cookie实现记住密码功能.

3.session.

3.1何为session.

3.2session的生命周期.

3.3session的有效期.

3.4session共享问题.

3.5常用方法.

3.6禁用session.

3.7课堂讲解流程.

3.7.1用session保存用户名.

3.7.2用session做登陆验证.

3.7.3验证session失效时间.

3.7.4手动注销session.

4.session和Cookie的区别.


1.会话跟踪&HTTP无状态协议.

1.1会话跟踪.

  • 会话即session,会话跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是CookiesessionCookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份

  • 在程序中,会话跟踪是很重要的事情。理论上,一个用户的所有请求操作都应该属于同一个会话,而另一个用户的所有请求操作则应该属于另一个会话,二者不能混淆。例如,用户A在超市购买的任何商品都应该放在A的购物车内,不论是用户A什么时间购买的,这都是属于同一个会话的,不能放入用户B或用户C的购物车内,这不属于同一个会话。


1.2HTTP无状态协议.

  • Web应用程序是使用HTTP协议传输数据的,而HTTP协议是无状态的协议,服务器单从网络连接上无从知道客户身份,一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。

  • 例如,用户A购买了一件商品放入购物车内,当再次购买商品时服务器已经无法判断该购买行为是属于用户A的还是用户B的。

  • 要跟踪该会话,必须引入一种机制,而 Cookie 和 session就是这样一种机制。


2.Cookie.

2.1何为Cookie.

  • Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制。目前Cookie已经成为标准,所有的主流浏览器如IE、Google、Firefox等都支持Cookie。

  • 由于HTTP是一种无状态的协议,服务器单从网络连接上无从知道客户身份。怎么办呢?就给客户端们颁发一个通行证吧,每人一个,无论谁访问都必须携带自己通行证。这样服务器就能从通行证上确认客户身份了。这就是Cookie的工作原理。

  • Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

  • 浏览器会在电脑本地磁盘目录里面以记事本形式保存Cookie信息,一个记事本保存一个Cookie。

  • 浏览器保存 Cookie的原理如下所示:

  • Cookie功能需要浏览器的支持,如果浏览器不支持Cookie 或者把Cookie禁用了,Cookie功能就会失效,不同的浏览器采用不同的方式保存Cookie。


2.2Cookie的有效期.

  • Cookie的 maxAge 属性决定着Cookie的有效期,单位为秒,cookie默认有效期为 -1秒,关闭浏览器 cookie里面的数据就消失,和 session效果一样;

  • Cookie 通过 getMaxAge() 方法与 setMaxAge(int maxAge) 方法来读写 maxAge属性:

    • 如果 maxAge 属性值为正数,则表示该Cookie会在maxAge秒之后自动失效。浏览器会将maxAge为正数的Cookie持久化,即写到对应的Cookie文件中。无论客户关闭了浏览器还是电脑,只要还在设定的时间之内,登录网站时该Cookie仍然有效。

    • 如果将 maxAge 属性值设为 MAX_VALUE,那么 Cookie信息将永久有效,如:

    • 如果maxAge为负数,则表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。maxAge为负数的Cookie,为临时性Cookie,不会被持久化,不会被写到Cookie文件中。Cookie信息保存在浏览器内存中,因此关闭浏览器该Cookie就消失了。Cookie默认的maxAge值为–1。

    • 如果maxAge为0,则表示删除该Cookie。Cookie机制没有提供删除Cookie的方法,因此通过设置该Cookie即时失效实现删除Cookie的效果。失效的Cookie会被浏览器从Cookie文件或者内存中删除,如:

  • response对象提供的Cookie操作方法只有一个添加操作:add(Cookie cookie)

  • 要想修改Cookie只能使用一个同名的Cookie来覆盖原来的Cookie,达到修改的目的。删除时只需要把maxAge修改为0即可。

  • 注意:从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。


2.3案例讲解.

  • 页面准备:登陆页面 → 登陆成功数据处理 → 登陆成功页面 → 点击修改按钮 → 修改页面;

2.3.1用cookie做登陆状态验证.

  • 第一步:在登陆数据处理页面/servlet,将用户名保存到 cookie里面,并将 cookie添加到 response里面,必须通过重定向跳转到下个页面;

  • 第二步:将通过 cookie验证登陆状态的代码写到一个jsp页面,如:


2.3.2验证cookie是将数据保存到客户端及有效期.

  • cookie是将数据保存到客户端,我们来验证下这一点:

    1. 在登陆数据处理页面/servlet将用户名保存到 cookie里面;

    2. 操作一遍登陆功能,关闭浏览器;

    3. 直接访问后台 admin.jsp页面,访问不了,跳转到登陆页面,这是因为我们刚刚讲登陆的用户名保存到 cookie里面之后,没有设置 cookie的有效期。而cookie默认的有效期是 -1秒,和session作用一样,浏览器关闭,cookie里面的数据就消失,所以需要重新登陆;

    4. 在登陆数据处理页面设置 cookie的有效期1分钟,执行一遍登陆功能,关闭浏览器;

    5. 直接后台 admin.jsp页面,发现可以访问,从这一点就证明了 cookie是将数据保存到客户端;

    6. 等 1分钟过后,再次访问 后台 admin.jsp页面,发现跳转到登陆页面,这是因为我们设定的 cookie有效期已过,cookie里面的数据已经消失,需要重新登陆。


2.3.2用cookie做注销.

  • 在jsp页面写注销 cookie的代码,如:

    • 然后再登陆成功页面添加:<a href="cookieOut.jsp">注销</a>


2.3.3用cookie实现自动登陆.

  • 效果:登陆一次后,在设定的有效期内,再次访问登陆页面会直接跳转到登陆成功页面;

  • 思路:

    1. 在登陆页面添加一个复选框,用来进行勾选是否自动登陆。如:<input type="checkbox" value=”1” name=”ck”/>自动登录一天;

    2. 登陆数据处理页面,先获取登陆页面复选框的value值,如果获取的是 null,则表示用户没勾选 "自动登陆",如果不为null,那么就表示用户勾选了 "自动登录",就将用户名保存到 cookie里面,并设置 cookie的有效期。如:cook.setMaxAge(60*30);//60秒*30,也就是30分钟

    3. 然后将 cookie对象输出到客户端;

    4. 在登陆页面顶部做判断,如果 cookie里面有用户名,则直接跳转到登陆成功后的页面。如:


2.3.4用cookie实现记住密码功能.

  • 首先在登录数据处理页面/servlet里面,判断用户勾选了 "记住密码"功能后,将账号和密码分别保存到两个不同的 cookie对象里面,并且设置这两个 cookie对象的有效时间,然后将这两个 cookie对象输出到客户端。

  • 在登录页面的处理和自动登陆功能很相似,在登陆页面顶部进行判断,将 cookie里面保存的账号和密码取出来赋给登陆页面的账号和密码文本框,不用页面跳转。代码如下:

  • 注意,可以不用对 cookie数组进行非空判断,因为 Tomcat服务启动会默认创建一个 cookie。


3.session.

3.1何为session.

  • 除了使用Cookie,Web应用程序中还经常使用Session来记录客户端状态。Session是服务器端使用的一种记录客户端状态的机制,使用上比Cookie简单一些,相应的也增加了服务器的存储压力(Session 技术是依赖 Cookie 技术的 服务器端的数据存储技术)

  • session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上,在一次会话的多次请求间共享数据,将数据保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。

  • 如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

  • session可以存储任意类型,任意大小的数据(没有大小限制)


3.2session的生命周期.

  • session将数据保存在服务器端。为了获得更高的存取速度,服务器一般把 session放在内存里。每个用户都会有一个独立的ession。如果session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,session里的信息应该尽量精简。

  • 当多个客户端执行程序时,服务器会保存多个客户端的session。获取Session的时候也不需要声明获取谁的c。session机制决定了当前客户只会获取到自己的session,而不会获取到别人的session。各客户的session也彼此独立,互不可见。

  • session在用户第一次访问服务器的时候自动创建。需要注意只有访问JSP、Servlet等程序时才会创建session,只访问html、image等静态资源并不会创建session。如果尚未生成s,也可以使用request.getSession(true)强制生成 session。

  • session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,并维护该session。用户每访问服务器一次,无论是否读写session,服务器都认为该用户的 session "活跃(active)" 了一次。

  • 提示:session的使用比Cookie方便,但是过多的session存储在服务器内存中,会对服务器造成压力。


3.3session的有效期.

  • session默认有效时间是 30 分钟,超过sessoin有效期,那么session里面保存的数据就会自动消失;

  • session在服务器关闭的时候自动销毁,手动销毁 session,调用 session对象的 invalidate()方法。注意,session是存在于服务器端的,当把浏览器关闭时,浏览器并没有向服务器发送任何请求来关闭Session,自然Session也不会被销毁,需要手动调用销毁 session的方法。

  • 由于会有越来越多的用户访问服务器,因此session也会越来越多。为防止内存溢出,服务器会把长时间内没有活跃的session从内存删除。这个时间就是session的有效时间,如果超过了有效时间没访问过服务器,session就自动失效了,session默认时间是30分钟。

  • 设置session的有效时间属性为 maxInactiveInterval 属性,可以通过对应的 getMaxInactiveInterval() 获取,通过 setMaxInactiveInterval(时间/秒) 修改。

  • session的有效时间也可以在web.xml中修改,如:


3.4session共享问题.

  • 原则上打开一个不同浏览器或同一个浏览器的选项卡代表创建一个新的会话,一个新的 session,但是经测试发现会共享同一个 session;

  • 当所有浏览器都关闭之后,再访问项目,就会产生一个新的 session;

  • 以上两点可以通过在登录成功后打印 session对象或者打印sessionid(session对象调用getId()方法)进行测试验证。


3.5常用方法.

  • 补充方法:

  • request.getSession()

    • Servlet 里通过 request.getSession()方法获取该客户的 session。

  • getSession(boolean create)

    • request还可以使用getSession(boolean create)来获取session。区别是如果该客户的session不存在,request.getSession()方法会返回null,而getSession(true)会先创建session再将session返回。

  • removeAttribute(String attribute)

    • 移除session属性。

  • long getCreationTime()

    • 返回session的创建日期。返回类型为long,常被转化为Date类型,例如:Date createTime = new Date(session.get CreationTime())。

  • long getLastAccessedTime()

    • 返回session的最后活跃时间。返回类型为long。

  • boolean isNew()

    • 返回该session是否是新创建的。

  • String getId()

    • 返回session的ID,该ID由服务器自动创建,不会重复。

  • 用session保存登录时间:session.setAttribute("loginTime", new Date());


3.6禁用session.

  • 我们也可以在 jsp页面禁用 session,在 jsp页面顶部的 page指令里面添加:session="false" 即可,默认是开启 session。

  • 为什么要禁用session?因为 tomcat会为每个请求创建一个 session,哪怕session里面没有存数据,也会默认占1.5kb的服务器内存,久而久之,势必会对服务器造成很大压力,所以在不需要 session的 jsp页面里面就要禁用 session。


3.7课堂讲解流程.

  • 页面准备:登陆页面 → 登陆成功数据处理 → 登陆成功页面 → 点击修改按钮 → 修改页面;

3.7.1用session保存用户名.

  • 在登陆数据处理页面/servlet,将用户名保存到 session里面,在登陆成功页面和修改页面绑定用户名;


3.7.2用session做登陆验证.

  • 第一步:在登陆数据处理页面/servlet,将用户名保存到 session里面;

  • 第二步:在登陆成功页面和修改页面顶部:获取 session里面的用户名,然后通过if判断,如果为空,则跳回到登陆页面。然后不登陆,直接访问登陆成功页面或者修改页面,会提示 "请先登录",并且跳回到登陆页面;

  • 第三步:优化,将登陆状态验证的代码写到一个 jsp页面,然后在需要做验证的页面顶部通过 <%@ include %>指令引入该页面。


3.7.3验证session失效时间.

  • 第一步:在登陆数据处理页面/servlet,将用户名保存到 session里面,在登陆成功页面和修改页面绑定用户名;

  • 第二步:登陆数据处理页面/servlet,将用户名保存到 session里面,并且设置session的有效期为 5秒,登陆成功后在登陆成功页面停留5秒钟,然后点击修改,然后提示 "请先登陆",并且跳回到登陆页面。这是因为达到 session失效时间后,session里面的用户名数据消失,修改页面做了登陆验证判断出 session里面没有用户名,所以就跳回到登陆页面。


3.7.4手动注销session.

  • 编写一个注销session页面:sessionOut.jsp,里面添加注销 session代码:session.invalidate(); 并且跳转到登陆页面。

  • 在登陆成功页面添加:<a href="sessionOut.jsp">注销</a>,然后点击注销,成功实现 session注销功能。


4.session和Cookie的区别.

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。

    • 简单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,客户端每次请求服务器的时候会发送 当前会话的session_id,服务器根据当前session_id判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。

    • session_id是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性。

    • session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的sessionID,用该sessionID 为标识符来存取服务器端的session存储空间。而sessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么session也会失效。

  2. cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

  3. 设置cookie时间可以使cookie过期,使用session.destory(),将会销毁会话。

  4. session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。

  5. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型。

  6. 注意:

    • session很容易失效,用户体验很差;

    • 虽然cookie不安全,但是可以加密 ;

    • cookie也分为永久和暂时存在的;

    • 浏览器有禁止cookie功能,但一般用户都不会设置。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/600792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序设计入门教程--日期格式化类SimpleDateFormat

在程序设计中&#xff0c;经常用到特定的日期格式&#xff0c;此时就可以使用 java.text 包中的 SimpleDateFormat 类来对日期时间进行格式化&#xff0c;如可以将日期转换为指定格式的文本&#xff0c;也可将文本转换为日期。 目标格式 使用SimpleDateFormat类时&#xff0c…

【shiro】shiro整合JWT——4.JWT Token刷新/续签

前言 之前在写shiro整合JWT的时候&#xff0c;在ShiroRealm中有写到token的刷新&#xff1b;但后来看了很多别人的项目demo和博客发现之前的写法不太合适。这里参考之前看过的各个项目与博客&#xff0c;延续这之前shiro整合JWT内容的做了一波缝合怪。 主要对之前的ShiroRealm…

绝地求生 压q python版

仅做学习交流&#xff0c;非盈利&#xff0c;侵联删&#xff08;狗头保命) 一、概述 1.1 效果 总的来说&#xff0c;这种方式是通过图像识别来完成的&#xff0c;不侵入游戏&#xff0c;不读取内存&#xff0c;安全不被检测。 1.2 前置知识 游戏中有各种不同的q械&#xf…

深入浅出:FFmpeg 音频解码与处理全解析

深入浅出&#xff1a;FFmpeg 音频解码与处理全解析 一、FFmpeg 简介1.1 FFmpeg 的历史与发展1.2 FFmpeg 的主要组成部分 二、音频编解码基础 (Basics of Audio Encoding and Decoding)2.1 音频编解码的原理 (Principle of Audio Encoding and Decoding)2.1.1 采样 (Sampling)2.…

chatgpt赋能python:Python函数调用局部变量-深入了解

Python函数调用局部变量-深入了解 函数调用局部变量是Python中的一个重要概念&#xff0c;特别是在大型项目中&#xff0c;其中多个函数共享相同变量时。在本文中&#xff0c;我们将深入探讨Python函数调用局部变量&#xff0c;并为您介绍一些实用技巧。 什么是Python函数调用…

chatgpt赋能Python-python函数计算器

简介 Python是一种高级编程语言&#xff0c;它在数据科学和机器学习等领域非常流行。但是&#xff0c;很多人可能不知道它也可以用来编写简单的函数计算器。 在本文中&#xff0c;我们将介绍一些基本的Python函数&#xff0c;并教你如何使用它们来编写一个简单但强大的函数计…

C 语言里面的 extern “C“ ,并没有那么简单!

前言 本文详细解析extern "C"的底层原理与实际应用。在你工作过的系统里&#xff0c;不知能否看到类似下面的代码。 这好像没有什么问题&#xff0c;你应该还会想&#xff1a;“嗯⋯是啊&#xff0c;我们的代码都是这样写的&#xff0c;从来没有因此碰到过什么麻烦啊…

CTEX中使用winEdt排版编辑插入图片.eps应用排版举例

CTEX中使用winEdt排版编辑插入图片.eps应用排版举例 在使用WinEdt进行排版编辑的时候&#xff0c;可以对文档格式排版等灵活快速排版&#xff0c;并实现pdf的文档的生成。本文将举例说明在WinEdt中&#xff0c;插入图片的方法的排版举例应用。 一、具体方法步骤 1.根据已有图片…

配置OCI上数据库服务的EM Database Express

本文参考了以下文档&#xff1a; DBCS: How To Setup EM Express in Bare Metal and Virtual Machine DB Systems(OCI) (Doc ID 2453454.1)Oracle Database 12c: EM Database ExpressAccess the Database Home Page in EM Database Express 第1步&#xff1a;数据库中设端口 …

【嵌入式烧录/刷写文件】-2.8-Hex文件转换为S19文件

案例背景(共5页精讲)&#xff1a; 有如下一段Hex文件&#xff0c;将其转换为Motorola S-record(S19/SREC/mot/SX)文件。 :2091000058595A5B5C5D5E5F606162636465666768696A6B6C6D6E6F70717273747576775F :2091200078797A7B7C7D7E7F808182838485868788898A8B8C8D8E8F909192939…

​ACL 2023 | 用二分类解决无监督常识问答

常识推理最近在自然语言处理研究中引起了广泛关注&#xff0c;现有的常识推理方法一般分为两种&#xff1a;一种是在开源数据集上对大型语言模型进行微调 [1]&#xff0c;另一种是借助外部知识图谱来训练。然而&#xff0c;构建有标注的常识推理数据集既昂贵&#xff0c;又受限…

uCOSii消息队列

消息队列管理(MESSAGE QUEUE MANAGEMENT) 1、消息队列定义 消息队列好比人们排队买票&#xff0c;排队的人好比是消息&#xff0c;每来一个人&#xff0c;都要到队伍的尾部去排队&#xff0c;叫添加一条消息到队列中。售票员卖票给先到的人&#xff0c;叫从对列中接收一条消息…

Talk预告 | 罗格斯大学徐子昊:在域迁移学习中,用变分推理自动生成可解释的域索引

本期为TechBeat人工智能社区第501期线上Talk&#xff01; 北京时间5月31日(周三)20:00&#xff0c;罗格斯大学 在读博士生—徐子昊的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “在域迁移学习中&#xff0c;用变分推理自动生成可解释的域索引…

Expeditors EDI需求详解

Expeditors是一家全球性的物流公司&#xff0c;成立于1979年&#xff0c;总部位于美国华盛顿州的西雅图。该公司提供海运、空运、货运代理、清关、仓储等一系列全球物流服务&#xff0c;并致力于通过数字化技术提高供应链的可见性和效率。Expeditors的客户遍及各行各业&#xf…

CMAKE变量与选择详解

目录 在 CMake 中&#xff0c;变量和选项是&#xff1a; CMake中的变量&#xff1a; 接下来是一个cmake的案例&#xff1a; 在CMake中定义和使用函数&#xff1a; 在 CMake 中&#xff0c;变量和选项是&#xff1a; 变量&#xff08;Variables&#xff09;&#xff1a; CMak…

chatgpt赋能python:Python函数查看快捷键:不可或缺的工具

Python函数查看快捷键&#xff1a;不可或缺的工具 Python是一门流行的编程语言&#xff0c;是数据分析、机器学习、人工智能等各种领域的首选语言。对于有10年Python编程经验的开发人员来说&#xff0c;Python函数查看快捷键可能是最熟悉的工具之一。因此&#xff0c;本篇文章…

k8s部署docker

1 环境准备 操作系统&#xff1a;centos7.9_x64 Docker&#xff1a;20-ce K8s&#xff1a;1.23 操作系统最小硬件配置&#xff08;在vmmare安装时需要选择&#xff09;&#xff1a;2核CPU、2G内存、20G硬盘 k8s-master&#xff1a;192.168.88.191 k8s-node1&#xff1a;192.…

chatgpt赋能python:Python冒泡排序算法详解

Python冒泡排序算法详解 介绍 冒泡排序是一种简单但相对较慢的排序算法。这个算法会重复地遍历要排序的数列&#xff0c;每次比较两个元素&#xff0c;如果它们的顺序错误就交换它们的位置&#xff0c;直到没有任何一对元素需要交换为止。这个算法由于排序过程中最大元素就像…

怎么用Excel VBA写一个excel批量合并的程序?

您可以按照以下VBA代码来实现把同一路径上的所有工作簿合并到同一个工作簿中&#xff1a; VBA Option Explicit Sub MergeWorkbooks() Dim path As String, fileName As String, sheet As Worksheet Dim targetWorkbook As Workbook, sourceWorkbook As Workbook Dim workshe…

建立可重复使用的自动测试过程

建立可重复使用的自动测试过程 在软件开发领域&#xff0c;自动化测试已经成为必不可少的一部分&#xff0c;它可以提高软件产品的质量、减少错误率、加快测试时间。但是&#xff0c;为了让自动测试过程更加高效和可重复使用&#xff0c;需要建立一套稳定的自动化测试框架。 自…