python自动化测试实战 —— 单元测试框架

软件测试专栏

感兴趣可看:软件测试专栏
                     自动化测试学习部分源码
python自动化测试相关知识:
       【如何学习Python自动化测试】—— 自动化测试环境搭建
       【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更新driver
       【如何学习Python自动化测试】—— 页面元素定位
       【如何学习Python自动化测试】—— 时间等待
       【如何学习Python自动化测试】—— 浏览器操作
       【如何学习Python自动化测试】—— 鼠标键盘操作
       【如何学习Python自动化测试】—— 多层窗口定位
       【如何学习Python自动化测试】—— 警告框处理
       【如何学习Python自动化测试】—— Cookie 处理
       【如何学习Python自动化测试】—— expected_conditions
       【如何学习Python自动化测试】—— Python 的 unittest 框架
       【如何学习Python自动化测试】—— HTMLTestRunner 生成测试报告


单元测试框架

  • 软件测试专栏
  • 实战相关知识
    • 1.unittest框架
    • 2.Pytest测试框架
  • 实战内容
    • 1.“百度翻译”的页面UI测试
      • (1)利用unittest框架完成
      • (2)利用Pytest框架完成
    • 2.“新浪微博”的两个页面UI测试
      • (1)利用unittest框架完成
      • (2)利用Pytest框架完成
  • 操作异常问题与解决方案
  • 总结
  • 附录

实战相关知识

1.unittest框架

      unittest框架是Python语言内置的单元测试框架,Python编写的Web UI自动化测试脚本可以借助该框架来组织和执行。

(1)UnitTest组成部分

  • TestFixture(测试固件):测试用例的准备和销毁。
  • TestCase(测试用例):一个TestCase的实例就是一个测试用例。
  • TestSuite(测试套件):将多个测试用例集合在一起就是一个TestSuite。
  • TestRunner(测试运行器):使用TextTestRunner提供的 run( )方法执行测试用例。

(2)使用UnitTest测试框架注意:

  • 首先需要导入unittest包:import unittest。
  • 导入包的语句和定义测试类中间要隔两个空行。
  • 新建测试类的名称,建议每个单词的首字母大写,编写顺序建议保持团队一致。
  • 测试类必须继承unittest.TestCase
  • 接下来可以编写setUp,setUp方法不是必须需要的。
  • 接下来可以编写测试用例,测试用例名称以”test_”开头。
           self.assertXXX是UnitTest提供的断言方法
  • 用例写完,就可以编写tearDown,tearDown也不是必须要有。
          tearDown写完后空两行,就可以使用unittest.main()进行测试了。

(3)用HTMLTestRunner模块生成可视化测试报告。

2.Pytest测试框架

      Pytest测试框架在当今自动化测试中更受欢迎,是一个非常流行且成熟的全功能的Python测试框架,适用于单元测试、UI测试、接口测试。

(1)Pytest规则

  • 文件命名:默认以“test_”开头或者以”_test”结尾。
  • 测试类(class)命名:默认以“Test”开头
  • 测试方法(函数)命名:默认以“test_”开头
  • 断言:直接使用Python语言的断言assert

(2)Pytest测试固件

  • 如果测试文件中没有定义class,而是直接定义的函数,那么使用setup_module、teardown_module 和 setup_function、teardown_function
  • 如果测试文件中定义了class,就使用setup_class、teardown_class 和 setup_method、teardown_method
  • 不管是否定义class,都可以使用setup、teardown来实现在每个方法(或函数)的前后执行。
  • 建议在一个项目中约定好是定义class来组织测试用例,还是直接定义函数来组织用例。

(3)测试用例
      Pytest和unittest的框架风格基本一致,但有几点要注意:

  • 注意函数或方法名以“test_”开头
  • 直接通过函数定义测试用例的话,def后面的括号中没有self
  • 通过class中的方法定义测试用例的话,def后面的括号中有self。
  • 断言用的是Python的断言方式。

(4)用第三方插件完成测试报告的生成。

实战内容

1.“百度翻译”的页面UI测试

      将“百度翻译”的页面UI测试(至少包含翻译功能这个测试用例)的自动化测试线性脚本,分别用unittest和Pytest框架完成,并生成测试报告。

