Jmeter测试计划

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

测试计划

可以将测试计划可视化为用于运行测试的JMeter脚本。测试计划由测试元素组成,例如线程组,逻辑控制器,样本生成控制器,监听器,定时器,断言和配置元素。 每个测试计划中至少应有一个线程组。 我们可以根据要求添加或删除元素。 前言中的快速开始就是一个测试计划。

测试计划控制面板中的元素:

  • 名称和注释

  • 用户定义的变量

  • 独立运行每个线程组

  • 主线程结束后运行tearDown线程组

  • 函数测试模式

  • 添加目录或jar包到classpath

用户定义的变量

当在测试计划的多个部分中存在重复的数值时,可以通过用户定义的变量来提供更灵活的设置。

测试计划控制面板中的用户定义的变量的作用域覆盖整个测试计划。

你可以通过${变量名称}的方式来引用这些变量。这种方式允许你在不同的请求或操作中使用相同的数值,从而更加方便地维护和修改。

示例接口代码:


<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-python"><span style="color:#2b91af">@api.route(<span style="color:#3388aa">'/TestPlan/'</span>, methods=[<span style="color:#3388aa">'GET'</span>, <span style="color:#3388aa">'POST'</span>])</span>
<span style="color:#0000ff">def</span> <span style="color:#a31515">testplan</span>():  <span style="color:#008000"># Jmeter教程测试计划-用户定义的变量api</span><span style="color:#0000ff">if</span> request.method != <span style="color:#a31515">'POST'</span>:<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">400</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">'ERROR: The request method is not POST'</span>})data = request.get_json()<span style="color:#0000ff">if</span> <span style="color:#a31515">"UserDefinedVariables"</span> <span style="color:#0000ff">not</span> <span style="color:#0000ff">in</span> data:<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">400</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">'ERROR: The request body is error!'</span>})<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">200</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">'Your request parameters is '</span> + <span style="color:#a31515">'"UserDefinedVariables:'</span>+ data[<span style="color:#a31515">'UserDefinedVariables'</span>] + <span style="color:#a31515">'"'</span>})!<span style="color:#a31515">'})
</span></code></span></span>

示例Jmeter脚本


  • 测试计划面板中添加用户定义的变量

    名称:UserDefinedVariables

    值随意输入:我是用户定义的变量

  • 测试计划下添加线程组

  • 线程组下添加HTTP请求

    请求地址:HTTP://127.0.0.1:5000/TestPlan/

    请求方式:POST

    消息体数据:{"UserDefinedVariables":"${UserDefinedVariables}"}

  • HTTP请求下添加HTTP信息头管理器

    右键HTTP请求-添加-配置元件-HTTP信息头管理器,添加信息头,指定请求体类型

    名称:Content-Type

    值:application/json

  • 测试计划下添加查看结果树

运行,查看结果树


                  请求头信息
         Connection: keep-alive
         Content-Type: application/json
         Content-Length: 58
         Host: 127.0.0.1:5000
         User-Agent: Apache-HttpClient/4.5.14 (Java/20.0.2)


                  请求体数据

         {"UserDefinedVariables":"我是用户定义的变量"}

可以清晰地看出,接口请求参数中调用了用户定义的变量的值:我是用户定义的变量

结语


此外,JMeter提供的配置元件中也包含用户定义的变量元件,通过测试计划/线程组/取样器-添加-配置元件-用户定义的变量进行添加。用法与测试计划面板中的用户定义的变量一致,不同之处在于作用域。

测试计划面板中用户定义的变量具有整个测试计划范围的作用,而配置元件中的用户定义的变量则根据其位置确定作用范围。

举例来说,在测试计划下添加的用户定义的变量将在整个测试计划中生效,与测试计划面板中的用户定义的变量作用范围一致。然而,如果用户定义的变量位于取样器中,其作用范围将仅限于该特定取样器内。这种灵活性允许在不同配置元件中使用变量,使其作用范围更具体而有针对性。

建议使用更自由的配置元件中的用户定义的变量 。

独立运行每个线程组


