【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法
【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法
- 1 搭建测试对象
- 1.1 禅道下载
- 1.2 禅道安装
- 1.3 运行禅道
- 1.4 接口查看
- 1.5 接口选择
- 2 Jmeter前置操作
- 2.1 创建Jmeter线程组
- 2.2 创建信息头管理器和请求默认值
- 2.3 添加获取token接口
- 2.4 添加监听器
- 3 获取token并存入系统变量
- 4 测试片段
- 5 模块控制器
- 6 if控制器
- 6.1 需求分析
- 6.2 if控制器说明
- 6.3 获取系统变量
- 6.4 添加获取用户列表接口
- 6.5 提取账号和id
- 6.6 if控制器-判断用户存在
- 6.7 if控制器-判断用户不存在
- 7 测试计划效果
写作目的:
1、本文主要是通过搭建禅道为测试对象,然后介绍Jmeter的if控制器、模块控制器、测试片段的使用方法;
2、仅作为简单的介绍,不作为项目的实际参考依据,具体的依据项目测试为准。
1 搭建测试对象
1.1 禅道下载
- 直接进入官网,选择开源版进行下载;
- 根据自身电脑环境选择合适的版本,本文是Windows版本:
- 选择“Windows一键安装”下载即可。
1.2 禅道安装
- 下载后如下:
- 双击运行,选择安装目录,我们安装在如下目录:
- 点击Extract,等待安装:
1.3 运行禅道
-
安装完后,在安装目录下有个exe文件双击打开:
-
双击后会打开如下页面:
-
点击“访问禅道”,或者输入:
http://127.0.0.1/index.php
:
-
点击【开源版】,进入登陆页面:
1.4 接口查看
- 首次登录时,登录信息如下:
# 账号:admin
# 密码:123456
- 首次登录需要修改密码,修改成功后进入系统首页,如下:
- 点击左侧的导航栏中的【后台】,点击【二次开发】:
- 可以看到相关的API接口:
1.5 接口选择
- 我们用以下几个接口来进行说明;
- 获取用户列表;
- 首先是获取登录token,用于后续接口登录权限认证;
- 创建用户接口后获取用户的id;
- 删除用户接口时根据创建的用户id进行删除;
- 公共接口地址为:
http://127.0.0.1/zentao/api.php/v1
接口 | 说明 |
---|---|
token获取 | /tokens |
创建用户 | /users |
删除用户 | /users/:id |
2 Jmeter前置操作
2.1 创建Jmeter线程组
-
以此选择【测试计划】-【添加】-【线程(用户)】-【线程组】:
-
命名为“线程组-登录获取token”:
2.2 创建信息头管理器和请求默认值
- 创建http信息头管理器,以此为【测试计划】-【添加】-【配置元件】-【HTTP信息头管理器】:
- 创建后如下:
- 点击底部的【添加】按钮,添加头信息:
- 创建http请求默认值,以此为:【测试计划】-【添加】-【配置元件】-【HTTP请求默认值】:
- 创建后如下:
- 设置协议、ip、端口等信息:
2.3 添加获取token接口
- 在线程组下新建http请求,以此为:【线程组-登录获取token】-【添加】-【取样器】-【HTTP请求】:
- 添加后如下,并设置接口信息:
2.4 添加监听器
- 在测试计划下添加监听器,以此为:【测试计划】-【监听器】-【查看结果树】:
- 添加运行后如下:
3 获取token并存入系统变量
- 在以上请求【HTTP请求-登录获取token】下创建【json提取器】;
- 以此为:【HTTP请求-登录获取token】-【添加】-【后置处理器】-【JSON提取器】:
- 提取规则如下,目的是提取登录后返回的token值:
- 添加后置处理器,将提取的变量token加入系统变量,以此为:【HTTP请求-登录获取token】-【添加】-【后置处理器】-【BeanShell 后置处理程序】:
- 写入如下内容,将token加入系统变量中:
${__setProperty(token,${token},)}
4 测试片段
-
测试片段的作用类似分组的功能;
-
我们可以把一些业务功能单元进行封装起来;
-
比如这里创建一个名为【用户管理】的测试片段,可以在模块控制器中进行调用;
-
创建测试片段步骤以此为:【线程组-登录获取token】-【添加】-【测试片段】-【测试片段】:
-
创建后如下:
-
注意:创建的测试片段默认是禁止状态,建议使用默认值,只有当测试片段被模块控制器调用时,才会执行,不调用执行;另外如果测试片段被启用,那么它自身下的接口也会执行(即使模块控制器没有调用测试片段)。
5 模块控制器
- 以上创建了测试片段,片段下可以放很多的接口数据;
- 那么如何让测试片段执行,一种是启用测试片段(不建议);另一种就是通过模块控制器进行调用;
- 那模块控制器就是来调用测试片段的,可以指定对应的测试片段进行执行;
- 我们创建一个模块控制器,以此为:【线程组-登录获取token】-【添加】-【逻辑控制器】-【模块控制器】:
- 创建后,要在下方选中执行的测试片段,如下:
6 if控制器
6.1 需求分析
- 前边基本把所有的步骤已经进行完了,接下来就是添加需要执行的接口数据;
- 首先是获取登录后token,传入接口的请求头,这样才有权限;
- 这里获取token其实就是我们之前设置好的系统变量;
- 其次是添加需要执行的接口数据,我们的逻辑是:
① 先判断创建的用户名是不是存在;
② 如果存在,先调用删除用户接口;
③ 然后再调用创建用户接口;
④ 如果用户不存在,直接调用创建用户接口。
6.2 if控制器说明
- i控制器其实就是一个条件判断,和代码中的if语句类似;
- if控制器在这里的作用就是判断用户是否存在。
6.3 获取系统变量
- 在测试片段下添加请求头,主要是获取系统变量token;
- 以此为:【测试片段-用户管理】-【添加】-【配置元件】-【HTTP信息头管理器】:
- 创建后,点击下方的【添加】按钮获取系统变量token:
6.4 添加获取用户列表接口
- 我们在测试片段下先获取用户列表,以此为:【测试片段-用户管理】-【添加】-【取样器】-【HTTP请求】:
- 添加获取用户列表接口数据:
6.5 提取账号和id
- 我们通过获取用户列表接口可以查看系统中有多少个用户;
- 比如运行上边的获取用户列表接口后,可以看出有两个用户:
admin、NoamaNelson
- 用户列表接口的返回值如下:
{"page":1,"total":2,"limit":20,"users":[{"id":2,"dept":0,"account":"NoamaNelson","realname":"\u866b\u65e0\u6daf","role":"","pinyin":"","email":""},{"id":1,"dept":0,"account":"admin","realname":"admin","role":"","pinyin":"admin a","email":""}]
}
- 添加后置处理器提取账号和id,提取的账号主要是用于判断这个账号是否存在;提取id是如果账号存在,后续通过id来删除用户;
- 以此为:【HTTP请求-获取用户列表】-【添加】-【后置处理器】-【JSON提取器】:
- 提取规则如下:
$.users[?(@.account=="NoamaNelson")].account
- 同样的方法添加提取器,提取id:
$.users[?(@.account=="NoamaNelson")].id
6.6 if控制器-判断用户存在
- 添加if控制器,假如用户存在,以此为:【测试片段-用户管理】-【添加】-【逻辑控制器】-【IF控制器】:
- 控制器中添加如下内容:
${__jexl3("${account}" == "NoamaNelson")}
-
如果用户存在,我们先通过id删除用户,以此添加删除用户的接口:【IF 控制器-用户存在】-【取样器】-【HTTP请求】:
-
添加删除接口数据:
-
删除用户后再添加用户:
-
添加用户数据为:
{"account":"NoamaNelson","password":"123456","realname":"虫无涯"
}
6.7 if控制器-判断用户不存在
-
添加if控制器,假如用户不存在,以此为:【测试片段-用户管理】-【添加】-【逻辑控制器】-【IF控制器】;
-
注意这里的用户不存在,判断依据就是提取的用户账号是error,这个error描述是我们在提取用户账号的时候自己写的,比如:
-
那么如果用户用户存在,就直接创建用户就行了:
7 测试计划效果
- 通过以上我们就可以放心的去添加删除用户了;
- 使用if控制器在这里的好处是:如果用户存在我们先删除后添加,避免重复添加或报错的;
- 我们最后的整个测试计划如下:
- 或者我们可以设计如下的效果:
- 完整的脚本如下:
<?xml version="1.0" encoding="UTF-8"?>
<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.6.3"><hashTree><TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="测试计划"><elementProp name="TestPlan.user_defined_variables" elementType="Arguments" guiclass="ArgumentsPanel" testclass="Arguments" testname="用户定义的变量"><collectionProp name="Arguments.arguments"/></elementProp></TestPlan><hashTree><HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息头管理器"><collectionProp name="HeaderManager.headers"><elementProp name="" elementType="Header"><stringProp name="Header.name">content-type</stringProp><stringProp name="Header.value">application/json</stringProp></elementProp></collectionProp></HeaderManager><hashTree/><ConfigTestElement guiclass="HttpDefaultsGui" testclass="ConfigTestElement" testname="HTTP请求默认值"><stringProp name="HTTPSampler.domain">127.0.0.1</stringProp><stringProp name="HTTPSampler.protocol">http</stringProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量"><collectionProp name="Arguments.arguments"/></elementProp><stringProp name="HTTPSampler.implementation">HttpClient4</stringProp></ConfigTestElement><hashTree/><ResultCollector guiclass="ViewResultsFullVisualizer" testclass="ResultCollector" testname="查看结果树"><boolProp name="ResultCollector.error_logging">false</boolProp><objProp><name>saveConfig</name><value class="SampleSaveConfiguration"><time>true</time><latency>true</latency><timestamp>true</timestamp><success>true</success><label>true</label><code>true</code><message>true</message><threadName>true</threadName><dataType>true</dataType><encoding>false</encoding><assertions>true</assertions><subresults>true</subresults><responseData>false</responseData><samplerData>false</samplerData><xml>false</xml><fieldNames>true</fieldNames><responseHeaders>false</responseHeaders><requestHeaders>false</requestHeaders><responseDataOnError>false</responseDataOnError><saveAssertionResultsFailureMessage>true</saveAssertionResultsFailureMessage><assertionsResultsToSave>0</assertionsResultsToSave><bytes>true</bytes><sentBytes>true</sentBytes><url>true</url><threadCounts>true</threadCounts><idleTime>true</idleTime><connectTime>true</connectTime></value></objProp><stringProp name="filename"></stringProp></ResultCollector><hashTree/><SetupThreadGroup guiclass="SetupThreadGroupGui" testclass="SetupThreadGroup" testname="setUp 线程组-登录获取token"><intProp name="ThreadGroup.num_threads">1</intProp><intProp name="ThreadGroup.ramp_time">1</intProp><boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp><stringProp name="ThreadGroup.on_sample_error">continue</stringProp><elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器"><stringProp name="LoopController.loops">1</stringProp><boolProp name="LoopController.continue_forever">false</boolProp></elementProp></SetupThreadGroup><hashTree><HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求-登录获取token"><stringProp name="HTTPSampler.path">/zentao/api.php/v1/tokens</stringProp><boolProp name="HTTPSampler.follow_redirects">true</boolProp><stringProp name="HTTPSampler.method">POST</stringProp><boolProp name="HTTPSampler.use_keepalive">true</boolProp><boolProp name="HTTPSampler.postBodyRaw">true</boolProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments"><collectionProp name="Arguments.arguments"><elementProp name="" elementType="HTTPArgument"><boolProp name="HTTPArgument.always_encode">false</boolProp><stringProp name="Argument.value">{"account": "admin", "password": "Zb918110"}</stringProp><stringProp name="Argument.metadata">=</stringProp></elementProp></collectionProp></elementProp></HTTPSamplerProxy><hashTree><JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON提取器-提取token"><stringProp name="JSONPostProcessor.referenceNames">token</stringProp><stringProp name="JSONPostProcessor.jsonPathExprs">$.token</stringProp><stringProp name="JSONPostProcessor.match_numbers">1</stringProp><stringProp name="JSONPostProcessor.defaultValues">error</stringProp></JSONPostProcessor><hashTree/><BeanShellPostProcessor guiclass="TestBeanGUI" testclass="BeanShellPostProcessor" testname="BeanShell 后置处理程序"><stringProp name="filename"></stringProp><stringProp name="parameters"></stringProp><boolProp name="resetInterpreter">false</boolProp><stringProp name="script">${__setProperty(token,${token},)}</stringProp></BeanShellPostProcessor><hashTree/></hashTree></hashTree><ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="线程组-用户管理"><intProp name="ThreadGroup.num_threads">1</intProp><intProp name="ThreadGroup.ramp_time">1</intProp><boolProp name="ThreadGroup.same_user_on_next_iteration">true</boolProp><stringProp name="ThreadGroup.on_sample_error">continue</stringProp><elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="循环控制器"><stringProp name="LoopController.loops">1</stringProp><boolProp name="LoopController.continue_forever">false</boolProp></elementProp></ThreadGroup><hashTree><HeaderManager guiclass="HeaderPanel" testclass="HeaderManager" testname="HTTP信息头管理器"><collectionProp name="HeaderManager.headers"><elementProp name="" elementType="Header"><stringProp name="Header.name">Token</stringProp><stringProp name="Header.value">${__property(token,,)}</stringProp></elementProp></collectionProp></HeaderManager><hashTree/><ModuleController guiclass="ModuleControllerGui" testclass="ModuleController" testname="模块控制器-用户管理"><collectionProp name="ModuleController.node_path"><stringProp name="869052411">测试计划</stringProp><stringProp name="869052411">测试计划</stringProp><stringProp name="-578308503">线程组-用户管理</stringProp><stringProp name="2078815177">测试片段-用户管理</stringProp></collectionProp></ModuleController><hashTree/><TestFragmentController guiclass="TestFragmentControllerGui" testclass="TestFragmentController" testname="测试片段-用户管理" enabled="false"/><hashTree><HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求-获取用户列表"><stringProp name="HTTPSampler.path">/zentao/api.php/v1/users</stringProp><boolProp name="HTTPSampler.follow_redirects">true</boolProp><stringProp name="HTTPSampler.method">GET</stringProp><boolProp name="HTTPSampler.use_keepalive">true</boolProp><boolProp name="HTTPSampler.postBodyRaw">false</boolProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量"><collectionProp name="Arguments.arguments"/></elementProp></HTTPSamplerProxy><hashTree><JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON提取器-提取账号"><stringProp name="JSONPostProcessor.referenceNames">account</stringProp><stringProp name="JSONPostProcessor.jsonPathExprs">$.users[?(@.account=="NoamaNelson")].account</stringProp><stringProp name="JSONPostProcessor.match_numbers">1</stringProp><stringProp name="JSONPostProcessor.defaultValues">error</stringProp></JSONPostProcessor><hashTree/><JSONPostProcessor guiclass="JSONPostProcessorGui" testclass="JSONPostProcessor" testname="JSON提取器-提取id"><stringProp name="JSONPostProcessor.referenceNames">id</stringProp><stringProp name="JSONPostProcessor.jsonPathExprs">$.users[?(@.account=="NoamaNelson")].id</stringProp><stringProp name="JSONPostProcessor.match_numbers">1</stringProp><stringProp name="JSONPostProcessor.defaultValues">error</stringProp></JSONPostProcessor><hashTree/></hashTree><IfController guiclass="IfControllerPanel" testclass="IfController" testname="IF 控制器-用户存在"><stringProp name="IfController.condition">${__jexl3("${account}" == "NoamaNelson")}</stringProp><boolProp name="IfController.evaluateAll">false</boolProp><boolProp name="IfController.useExpression">true</boolProp></IfController><hashTree><HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求-通过id删除用户"><stringProp name="HTTPSampler.path">/zentao/api.php/v1/users/:${id}</stringProp><boolProp name="HTTPSampler.follow_redirects">true</boolProp><stringProp name="HTTPSampler.method">DELETE</stringProp><boolProp name="HTTPSampler.use_keepalive">true</boolProp><boolProp name="HTTPSampler.postBodyRaw">false</boolProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments" guiclass="HTTPArgumentsPanel" testclass="Arguments" testname="用户定义的变量"><collectionProp name="Arguments.arguments"/></elementProp></HTTPSamplerProxy><hashTree/><HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求-创建用户"><stringProp name="HTTPSampler.path">/zentao/api.php/v1/users</stringProp><boolProp name="HTTPSampler.follow_redirects">true</boolProp><stringProp name="HTTPSampler.method">POST</stringProp><boolProp name="HTTPSampler.use_keepalive">true</boolProp><boolProp name="HTTPSampler.postBodyRaw">true</boolProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments"><collectionProp name="Arguments.arguments"><elementProp name="" elementType="HTTPArgument"><boolProp name="HTTPArgument.always_encode">false</boolProp><stringProp name="Argument.value">{"account": "NoamaNelson", "password": "123456", "realname": "虫无涯"}</stringProp><stringProp name="Argument.metadata">=</stringProp></elementProp></collectionProp></elementProp></HTTPSamplerProxy><hashTree/></hashTree><IfController guiclass="IfControllerPanel" testclass="IfController" testname="IF 控制器-用户不存在"><stringProp name="IfController.condition">${__jexl3("${account}" == "error")}</stringProp><boolProp name="IfController.evaluateAll">false</boolProp><boolProp name="IfController.useExpression">true</boolProp></IfController><hashTree><HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="HTTP请求-创建用户"><stringProp name="HTTPSampler.path">/zentao/api.php/v1/users</stringProp><boolProp name="HTTPSampler.follow_redirects">true</boolProp><stringProp name="HTTPSampler.method">POST</stringProp><boolProp name="HTTPSampler.use_keepalive">true</boolProp><boolProp name="HTTPSampler.postBodyRaw">true</boolProp><elementProp name="HTTPsampler.Arguments" elementType="Arguments"><collectionProp name="Arguments.arguments"><elementProp name="" elementType="HTTPArgument"><boolProp name="HTTPArgument.always_encode">false</boolProp><stringProp name="Argument.value">{"account": "NoamaNelson", "password": "123456", "realname": "虫无涯"}</stringProp><stringProp name="Argument.metadata">=</stringProp></elementProp></collectionProp></elementProp></HTTPSamplerProxy><hashTree/></hashTree></hashTree></hashTree></hashTree></hashTree>
</jmeterTestPlan>
相关文章:
【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法
【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法 1 搭建测试对象1.1 禅道下载1.2 禅道安装1.3 运行禅道1.4 接口查看1.5 接口选择 2 Jmeter前置操作2.1 创建Jmeter线程组2.2 创建信息头管理器和请求默认值2.3 添加获取token接口2.4 添加监听器 …...
采用qL-MPC技术进行小型固定翼无人机的路径跟随控制
来自论文"Predictive Path-Following Control for Fixed-Wing UAVs Using the qLMPC Framework in the Presence of Wind Disturbances" 控制架构 采用的是 ULTRA-Extra无人机,相关参数如下: 这里用于guidance law的无人机运动学模型为&#…...
比特币是否会取代美元(以及其他主权货币)
上图是 Olivier Blanchard 宏观经济学第八版的英文版内容。这里用中文解释。 1. 背景与现状: 比特币的规模与美元相比仍然很小: 截至 2018 年 12 月,比特币的总流通量为 1730 万枚,每枚价值 $3,900,总市值约 $670 亿…...
safe area helper插件
概述 显示不同机型的必能显示的区域 实现步骤 引入safearea,引入其中的safearea的csharp 为cancas加入gameobject gameobject中加入safearea脚本 将UI作为这个gameobject的子物体,就可以完成显示...
融云分享基于 Rust 的鸿蒙 SDK 开发实践
12 月 5 日,以“同心聚力,共建共享鸿蒙新生态”为主题的“鸿蒙生态伙伴 SDK 开发者论坛”在京举行。 融云凭借对鸿蒙生态的率先适配和创新贡献,荣获华为鸿蒙生态“HarmonyOS NEXT SDK 星河奖”。 本次论坛邀请了多位行业领导者参与ÿ…...
golang中的值传递与引用传递,如何理解结构体的方法?
先从一个例子说起 type Counter struct {count int }func (c Counter) Inc() {c.count }func test1() {c : Counter{}do : func() {for i : 0; i < 10; i {c.count}fmt.Println("done")}go do()go do()time.Sleep(3 * time.Second)fmt.Println(c.count) }func te…...
TON游戏现状一览:区块链与Telegram的完美融合
TON(The Open Network)作为一款基于区块链的开放平台,因其超高的交易处理速度和与Telegram的紧密集成,成为游戏开发者和用户的新兴乐土。TON不仅仅是一个去中心化的网络,它还通过其核心加密货币——Toncoin,…...
《变分法·吴迪光1987年》复习汇总
目录 第一章 变分法的概念1 泛函和泛函的极值例1 捷线(最速降线)问题例2 等周问题例3 极小曲面问题极值必要条件 2 基本引理(考反证法)基本引理1基本引理2 第二章 固定边界的变分问题 ♠ \spadesuit ♠ 欧拉方程(一&am…...
使用IP自签名SSL证书
最近需要创建WebSocket服务器并使用SSL证书,由于是内网测试,所以需要使用指定IP的自签SSL证书。 其实笔者前面博文 使用nexus3作为Docker镜像仓库 解决nexus3登录x509: certificate has expired or is not yet valid 中有创建过相应的证书,这…...
如何持续优化呼叫中心大模型呼出机器人的性能?
如何持续优化呼叫中心大模型呼出机器人的性能? 原作者:开源呼叫中心FreeIPCC,其Github:https://github.com/lihaiya/freeipcc 持续优化呼叫中心大模型呼出机器人的性能是一个复杂而持续的过程,涉及多个层面的策略和措…...
3D,点云平滑法线估计
需要平滑的情况 1、用激光扫描仪等设备扫描物体(尤其是比较小的物体)时,往往会有测量误差。这些误差所造成的不规则数据如果直接拿来曲面重建的话,会使得重建的曲面不光滑或者有漏洞,而且这种不规则数据很难用统计分析等滤波方法消除; 2、后处理过程中,对同一个物体从…...
windows下pyenv与宝塔python冲突解决
windows下安装pyenv后与宝塔python环境冲突 1、将C:\Program Files\python\Scripts中的pip3.exe改名(pip3-.exe) 2、将C:\用户\{用户名}\.pyenv\pyenv-win\shims中的pip、pip.bat、python、python.bat改名(pip-、pip-.bat、python-、python-.bat),然后使用pip3和p…...
C# 探险之旅:第二十五节 - 类型class之字段Fields大冒险
嘿,探险家们!欢迎再次搭乘C#的魔法列车,今天我们要深入探索class里的宝藏——字段(Fields)!想象一下,字段就像是类里的秘密小房间,里面藏着对象的小秘密和宝藏。我们不仅要看看这些小…...
如何更新项目中的 npm 或 Yarn 依赖包至最新版本
要升级 package.json 文件中列出的包,你可以使用 npm(Node Package Manager)或 yarn。以下是两种工具的命令来更新你的依赖项: 使用 npm 更新所有包到最新版本 npm update如果你想将所有依赖项更新到其各自最新的大版本…...
【Linux系列】使用 watch 命令实时查看容器状态
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
电脑技巧:Everything 1.5 版本重大更新支持拼音搜索+全文搜索
目录 一、软件介绍 二、主要更新亮点 更快的搜索速度和拼音搜索 全文搜索功能 智能推荐功能 增强的过滤选项 改进的用户界面 更好的多语言支持 增强的安全性和隐私保护 三、总结 Everything 作为一款备受推崇的文件搜索工具,以其卓越的性能和简洁的用户界…...
MySQL八股-全局锁,表级锁,表锁,元数据锁,意向锁,行级锁,行锁,间隙锁,临键
文章目录 全局锁表级锁表锁(表级锁)元数据锁(MDL,Meta Data Lock,表级锁)元数据锁演示元数据锁兼容的情况元数据锁互相阻塞的情况 意向锁(Intention lock,表级锁)意向锁分类意向锁演示:意向共享锁(**IS**)与…...
电子应用设计方案-53:智能AI打印机系统方案设计
智能 AI 打印机系统方案设计 一、引言 随着人工智能技术的不断发展,将其应用于打印机系统可以显著提升打印效率、优化打印质量,并提供更智能化的用户体验。本方案旨在设计一款融合 AI 技术的智能打印机系统。 二、系统概述 1. 系统目标 - 实现高精度、…...
docker—私有仓库搭建
docker—私有仓库搭建 HTTP 部署 docker run -d \-p 5000:5000 \--restartalways \--name registry \-v /opt/data/registry:/var/lib/registry \registry:2使用官方的 registry 镜像来启动私有仓库。默认情况下,仓库会被创建在容器的 /var/lib/registry 目录…...
马斯克Neuralink:未来的人机交互先锋,将会挑战传统通讯方式
Neuralink,由埃隆马斯克于2016年创立,专注于研发脑机接口技术。该技术通过植入大脑的芯片,实现人类与机器的“无缝连接”。2024年,Neuralink取得了突破性进展,成功在人体中植入了脑芯片。首位植入者Noland Arbaugh通过…...
[Maven]IDEA父工程创建子工程后父工程不可运行
IDEA在使用maven构建项目时,如果你在当前工程下创建一个子工程,那么原有的工程(变为父工程的工程)原有的代码通常会变得不可运行。 这是因为,使用maven创建父子工程关系后,IDEA会自动变更项目的模块相关配置。 比如这是我maven工程…...
Linux DNS 协议概述
1. DNS 概述 互联网中,一台计算机与其他计算机通信时,通过 IP 地址唯一的标志自己。此时的 IP 地址就类似于我们日常生活中的电话号码。但是,这种纯数字的标识是比较难记忆的,而且数量也比较庞大。例如,每个 IPv4 地址…...
Web前端技术宝典:期末冲刺指南
本文将为大家整理一份 Web 前端期末复习资料,内容涵盖 HTML、CSS、JavaScript 和常用的前端框架等方面的知识,帮助大家高效复习。 Web前端技术宝典:期末冲刺指南 1. HTML基础2. CSS基础3. JavaScript基础4. 前端框架5. 常见考试题型结语 1. …...
JVM 双亲委派模型以及垃圾回收机制
目录 1. JVM 内存区域划分 2. JVM 中类加载的过程 1) 类加载的基本流程 2) 双亲委派模型 3. JVM 中垃圾回收机制 1) 找到垃圾 a) 引用计数 b) 可达性分析 2) 释放垃圾 1. JVM 内存区域划分 一个运行起来的 Java 进程,其实就是一个 JVM 虚拟机。 而进程是…...
Linux编译Kernel时的文件zImage、文件dtb(dtbs)、核心模块分别是什么东西?
zImage文件的介绍 在编译Linux内核时,zImage 是一种内核映像文件,它是内核的压缩版本,通常用于引导嵌入式设备或其他资源有限的环境。 zImage 的具体含义 zImage 是 “Compressed Kernel Image” 的缩写。它是通过压缩原始的内核映像&…...
《计算机视觉证书:开启职业发展新航道》
一、引言 在当今科技飞速发展的时代,计算机视觉技术正以惊人的速度改变着我们的生活和工作方式。从智能手机的人脸识别解锁到自动驾驶汽车的环境感知,计算机视觉技术的应用无处不在。而计算机视觉证书作为这一领域的专业认证,其作用愈发凸显…...
4.Python 数字类型
Python 数字类型总结 文章目录 Python 数字类型总结1. 数字类型概述特点 2. 数字类型的创建与赋值3. 数字类型转换4. 数学运算与函数math 模块cmath 模块 5. 随机数生成6. 三角函数7. 数学常量 总结 Python 提供了多种数字类型来存储和操作数值数据。这些类型包括整数、浮点数、…...
火焰传感器与C++编程:精准检测火灾的技术实现
火灾是我们日常生活中一个不可忽视的安全隐患,而火灾报警系统的实现可以大大提高我们的安全保障。通过嵌入式技术和传感器,我们能够在第一时间识别火灾隐患并发出警报。火焰传感器作为一种专门用于火灾监测的传感器,能高效地通过红外线&#…...
纯前端实现一个精致的中英文挖空提示功能
前言 这两天给我的学习卡盒小程序新增了一个提示功能,在卡片正面的时候,点击左下角的小灯泡,就会弹出背面内容的提示,这个提示是挖了空的,这种方式可以帮助我们循序渐进的回忆内容,而不是直接看答案。 实现…...
秘塔搜索AI多线程批量生成TXT原创文章软件
秘塔AI搜索是秘塔科技旗下的搜索产品,其产品是简单、无广告、直接的搜索答案。 秘塔AI搜索写出来的文章无AI味及无AI痕迹,在如今AI文章泛滥时代,搜索引擎喜欢抓取收录这样无AI味原创文章。 秘塔搜索AI多线程批量生成TXT原创文章软件介绍&am…...
鸿蒙生态的崛起:开发实践、认证路径与激励策略
目录 前言 鸿蒙生态能力和行业解决方案 1、鸿蒙创新能力 2、鸿蒙行业解决方案 中软鸿蒙生态业务布局 1、深度参与鸿蒙生态建设 2、提供一站式鸿蒙生态服务 (1)服务目录 (2)改造过程的关键点 (3)鸿…...
python调用matlab函数(内置 + 自定义) —— 安装matlab.engine
文章目录 一、简介二、安装matlab.engine2.1、基于 CMD 安装2.2、基于 MATLAB 安装(不建议) 三、python调用matlab函数(内置 自定义) 一、简介 matlab.engine(MATLAB Engine API for Python):…...
【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)
POI是Point of Interest的简称,意为“兴趣点”,是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点,例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现,并附带详细属性信息&#x…...
【设计模式】如何用C++实现观察者模式【发布订阅机制】
【设计模式】如何用C实现观察者模式【发布订阅机制】 一、问题背景 代码质量影响生活质量。最近工作中频繁接触各种设计模式,深刻体会到优秀的设计模式不仅能显著降低后续维护的压力,还能提升开发效率。观察者模式作为一种降低耦合度、提高扩展性的利器…...
Qt编写RK3588视频播放器/支持RKMPP硬解/支持各种视音频文件和视频流/海康大华视频监控
一、前言 用ffmpeg做硬解码开发,参考自带的示例hw_decode.c即可,里面提供了通用的dxva2/d3d11va/vaapi这种系统层面封装的硬解码,也就是无需区分用的何种显卡,操作系统自动调度,基本上满足了各种场景的需要࿰…...
深入了解IPv6——光猫相关设定:DNS来源、DHCPv6服务、前缀来源等
光猫IPv6设置后的效果对比图: 修改前: 修改后: 一、DNS来源 1. 网络连接 来源: 从上游网络(如运营商)获取 IPv6 DNS 信息,通过 PPPoE 或 DHCPv6 下发。 特点: DNS 服务器地址直…...
Deepmotion技术浅析(五):运动追踪
运动追踪是 DeepMotion 动作捕捉和 3D 重建流程中的核心模块之一。该模块的主要任务是在视频序列中跟踪人体的运动轨迹,捕捉人体各部分随时间的变化,并生成连续的 3D 运动数据。DeepMotion 的运动追踪技术结合了计算机视觉、深度学习和物理模拟等方法&am…...
【html网页页面012】html+css制作品牌主题宏宝莱网页含视频、留言表单(7页面附效果及源码)
品牌主题宏宝莱网页制作 🥤1、写在前面🍧2、涉及知识🌳3、网页效果完整效果(7页):代码目录结构:page1、首页page2、衍生品page3、包装设计page4、视频介绍page5、留言板page6、联系我们page7、详情页(三层页…...
Java的栈与队列以及代码实现
Java栈和队列 栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组实现)用队列实现栈用栈来实现队列总结 栈的概念(Stack) 栈是常见的线性数据结构&…...
华为HarmonyOS NEXT 原生应用开发:鸿蒙中组件的组件状态管理、组件通信 组件状态管理小案例(好友录)!
文章目录 组件状态管理一、State装饰器1. State装饰器的特点2. State装饰器的使用 二、Prop装饰器(父子单向通信)1. Prop装饰器的特点2. Prop装饰器的使用示例 三、Link装饰器(父子双向通信)1. Link装饰器的特点3. Link使用示例 四…...
LeetCode:150. 逆波兰表达式求值
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表…...
LLM模型的generate和chat函数区别
在 Hugging Face 的 transformers 库中,GPT(Generative Pre-trained Transformer)类的模型有两个常用的生成文本的方法:generate 和 chat。这两个方法在使用上有一些区别。通常公司发布的 LLM 模型会有一个基础版本,还…...
Vulhub:Fastjson[漏洞复现]
1.2.24-rce(CVE-2017-18349-Fastjson反序列化) 对于 Fastjson 来说,该漏洞的主要问题在于其1.2.24版本中autotype特性允许任意类的反序列化,因此攻击者通过type指定自定义类并实例化,在特定条件下调用这些类的公共方法。如果一个不受信任的 J…...
C++学习日记---第19天
笔记复习 1.继承 在C中,我们通过函数来实现代码的复用,防止重复造轮子,但是使用函数也有一个缺点1,就是当函数被定义完成之后,它的功能也就确定了,无法被修改,这时候我们引入继承。 C中的继承…...
opencv-python的简单练习
题目1.读取一张彩色图像并将其转换为灰度图。 import cv2 # 读取图片文件 img cv2.imread(./1.png)# 将原图灰度化 img_gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)# 输出图片 cv2.imshow(img,img) cv2.imshow(img_g,img_gray) # 进行阻塞 cv2.waitKey(0) 题目2:…...
生活小妙招之UE CaptureRT改
需求,四个不同的相机拍摄结果同屏分屏显示 一般的想法是四个Capture拍四张RT,然后最后在面片/UI上组合。这样的开销是创建4张RT,材质中采样4次RT。 以更省的角度,想要对以上流程做优化,4个相机拍摄是必须的ÿ…...
源码编译jdk11 超详细教程 openjdk11
关于源代码 当前的openJDK的源代码已经被发布到了github上了,所以我们可以直接从github上下载到。 OpenJDK11u源码托管地址:https://github.com/openjdk/jdk11u 带后缀U的地址,或者发行的jdk包,表示当前版本下的持续跟新版。而…...
lightRAG 论文阅读笔记
论文原文 https://arxiv.org/pdf/2410.05779v1 这里我先说一下自己的感受,这篇论文整体看下来,没有太多惊艳的地方。核心就是利用知识图谱,通过模型对文档抽取实体和关系。 然后基于此来构建查询。核心问题还是在解决知识之间的连接问题。 论…...
计算机网络-数据链路层
以太⽹的帧格式 源地址和⽬的地址是指⽹卡的硬件地址(也叫MAC地址), ⻓度是48位,是在⽹卡出⼚时固化的; • IP地址描述的是路途总体的 起点 和 终点; • MAC地址描述的是路途上的每⼀个区间的起点和终点;、 举个例子: 帧协议类型字段有三种值,分别对应IP、ARP、RARP...
ES6 混合 ES5学习记录
基础 数组 let arr [数据1,数据2,...数组n] 使用数组 数组名[索引] 数组长度 arr.length 操作数组 arr.push() 尾部添加一个,返回新长度 arr.unshift() 头部添加一个,返回新长度 arr.pop() 删除最后一个,并返回该元素的值 shift 删除第一个单元…...