(1)利用unittest框架完成

首先需要导入包
在这里插入图片描述

新建测试类的名称,测试类必须继承unittest.TestCase
在这里插入图片描述

编写setUp
在这里插入图片描述

编写测试用例,测试用例名称以”test_”开头。

  • 用例1:输入的文字与语言不一致
    在这里插入图片描述
    使用assertTRUE断言方法,断言网页会输出与输入文字匹配的语言,如下图
    在这里插入图片描述

  • 用例2:输入的文字与语言一致
    在这里插入图片描述
    使用assertEqual断言方法,断言输出文本框结果与预期结果一致,如下图
    在这里插入图片描述
    用例写完,编写tearDown
    在这里插入图片描述
    tearDown写完后空两行,使用unittest.main()进行测试
    在这里插入图片描述
    用第三方插件完成测试报告的生成
    将HTMLTestRunner.py和run.py以及__init__.py文件放置与脚本文件同级目录下,如下图:
    在这里插入图片描述
    编写run.py文件
    在这里插入图片描述
    运行run.py文件
    运行结果如下
    在这里插入图片描述
    出现如上结果,说明两个测试用例通过
    测试报告如下
    在这里插入图片描述

(2)利用Pytest框架完成

首先需要导入包
在这里插入图片描述
新建测试类的名称,默认以“Test”开头
在这里插入图片描述

编写setUp
在这里插入图片描述
编写测试用例,测试用例名称以”test_”开头。

  • 用例1:输入的文字与语言不一致
    在这里插入图片描述
    使用Python语言的断言assert,断言网页会输出与输入文字匹配的语言

  • 用例2:输入的文字与语言一致
    在这里插入图片描述
    使用Python语言的断言assert,断言输出文本框结果与预期结果一致

  • 用例写完,编写teardown
    在这里插入图片描述
    全局设置
    创建一个配置文件:pytest.ini
    该文件要和需要执行的测试文件所在的目录文件在同一级
    如下图所示:
    在这里插入图片描述
    pytest.ini内容如下:
    在这里插入图片描述
    通过addopts来设置命令行参数;-v 监控、失败重试的次数、重试的时间间隔、按标签来执行、生成测试报告,多个参数之间用空格分隔

  • 接着在py文件teardown后两行,使用pytest.main()进行测试
    在这里插入图片描述
    运行结果如下
    在这里插入图片描述
    出现passed说明两个测试用例通过
    测试报告如下
    在这里插入图片描述

2.“新浪微博”的两个页面UI测试

      将“新浪微博”的两个页面UI测试(至少包含登录账号、发文字微博两个测试用例)的自动化测试线性脚本,分别用unittest和Pytest框架完成,并生成测试报告。

(1)利用unittest框架完成

首先需要导入包
在这里插入图片描述

新建测试类的名称,测试类必须继承unittest.TestCase
在这里插入图片描述

编写setUp,因为用例二需要登录才能进行测试,所以登录需要写进setUp
在这里插入图片描述

编写测试用例,测试用例名称以”test_”开头。

  • 用例1:登录账号,这里仅测试是否通过
    在这里插入图片描述
    使用assertIn断言方法,断言用户名‘111Nuyoah111’会出现在网页中
    在这里插入图片描述

  • 用例2:发布微博文字
    使用assertIn断言方法,断言发布内容成功,如下图
    在这里插入图片描述

  • 用例写完,编写tearDown
    在这里插入图片描述

  • tearDown写完后空两行,使用unittest.main()进行测试
    在这里插入图片描述
    用第三方插件完成测试报告的生成
    将HTMLTestRunner.py和run.py以及__init__.py文件放置与脚本文件同级目录下,如下图:
    在这里插入图片描述

  • 编写run.py文件
    在这里插入图片描述
    运行run.py文件
    运行结果如下
    在这里插入图片描述
    出现如上结果,说明两个测试用例通过
    测试报告如下
    在这里插入图片描述

(2)利用Pytest框架完成

首先需要导入包
在这里插入图片描述

新建测试类的名称,默认以“Test”开头
在这里插入图片描述

编写setUp
在这里插入图片描述

编写测试用例,测试用例名称以”test_”开头。

  • 用例1:登录账号,这里仅测试是否通过
    在这里插入图片描述