当一个测试计划下有多个线程组时,且这些线程组都处于执行状态时,可能会使用测试计划中的独立运行每个线程组勾选框,以防止各个线程组之间相互影响。

在这种情况下,通过勾选独立运行每个线程组,确保每个线程组在执行时都是相互独立的。这意味着它们将不会共享任何变量或资源,从而避免潜在的相互干扰。

这个选项的使用对于模拟多个并发场景或测试不同业务流程的情况非常重要。它确保每个线程组在测试计划中都能够独立运行,从而更准确地模拟真实世界的使用情境,提高测试的可靠性和准确性。

示例接口代码


<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-python"><span style="color:#2b91af">@api.route(<span style="color:#3388aa">'/TestPlan1/'</span>, methods=[<span style="color:#3388aa">'GET'</span>, <span style="color:#3388aa">'POST'</span>])</span>
<span style="color:#0000ff">def</span> <span style="color:#a31515">testplan1</span>():sleep(<span style="color:#880000">3</span>)	<span style="color:#008000"># 接口设置了休眠三秒,即接口在接收到请求数据三秒后,返回响应数据。</span><span style="color:#0000ff">if</span> request.method != <span style="color:#a31515">'GET'</span>:<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">200</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">' 请求方式错误!'</span>})<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">200</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">'处理完毕'</span>})
</code></span></span>

示例Jmeter脚本


  • 测试计划下添加两个线程组

    名称依次为:线程组1线程组2

  • 两个线程组下皆添加取样器

    名称与对应线程组一致:线程组1线程组2

    请求地址一致:HTTP://127.0.0.1:5000/TestPlan1/

    请求方式一致:GET

  • 测试计划下添加查看结果树

运行,查看结果树


不勾选独立运行每个线程组,运行结果

                  线程组1中取样器结果
         hread Name:线程组1 1-1
         Sample Start: 2024-01-16 11:19:34 CST
         Load time:3004
         Connect Time:1
         Latency:3004
         Size in bytes:231
         Sent bytes:210
         Headers size in bytes:165
         Body size in bytes:66
         Sample Count:1
         Error Count:0
         Data type ("text"|"bin"|""):text
         Response code:200
         Response message:OK

                  线程组2中取样器结果
         hread Name:线程组2 2-1
         Sample Start: 2024-01-16 11:19:34 CST
         Load time:3003
         Connect Time:1
         Latency:3003
         Size in bytes:231
         Sent bytes:210
         Headers size in bytes:165
         Body size in bytes:66
         Sample Count:1
         Error Count:0
         Data type ("text"|"bin"|""):text
         Response code:200
         Response message:OK

Sample Start 是请求发出的时间,可以观察到两个线程组内的 HTTP 请求在同一时刻发出,即 2024-01-16 11:19:34。因为两个线程组是并发、随机执行的。

勾选独立运行每个线程组,运行结果

                  线程组1中取样器结果
         hread Name:线程组1 1-1
         Sample Start: 2024-01-16 11:32:52 CST
         Load time:3004
         Connect Time:1
         Latency:3004
         Size in bytes:231
         Sent bytes:210
         Headers size in bytes:165
         Body size in bytes:66
         Sample Count:1
         Error Count:0
         Data type ("text"|"bin"|""):text
         Response code:200
         Response message:OK

                  线程组1中取样器结果
         hread Name:线程组2 2-1
         Sample Start: 2024-01-16 11:32:55 CST
         Load time:3003
         Connect Time:1
         Latency:3003
         Size in bytes:231
         Sent bytes:210
         Headers size in bytes:165
         Body size in bytes:66
         Sample Count:1
         Error Count:0
         Data type ("text"|"bin"|""):text
         Response code:200
         Response message:OK

Sample Start 是请求发出的时间,可以观察到两个线程组内的 HTTP 请求并非在同一时刻发出。具体而言,HTTP 请求1的请求发出时间是 2024-01-16 11:32:52,而 HTTP 请求2的请求发出时间是 2024-01-16 11:32:55。两者之间的时间差正好为三秒,与接口休眠的三秒相符,这表明两个线程组是顺序执行的。

结语