使用assertIn断言方法,断言用户名‘xxx’会出现在网页中

  • 用例2:发布微博文字
    在这里插入图片描述
    使用assertIn断言方法,断言发布内容成功

  • 用例写完,编写teardown
    在这里插入图片描述
    全局设置
    创建一个配置文件:pytest.ini
    该文件要和需要执行的测试文件所在的目录文件在同一级
    如下图所示:
    在这里插入图片描述
    pytest.ini内容如下:
    在这里插入图片描述
    通过addopts来设置命令行参数;-v 监控、失败重试的次数、重试的时间间隔、按标签来执行,多个参数之间用空格分隔
    运行生成测试报告,在py文件teardown后两行,使用pytest.main()进行测试
    在这里插入图片描述

  • 运行结果如下
    在这里插入图片描述
    出现passed说明两个测试用例通过
    测试报告如下
    在这里插入图片描述

操作异常问题与解决方案

  • 问题1:pytest框架脚本运行失败
  • 解决方法:通过查询,发现是pytest环境问题,所以将pytest及相关插件卸载后在全局目录下重新下载

  • 问题2:allure在成功使用后,再次使用会自动跳过测试用例
    在这里插入图片描述

  • 解决方法:allure环境不稳定,更换测试报告方法,使用pytest-html完成测试报告


  • 问题3:微博无法使用账号密码登录,测试用例无法完成登录的试错
  • 解决方法:修改代码,直接在setup固件进行手动登录,最后加入一个登录的测试用例进行断言

总结

      Unittest和Pytest是Python中常用的两个测试框架,用于编写和执行单元测试。

      Unittest是Python的内置测试框架之一,可以通过导入unittest模块来使用。Unittest提供了一组用于编写测试用例的类和方法,测试用例是通过继承unittest.TestCase类来创建的。测试方法以test_开头,并且可以使用断言方法(如assertEqual()、assertTrue()等)来验证预期行为。Unittest提供了丰富的功能和工具,如测试套件、测试装置(setUp()和tearDown()方法)、测试发现等。可以使用命令行工具或集成开发环境(IDE)来运行Unittest测试。

      Pytest是一个第三方的Python测试框架,可以通过安装pytest库来使用。Pytest提供了更简洁、灵活和可扩展的方式来编写测试用例。不需要继承特定的基类,可以使用普通的函数定义测试用例,用assert语句来断言结果。Pytest具有丰富的插件生态系统和许多附加功能,例如自动发现测试文件、参数化测试、夹具(fixtures)等。Pytest支持使用命令行工具来运行测试,并提供了丰富的输出和报告选项。

      unitest和pytest的区别是:语法风格:Unittest使用类和方法的方式来组织测试用例,而Pytest使用函数定义测试用例。灵活性:Pytest提供了更灵活和简洁的语法,没有像Unittest那样的约束。Pytest的编写方式更为简单,减少了样板代码的编写。插件生态系统:Pytest具有丰富的插件生态系统,提供了许多附加功能和扩展选项,而Unittest相对较少。自动发现测试:Pytest具有自动发现测试文件和用例的功能,而Unittest需要手动设置测试套件和加载用例。夹具支持:Pytest提供了强大的夹具(fixtures)机制,用于管理测试数据和环境设置。Unittest也支持夹具,但Pytest的夹具功能更为灵活和强大。

      总体而言,Pytest相对于Unittest提供了更简洁、灵活且功能更丰富的测试框架,能够简化测试代码的编写和维护,并提供更好的测试发现和报告功能。当然,选择使用哪个框架取决于个人偏好和项目需求。

附录

部分源码(与上面截图有所不同,仅供参考)

Baidu unittest