当勾选了独立运行每个线程组选项时,能够确保测试计划中的相同类型线程组按照顺序执行。在某些特定的测试情况下,这个选项非常有用。相反,若未勾选 独立运行每个线程组时,线程组是并发执行。

但线程组中的多个取样器并不会并发,而是在较短时间内发出全部请求,尤其是在取样器数量较多的情况下。

因此,在模拟高并发时,如果需要多线程组、所有取样器请求并发,建议在测试计划中添加同步定时器(Synchronizing Timer)

同步定时器(Synchronizing Timer)可以确保在并发场景下的同一时间点触发多个线程组中多个取样器的请求,以更真实地模拟多用户同时访问系统的情况。这样的设置有助于提高测试的准确性和可靠性,使测试更符合实际应用场景。

主线程结束后运行tearDown线程组


该选项主要适用于在取样器错误后配置的普通线程,并指定了在错误发生后要执行的动作,如停止测试或立即停止测试。

勾选主线程结束后运行tearDown线程组后,当普通线程由于取样器错误而导致线程结束执行时,系统会继续执行 tearDown 线程。这意味着即使在测试中发生了错误,系统仍会在整个测试结束前执行 tearDown 线程,以确保在测试运行结束时执行一些清理或必要的操作。

需要注意的是,在 JMeter 中,普通线程组的执行优先级大于 tearDown 线程组,因此 tearDown 线程组将会等待所有普通线程组执行完毕后才会执行。

这一设置非常有用,可以确保在测试过程中出现错误时执行必要的清理步骤,同时允许根据具体情况选择在错误发生后是立即停止测试还是允许测试计划中其他线程组或线程继续执行。

示例接口代码


<span style="color:#000000"><span style="background-color:#ffffff"><code class="language-python"><span style="color:#2b91af">@api.route(<span style="color:#3388aa">'/TestPlan1/'</span>, methods=[<span style="color:#3388aa">'GET'</span>, <span style="color:#3388aa">'POST'</span>])</span>
<span style="color:#0000ff">def</span> <span style="color:#a31515">testplan1</span>():sleep(<span style="color:#880000">3</span>)	<span style="color:#008000"># 接口设置了休眠三秒,即接口在接收到请求数据三秒后,返回响应数据。</span><span style="color:#0000ff">if</span> request.method != <span style="color:#a31515">'GET'</span>:<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">200</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">' 请求方式错误!'</span>})<span style="color:#0000ff">return</span> jsonify({<span style="color:#a31515">'code'</span>: <span style="color:#880000">200</span>, <span style="color:#a31515">'data'</span>: <span style="color:#a31515">'处理完毕'</span>})
</code></span></span>

示例Jmeter脚本*


  • 测试计划下添加线程组

    在取样器错误后要执行的动作,勾选停止测试立即停止测试

  • 测试计划下添加tearDown线程组

  • 线程组和tearDown线程组下添加同样的http请求

    名称分别为:线程组请求tearDown线程组请求

    请求地址:HTTP://127.0.0.1:5000/TestPlan1/

    请求方式:GET

  • 线程组请求取样器下添加响应断言

    添加,输入值:1111

  • 测试计划下添加查看结果树

PS:响应断言用于匹配实际响应信息,作为验证接口响应的一种手段。例如,示例接口响应的是 {'code': 200, 'data': '处理完毕'},而添加的断言是 1111,这两者无法匹配,则可以判断该取样器请求存在错误。

运行,查看结果树


不勾选主线程结束后运行tearDown线程组,运行结果

                  响应头信息
         HTTP/1.1 200 OK
         Server: Werkzeug/3.0.1 Python/3.12.1
         Date: Fri, 16 Jan 2024 14:52:02 GMT
         Content-Type: application/json
         Content-Length: 47
         Connection: close

因为不勾选主线程结束后运行tearDown线程组,而且响应体{"code": 200,"data": "处理完毕"}与断言1111无法匹配,响应断言判断该取样器请求发生错误,所以只有线程组被执行完毕后,而 tearDown 线程组并未被执行。

此时,修改响应断言为:{"code":200,

再运行。

即使不勾选主线程结束后运行tearDown线程组,因为响应体{"code": 200,"data": "处理完毕"}与断言{"code":200,匹配,响应断言判断该取样器请求正常,所以线程组被执行完毕后,执行 tearDown 线程组。

勾选主线程结束后运行tearDown线程组,运行结果

响应断言改回为:1111

即使响应断言判断请求发生错误,因为勾选主线程结束后运行tearDown线程组,线程组被执行后,tearDown 线程组紧接被执行。

结语


在确保测试环境的可靠性和稳定性方面,通过勾选主线程结束后运行tearDown线程组以及配置线程组中的取样器错误后执行的动作,可以在主线程结束后执行 tearDown 线程组,从而进行一些关键的清理和还原操作。这一设置在测试流程中发生错误或异常情况时,能够确保系统状态的正确还原,为后续测试提供稳定的基础。

具体而言,主线程结束后执行 tearDown 线程组的步骤可以被理解为测试执行的最后一道关口,确保在测试结束时执行特定的操作。通过配置线程组中的取样器错误后执行的动作,例如停止测试立即停止测试,可以更加灵活地处理测试中的异常情况。

这样的设置在以下方面发挥关键作用:

  • 环境清理: tearDown 线程组可以包含用于清理测试过程中创建的临时数据、资源或连接的操作。这有助于保持测试环境的整洁和可重复性。

  • 资源释放: 如果测试过程中涉及到占用系统资源的操作,例如文件打开、网络连接等,tearDown 线程组可以负责释放这些资源,避免资源泄露和系统负担。

  • 数据还原: 在测试期间可能对数据库或配置文件进行了修改,tearDown 线程组可以负责将这些更改还原,确保下一次测试能够在干净的环境中进行。

  • 错误处理: 配置线程组中的取样器错误后执行的动作可以根据具体需求选择停止测试或立即停止测试。这样的灵活性使得能够在测试遇到问题时及时采取适当的措施,防止进一步的不稳定性。

通过精心配置这些选项,可以确保测试系统的可靠性和稳定性,同时为测试人员提供了在测试结束时进行必要清理和还原操作的机会,以确保下一次测试能够在一致的基础上进行。

函数测试模式


若选择了此选项,并且监听组件(比如“查看结果树”)配置了将结果保存到文件中,JMeter将每次的请求结果记录到文件中。值得注意的是,这种做法相对消耗资源,在负载测试中并不建议勾选。然而,在平时脚本调试的情况下,可以考虑启用该选项。

这样的设置主要适用于需要详细记录每次请求结果的情况,以便后续分析或排查问题。在负载测试中,由于可能生成大量的结果数据,将其全部保存到文件可能导致性能和资源开销的增加,因此需要谨慎使用。

总体而言,这一功能的选择应该根据具体需求和测试目标来决定。在进行性能测试时,特别是在高并发负载下,建议避免勾选该选项以保持测试的高效性。然而,在脚本开发和调试阶段,启用此选项可以帮助更全面地了解每次请求的细节,有助于及时发现和解决问题。

实际应用场景相对有限,因此在本文中不进行详细演示。

添加目录或jar包到classpath


添加文件或 JAR 包功能主要用于调用外部的 JAR 包。当脚本需要引用外部的 Java 文件或 JAR 包时,可以通过将 JAR 包的路径添加到此功能中。这样,在 Beanshell 脚本中就可以通过 import 语句导入外部 JAR 包,并直接调用其中的方法。

在后续的内容中,当涉及到 Beanshell 时,将详细阐述如何使用这一功能。这个特性提供了一种扩展 JMeter 功能的途径,使得用户可以方便地集成和调用外部 Java 类库,从而实现更复杂和灵活的测试脚本。

总结


JMeter的测试计划是测试工作的主要组织结构,它定义了测试的执行流程、配置和执行的参数。在测试计划中,包括了多个关键组件,如线程组、tearDown线程组、HTTP取样器、响应断言等,它们构成了一个完整的测试计划。

当你执行测试时,添加的所有所需组件和元件组成了一个有机整体,即一个完整的测试计划。这个测试计划反映了你对系统性能和功能的验证方式以及测试场景的设计。

本篇主要探讨了测试计划组件面板中各元素的使用,这包括了配置用户定义的变量、定义并发用户行为的线程组、定义进测试后清理的tearDown线程组,这些元素的组合和配置,直接影响着测试的有效性和准确性。

在JMeter中,设计一个强大且高效的测试计划需要综合考虑系统特性、测试目标和性能需求。合理配置这些组件,有效运用各种元素,是确保测试计划成功执行和提取有价值信息的关键步骤。

在下一篇章中,我将引领读者深入探讨线程组的重要性和使用方法。线程组作为JMeter测试计划的核心组件之一,对于模拟并发用户的行为至关重要。

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

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

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

相关文章

P2799 国王的魔镜

题目链接&#xff1a;国王的魔镜 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;判断回文 题意&#xff1a; 分析&#xff1a;先判断是否是2的倍数&#xff0c;再判断回文 AC代码&#xff1a; #include<bits/stdc.h> using namespace std; char a[10000…

diffusion model(十四): prompt-to-prompt 深度剖析

infopaperPrompt-to-Prompt Image Editing with Cross Attention Controlgithubhttps://github.com/google/prompt-to-promptOrg:Google Research个人复现https://github.com/myhz0606/diffusion_learning个人博客主页http://myhz0606.com/article/p2p 1 前言 基于扩散模型&a…

基于python+vue食品安全信息管理系统flask-django-nodejs-php

食品安全信息管理系统设计的目的是为用户提供食品信息、科普专栏、食品检测、检测结果、交流论坛等方面的平台。 与PC端应用程序相比&#xff0c;食品安全信息管理系统的设计主要面向于用户&#xff0c;旨在为管理员和用户提供一个食品安全信息管理系统。用户可以通过APP及时查…

乐得瑞科技PD协议芯片:OTG与充电并行,引领数据交互

在科技日新月异的今天&#xff0c;数据交互的方式对于我们的日常生活和工作都起到了至关重要的作用。但在OTG技术诞生之前&#xff0c;这一过程却显得相当繁琐和耗时。想象一下&#xff0c;你需要将数码相机的照片导入到笔记本电脑中&#xff0c;却不得不频繁地拔出内存卡&…

流畅的 Python 第二版(GPT 重译)(一)

前言 计划是这样的&#xff1a;当有人使用你不理解的特性时&#xff0c;直接开枪打死他们。这比学习新东西要容易得多&#xff0c;不久之后&#xff0c;活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters&#xff0c;传奇的核心开发者&am…

vuex - 21年的笔记 - 后续更新

vuex是什么 Vuex是实现组件全局状态&#xff08;数据&#xff09;管理的一种机制&#xff0c;方便的实现组件之间的数据的共享 使用vuex统一管理状态的好处 能够在vuex中集中管理共享的数据&#xff0c;易于开发和后期维护能够高效地实现组件之间的数据共享&#xff0c;提高…

【Unity】层(Layer)详解

1.什么是Layer? 我们在做游戏开发的时候&#xff0c;尤其是场景比较复杂的时候&#xff0c;我们就需要使用Layer来分类。 比如&#xff1a; 排除不被灯光照亮的Layer 射线检测特定的 Layer 摄像机只能看到某些 Layer 对象之间的碰撞检测 Layer … 2.添加Layer ①在Inspecto…

Matlab 双目相机标定(内置函数)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 相机标定的目的就是要找到从世界坐标转换为图像坐标所用到的投影P矩阵各个系数(即相机的内参与外参)。具体过程如下所述: 1、首先我们需要获取一个已知图形的图像(这里我们使用MATLAB所提供的数据)。 2、找到同…

“找不到msvcr100.dll”或“msvcr100.dll丢失”的多种解决方法分享

当计算机系统中msvcr100.dll文件发生丢失时&#xff0c;导致某些应用程序无法正常运行。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows操作系统的应用程序正常运行至关重要。小编将介绍5种解决msvcr100.dll丢失问题的方法…

命令提示符——CMD基础操作介绍

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

马斯克的 Grok-1 开源,3140亿参数目前最大开源模型,最佳实践教程来啦

近几天开源社区最大的热点&#xff0c;莫过于埃隆马斯克信守承诺的最大开源模型Grok-1。 Grok-1 是一款 314B 大型专家混合 (Mixture of Expert&#xff0c;MoE) Transformer&#xff0c;作为基础模型&#xff0c;基于大量文本数据进行训练&#xff0c;没有针对任何具体任务进…

经济事件对我们投资没影响吗?昂首资本的这两个实例说明白再说

各位投资者现在还不明白经济事件对我们投资的影响吗&#xff1f;下面昂首资本就通过两个实例&#xff0c;各位投资者能否明白经济事件对我们投资的影响。 2015年6月4日&#xff0c;澳大利亚零售量新闻发布。分析师预计销量增幅高达0.4%&#xff0c;但是结果却大吃一惊&#xf…

记录一个vue,ele-ui实现列表指定行数批量选中解决方法

这个问题卡了一天&#xff0c;试了好多方法总算试出来了&#xff1a; <template><div><!-- 功能区卡片 --><el-card class"mb-4"><el-row class"mb-1"><el-col :span"12">请输入想勾选的专利起止条数&am…

.NET开源、免费、强大的交互式绘图库

前言 今天大姚给大家分享一款.NET开源&#xff08;采用MIT许可证&#xff09;、免费、强大的交互式绘图库&#xff0c;该库能够轻松地实现大型数据集的交互式显示。使用几行代码即可快速创建折线图、柱状图、饼图、散点图等不同类型的图表&#xff1a;ScottPlot。 ScottPlot类…

使用cv::ximgproc::FastBilateralSolverFilter优化realsense D455的深度图

1 源码 OpenCV中内置了很多滤波器&#xff0c;这里我们讨论cv::ximgproc其中包含的滤波器。 https://docs.opencv.org/3.4/da/d17/group__ximgproc__filters.html 需要注意的是&#xff0c;默认安装的OpenCV中不包含cv::ximgproc&#xff0c;请从源码重修编译。 在这里贴上我…

机器人路径规划:基于双向A*算法(bidirectional a star)的机器人路径规划(提供Python代码)

一、双向A*算法简介 传统A*算法是一种静态路网中求解最短路径最有效的方法&#xff0c; 它结合了BFS 算法和迪杰斯特拉算法(Dijkstra)的优点。 和迪杰斯特拉算法(Dijkstra)一样&#xff0c; A*算法能够用于 搜索最短路径&#xff1b; 和BFS 算法一样&#xff0c; A*算法可以用…

Word文档密码设置:Python设置、更改及移除Word文档密码

给Word文档设置打开密码是常见的Word文档加密方式。为Word文档设置打开密码后&#xff0c;在打开该文档时&#xff0c;需要输入密码才能预览及编辑&#xff0c;为Word文档中的信息提供了有力的安全保障。如果我们需要对大量的Word文档进行加密、解密处理&#xff0c;Python是一…

1. Java基础入门

1. Java基础入门 1.1 Java介绍(了解) 1.1.1 Java背景 Java是美国 sun 公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。Java 之父&#xff1a;詹姆斯高斯林(James Gosling)。 2009年 sun公司被Oracle公司收购。Java公司图标…

大数据面试题 —— Zookeeper

目录 ZooKeeper 的定义ZooKeeper 的特点ZooKeeper 的应用场景你觉得Zookeeper比较重要的功能ZooKeeper 的选举机制 ***zookeeper主节点故障&#xff0c;如何重新选举&#xff1f;ZooKeeper 的监听原理 ***zookeeper集群的节点数为什么建议奇数台 ***ZooKeeper 的部署方式有哪几…

JAVA 栈和队列总结

除了最底层下面三个是实现类&#xff0c;其他都是接口。 双端队列&#xff08;队头队尾都可以插入和删除元素&#xff09;的方法&#xff1a; 普通队列方法&#xff1a; 常用的是add(),poll(), element() 我们用Deque(双端队列)实现栈 Deque当栈用的时候的方法。 deque.push…