from selenium import webdriver
import unittest
from time import sleep
from selenium.webdriver.common.by import Byclass TestBaidu(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(20)# 访问登录页self.driver.get('https://fanyi.baidu.com/')# 移除广告弹窗self.driver.find_element(By.CLASS_NAME,'app-guide-close').click()def test_001(self):# 用例一:输入的文字与选择的语言不一致# 选择语言阿拉伯语language = self.driver.find_element(By.CLASS_NAME,'select-from-language')language.click()language_text=self.driver.find_element(By.XPATH,'//*[@id="lang-panel-container"]''/div/div[5]/div[1]/div[1]/div/span[1]')language_text.click()#输入翻译文本英语intext =self.driver.find_element(By.CLASS_NAME,'textarea')intext.send_keys('love')sleep(2)# 输入不匹配文字后的提示信息self.assertTrue(self.driver.find_element(By.LINK_TEXT,'英语'))def test_002(self):# # 用例二:输入的文字与选择的语言一致# 选择语言英语language = self.driver.find_element(By.CLASS_NAME, 'select-from-language')language.click()language_text = self.driver.find_element(By.XPATH,'//*[@id="lang-panel-container"]''/div/div[5]/div[1]/div[21]/div/span[1]')language_text.click()# 输入翻译文本英语intext = self.driver.find_element(By.CLASS_NAME, 'textarea')intext.send_keys('love')sleep(2)# 输入不匹配文字后的提示信息outtext = self.driver.find_element(By.CLASS_NAME, 'output-bd').textself.assertEqual(outtext,'爱')def tearDown(self):self.driver.quit()if __name__ == '__main__':unittest.main()

Baidu pytest

from time import sleepimport pytest
from selenium import webdriver
from selenium.webdriver.common.by import Byclass TestBaidu():def setup(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(20)# 访问登录页self.driver.get('https://fanyi.baidu.com/')# 移除广告弹窗self.driver.find_element(By.CLASS_NAME,'app-guide-close').click()@pytest.mark.L1def test_001(self):# 用例一:输入的文字与选择的语言不一致# 选择语言阿拉伯语language = self.driver.find_element(By.CLASS_NAME,'select-from-language')language.click()language_text=self.driver.find_element(By.XPATH,'//*[@id="lang-panel-container"]''/div/div[5]/div[1]/div[1]/div/span[1]')language_text.click()#输入翻译文本英语intext =self.driver.find_element(By.CLASS_NAME,'textarea')intext.send_keys('love')sleep(2)# 输入不匹配文字后的提示信息assert '英语' == self.driver.find_element(By.LINK_TEXT,'英语').text@pytest.mark.L2def test_002(self):# # 用例二:输入的文字与选择的语言一致# 选择语言英语language = self.driver.find_element(By.CLASS_NAME, 'select-from-language')language.click()language_text = self.driver.find_element(By.XPATH,'//*[@id="lang-panel-container"]''/div/div[5]/div[1]/div[21]/div/span[1]')language_text.click()# 输入翻译文本英语intext = self.driver.find_element(By.CLASS_NAME, 'textarea')intext.send_keys('love')sleep(2)# 输入不匹配文字后的提示信息outtext = self.driver.find_element(By.CLASS_NAME, 'output-bd').textassert outtext=='爱'def teardown(self):self.driver.quit()if __name__ == '__main__':pytest.main(["-s", "./test_baidu.py"])

Weibo unittest

from selenium import webdriver
import time,unittest
# 通过时间戳,构造唯一project name
from selenium.webdriver.common.by import Byproject_name = 'project_{}'.format(time.time())class TestNewProject(unittest.TestCase):def setUp(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(20)# 登录self.driver.get('https://weibo.com')self.driver.find_element(By.CLASS_NAME, 'LoginCard_btn_Jp_u1').click()time.sleep(8)  # 手动扫码登录def test_new_project(self):# 测试搜索框输入框self.driver.find_element(By.CLASS_NAME,'Form_input_2gtXx').send_keys('123')time.sleep(1)self.driver.find_element(By.CLASS_NAME,'Visible_angle_MP2Km').click()time.sleep(1)self.driver.find_element(By.XPATH,'//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[3]/div/div/div[4]').click()# 测试发布self.driver.find_element(By.CLASS_NAME,'Tool_btn_2Eane').click()time.sleep(1)self.assertIn('123', self.driver.page_source)def tearDown(self):self.driver.quit()if __name__ == '__main__':unittest.main()

Weibo pytest

import time
import pytest
from selenium import webdriver
from selenium.webdriver.common.by import Byclass TestWeibo  ():def setup(self):self.driver = webdriver.Chrome()self.driver.maximize_window()self.driver.implicitly_wait(20)# 登录self.driver.get('https://weibo.com')self.driver.find_element(By.CLASS_NAME, 'LoginCard_btn_Jp_u1').click()time.sleep(8)  # 手动扫码登录@pytest.mark.L1def test_new_project(self):assert 'xxx' in self.driver.page_source#此处自行修改“xxx”# 测试搜索框输入框self.driver.find_element(By.CLASS_NAME,'Form_input_2gtXx').send_keys('123')time.sleep(1)self.driver.find_element(By.CLASS_NAME,'Visible_angle_MP2Km').click()time.sleep(1)self.driver.find_element(By.XPATH,'//*[@id="homeWrap"]/div[1]/div/div[4]/div/div[3]/div/div/div[4]').click()# 测试发布self.driver.find_element(By.CLASS_NAME,'Tool_btn_2Eane').click()time.sleep(1)assert '123' in self.driver.page_sourcedef teardown(self):self.driver.quit()if __name__ == '__main__':pytest.main(["-s", "test_weibo.py", "--html=./report.html"])

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

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

相关文章

swing快速入门(五)

注释很详细,直接上代码 上一篇 本篇新增内容: 1.布局管理器BorderLayout 2.自适应尺寸方法pack() import java.awt.*; public class swing_test_3 {public static void main(String[] args) {Frame framenew Frame("演示BorderLayout");//…

第十六届山东省职业院校技能大赛高职组“应用软件系统开发”赛项样题

第十六届山东省职业院校技能大赛 高职组“应用软件系统开发”赛项样题 目录 一.竞赛须知 二.竞赛任务标题二 模块一:系统需求分析(25分) 模块二:软件系统开发(55分) 模块三&am…

【APP安卓测试工具】adb(Android Debug Bridge)

1.常见的命令 列出已连接的设备 adb device安装 adb install <APK文件路径>卸载 adb uninstall <APK文件路径>启动和停止 adb shell am start -n <包名>[/<Activity>]adb shell am force -stop <包名>截屏和录屏 adb shell screencap <文件路…

cordic 算法学习记录

参考&#xff1a;b站教学视频FPGA&#xff1a;Cordic算法介绍与实现_哔哩哔哩_bilibili FPGA硬件实现加减法、移位等操作比较简单&#xff0c;但是实现乘除以及函数计算复杂度高且占用资源多&#xff0c;常见的计算三角函数/平方根的求解方式有①查找表&#xff1a;先把函数对应…

JVM面试连环炮:你准备好迎接挑战了吗?

在Java开发领域&#xff0c;JVM面试一直是一个热门话题。作为一名优秀的开发者&#xff0c;你是否已经准备好迎接这场挑战了呢&#xff1f;今天&#xff0c;我们就来深度解析一下JVM面试的热点问题&#xff0c;帮助你更好地应对面试&#xff0c;一举拿下offer&#xff01; 1、…

Python 使用sphinx生成API文档

目录 前言: 项目层级 Python项目docstring规范 Example Google Style Python Docstrings Example NumPy Style Python Docstrings reStructuredText Style 设置代码docstrings风格(pycharm) 安装sphinx 创建sphinx文档项目 配置conf.py文件 编译代码为api文档 编译…

vim + ctags 跳转, 查看函数定义

yum install ctags Package ctags-5.8-13.el7.x86_64 already installed and latest version 创建 /home/mzh/pptp-master/tags.sh #!/usr/bin/shWORKDIR/home/mzh/pptp-masterfind ${WORKDIR} -name "*.[c|h]" | xargs ctags -f ${WORKDIR}/tags find /usr/inclu…

final的安全发布

final的安全发布 两个关键字“发布”“安全” 所谓发布通俗一点的理解就是创建一个对象&#xff0c;使这个对象能被当前范围之外的代码所使用 比如Object o new Object(); 然后接下来使用对象o 但是对于普通变量的创建&#xff0c;之前分析过&#xff0c;大致分为三个步骤&am…

k8s之身份认证与权限

Kubernetes 中提供了良好的多租户认证管理机制&#xff0c;如 RBAC、ServiceAccount 还有各种策略等。 通过该文件可以看到已经配置了 RBAC 访问控制 /usr/lib/systemd/system/kube-apiserver.service 1.1 认证 所有 Kubernetes 集群有两类用户&#xff1a;由 Kubernetes 管理的…

mysql数据库学习笔记(1)

今天开始学mysql数据库&#xff0c;为什么要学这个呢&#xff0c;因为数据库可结构化存储大量的数据信息&#xff0c;方便用户进行有效的检索和访问。数据库可有效地保持数据信息的一致性、完整性、降低数据冗余。数据库可满足应用的共享和安全方面的要求&#xff0c;把数据放在…

java--认识异常、自定义异常

1.异常体系 Error&#xff1a;代表的系统级别错误(属于严重问题)&#xff0c;也就是说系统一旦出现问题&#xff0c;sun公司会把这些问题封装成Error对象给出来&#xff0c;说白了&#xff0c;Error是给sun公司自己用的&#xff0c;不是给我们程序员用的&#xff0c;因此我们开…

MacOS下homebrew的安装与使用

安装Homebrew //删除原来的文件&#xff0c;可以在删除前查看下Cellar文件夹下已安装的包,homebrew将工具安装在这个文件夹下&#xff0c;并在/usr/local/bin下建立连接 sudo -irm -rf /usr/local/Cellar /usr/local/.gi sudo chown -R liudong /usr/local //更新文件属主为liu…

114. 二叉树展开为链表 --力扣 --JAVA

题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 解题思路 …

通过Ai帮我们写前端界面设计

现在我要写一个前端界面&#xff0c;from表单&#xff0c;让用户登录使用的&#xff0c;提交表单之前先分析用户名和密码是否填的完成&#xff0c;并且检查密码必须满足 包含大小写&#xff0c;数字&#xff0c;密码长度必须在8到20之间&#xff0c;不满足不可以提交。用户名必…

ethtool

ethtool ethtool是一个常用的命令行工具&#xff0c;用于配置和查询以太网接口的驱动程序和硬件参数。它提供了一种简单的方式来检查和修改网络接口的设置&#xff0c;以及获取与以太网接口相关的统计数据和状态信息。 ethtool可以执行以下常见的操作&#xff1a; 查询接口信息…

【Hadoop】修改YARN配置文件

本节需要修改的 YARN 配置文件保存在$HADOOP_HOME/etc/haoop 目录下&#xff0c;需要修改的文件共有 7 个&#xff0c;分别是&#xff1a;core-site.xml, hadoop-env.sh, hdfs-site.xml, yarn-site.xml, yarn-env.sh, mapred-site.xml, slave. 这些文件的用途&#xff1a; core…

Mysql:慢cpu过高慢sql查询方法

通过 processlist查询较为便捷&#xff0c;只是结果的info中只会显示sql的前100个字符。 show processlist 通过下面语句查询可显示当前正在执行的完整sql。 SELECT * FROM information_schema.processlist WHERE COMMAND ‘Query’; 借助navicate数据库工具的监控功能查询库的…

大数据技术2:大数据处理流程

前言&#xff1a;下图是一个简化的大数据处理流程图&#xff0c;大数据处理的主要流程包括数据收集、数据存储、数据处理、数据应用等主要环节。 1.1 数据收集 大数据处理的第一步是数据的收集。现在的中大型项目通常采用微服务架构进行分布式部署&#xff0c;所以数据的采集需…

【常用字符大全】含emoji表情

常用符号大全 ❤❥웃유♋☮✌☏☢☠✔☑♚▲♪✈✞↑↓◆◇⊙■□△▽─│♥❣♂♀☿Ⓐ✍✉☣☤✘☒♛▼♫⌘☪≈←→◈◎☉★☆⊿※¡━┃♡ღツ☼☁❅♒✎©™Σ✪✯☭➳卐√↖↗●◐Θ◤◥︻〖〗┄┆℃℉✿ϟ☃☂✄¢€£∞✫★✡↙↘○◑⊕◣◢︼【】┅┇…

Java 中适合使用队列(Queue)的场景

在 Java 中&#xff0c;队列&#xff08;Queue&#xff09;适合用于以下场景&#xff1a; 先进先出&#xff08;FIFO&#xff09;数据处理&#xff1a;当需要按照数据的添加顺序进行处理时&#xff0c;可以使用队列。例如&#xff0c;处理任务队列、消息队列等。 示例&#xff…