浅谈JMeter体系结构

news2024/11/12 3:31:20

JMeter体系结构详解

JMeter是一款功能强大的开源性能测试工具,广泛应用于Web应用、数据库、FTP服务器等多种场景下的负载和压力测试。其灵活的体系结构设计使得测试计划的创建、执行与结果分析变得高效而直观。本文将深入解析JMeter的三维空间体系结构,帮助您更好地理解和运用这一工具。

JMeter体系结构概览

JMeter的体系结构可以形象地抽象为一个三维空间模型,这个模型由X、Y、Z三个轴向的空间构成,每个空间代表了JMeter不同功能模块的组织方式,JMeter结构图如下:
在这里插入图片描述
具体介绍如下:

X 空间(负载模拟过程)

X空间细分为5个维度(X1至X5),代表了JMeter中进行负载模拟的全过程。这五个维度涵盖了从准备测试计划、配置线程组、定义取样器、设置断言到添加定时器和控制器等所有构建测试场景所需的组件。简而言之,X轴专注于模拟真实用户的行为模式,确保测试能够准确反映系统在高负载条件下的表现。
● X1: 取样器(Sampler),模拟用户的具体请求,如HTTP请求、数据库查询等。
● X2: 配置元件以及处理器(Config Element and Processors),提供常用功能配置元件方便用户进行操作以及对上下文数据进行预处理
● X3: 控制器(Controller),组织和控制取样器的执行逻辑,如逻辑控制器、循环控制器等。
● X4: 定时器(Timer),模拟用户操作之间的时间间隔,增加测试的真实性。
● X5: 测试计划与线程组配置,定义并发用户数、循环次数等基础参数。

Y 空间(负载模拟与结果验证)

Y空间分为两个维度,Y1和Y2,分别对应负载模拟与结果验证两个关键环节。
● Y1 (负载模拟): 负责生成并管理用户请求,确保模拟的用户行为符合测试需求。这一部分直接关联X空间中的组件,特别是取样器和控制器。
● Y2 (结果验证): 负责验证测试执行后的结果是否满足预期,包括响应时间、状态码、返回数据的校验等。这一维度通过断言来实现,确保测试的有效性和准确性。

Z 空间(结果收集与分析)

Z空间虽然只包含一个维度,但它扮演着极其重要的角色——负载测试结果的收集与分析。
● 监听器(Listener): Z空间的核心组成部分,负责收集测试运行期间的所有数据,包括但不限于响应时间分布、吞吐量、错误率等。监听器不仅可以在测试计划的线程组内部使用,也可以放置在线程组之外,以全局视角监控整个测试过程。通过监听器,测试人员可以直观地评估系统性能并定位问题。

X1取样器(Sampler)详细介绍

取样器(Sampler)是JMeter的核心元件,它负责向服务器发送请求,模拟用户的各种操作,如HTTP请求、数据库查询、FTP上传下载等。取样器是任何性能测试计划的基础,没有取样器,JMeter就无法执行任何请求或收集性能数据。

核心概念

● 请求发送: 每个取样器都代表了一种特定类型的请求,用户可以通过配置取样器来指定请求的目标地址、请求方法、参数等信息。
● 结果收集: 取样器发送请求后,会收集服务器响应的信息,包括响应时间、状态码和响应数据等,这些信息对于评估系统性能至关重要。
● 可扩展性: JMeter支持多种类型的取样器,并且可以通过插件机制扩展以支持更多协议,使得测试范围广泛。

常见取样器类型

  1. HTTP Request Sampler: 最常用的取样器,用于发送HTTP/HTTPS请求,适用于Web应用性能测试。
  2. JDBC Request Sampler: 用于执行SQL查询,测试数据库的性能和响应时间。
  3. FTP Request Sampler: 用于模拟FTP文件上传和下载操作。
  4. SMTP Sampler: 用于测试邮件服务器,发送电子邮件请求。
  5. JMS Sampler: 用于测试Java消息服务(JMS)的性能。
  6. TCP Sampler: 提供了一个通用的TCP客户端,可以用来测试任何基于TCP协议的服务。

X2前置处理器(Pre Processors)详细介绍

在JMeter中,前置处理器(Pre Processors)属于X轴的第二维度。前置处理器是一种特殊类型的元件,它们在每个取样器执行之前运行,主要用于修改或准备请求数据、设置变量或执行某些计算任务,以便优化或增强即将发起的请求。下面是关于JMeter前置处理器的详细介绍:

目的与作用

前置处理器的主要目的是在实际发送请求给服务器之前,对测试环境或者请求本身进行必要的设置或调整。它使得测试脚本更加动态和灵活,能够适应不同的测试场景和需求。前置处理器可以:
● 生成或修改请求参数:例如,动态生成时间戳、随机数或序列号作为请求的一部分。
● 设置变量和属性:初始化或修改变量值,为后续的取样器提供必要的数据输入。
● 数据处理:对从外部数据源获取的数据进行格式化、过滤或编码。
● 条件执行:基于特定条件决定是否执行后续的取样器或改变其执行路径。
● 数据库操作:在发送请求前从数据库获取数据,用于参数化请求。

常见前置处理器类型

  1. 用户参数(User Parameters):为每个虚拟用户线程分配一组独立的变量值,常用于参数化测试,使得每个线程的请求具有唯一性。
  2. BeanShell PreProcessor:使用BeanShell脚本语言执行复杂的逻辑处理,如数据转换、条件判断等。

X2配置元件(Config Element)详细介绍

在JMeter中,配置元件(Config Element)是一个关键组件类别,用于设定测试计划中的全局或局部配置,以控制或影响其他元件的行为,特别是在数据处理、请求参数化、结果处理等方面。配置元件在执行顺序上位于取样器之前,但后于前置处理器执行。

常见配置元件类型

  1. CSV Data Set Config:此元件允许你从CSV文件中读取数据,为测试提供参数化的输入值。它可以为每个线程(虚拟用户)分配一组不同的数据行,从而实现数据驱动的测试。非常适合用于批量测试不同用户或场景。
  2. HTTP Request Defaults:通过这个元件,你可以为测试计划中所有的HTTP请求设置默认值,比如默认的服务器名称、端口、协议、路径等。这大大简化了测试脚本的维护,因为不需要在每个HTTP请求取样器中重复设置这些通用信息。
  3. HTTP Header Manager:用于定义HTTP请求头信息。可以为所有或部分HTTP请求设置默认的HTTP头(如Cookie、User-Agent等),以模拟不同的浏览器或客户端行为。
  4. User Defined Variables:允许你定义一系列的变量及其初始值,这些变量可以在整个测试计划中使用。适合设置全局常量或初始化测试所需的基础数据。
  5. JDBC Connection Configuration:用于配置数据库连接参数,如数据库URL、驱动、用户名和密码。使得在测试中执行数据库操作(如JDBC Request sampler)时能复用这些连接配置。

X2后置处理器(Post Processors)详细介绍

X2空间中的后置处理器(Post Processors)是JMeter架构中不可或缺的一部分,它们在取样器执行之后立即运行,主要职责是对服务器响应的数据进行处理和提取,以便进一步分析或作为后续请求的输入。后置处理器增强了测试的灵活性和自动化程度,使得测试脚本能够根据实时响应动态调整。以下是关于后置处理器的详细解析:

核心功能

  1. 数据提取:从服务器响应中提取有用信息,如cookies、特定文本、JSON或XML数据字段等,这些数据可以存储为变量,供后续请求使用或作为断言验证的基础。
  2. 结果处理:对原始响应数据进行加工处理,比如解码、格式化或转换,以适应测试的特定需求。
  3. 自动化决策:根据响应内容做出逻辑判断,比如根据某个条件决定测试流程的分支走向,实现更复杂的测试逻辑。

常见后置处理器类型

  1. Regular Expression Extractor:最常用的后置处理器之一,利用正则表达式从响应文本中提取匹配的值。这对于从HTML、JSON或其他文本格式中提取动态数据非常有效。
  2. JSON Path Extractor:专门用于从JSON响应中提取数据。通过提供JSON路径表达式,可以精确提取出嵌套结构中的数据项,适用于现代Web应用和服务API的测试。
  3. XPath Extractor:与JSON Path Extractor类似,但专为XML响应设计。通过XPath表达式,可以导航和提取XML文档中的元素和属性。
  4. JSR223 PostProcessor:利用JavaScript、Groovy或其他支持的脚本语言,进行复杂的数据处理和逻辑判断。这种后置处理器的灵活性极高,几乎可以实现任何需要的后处理逻辑。

X3 控制器(Controller)详细介绍

X3空间中的控制器(Controller)在JMeter的体系结构中扮演着核心角色,它们负责组织和控制取样器(Sampler)以及其他逻辑元件的执行顺序与逻辑关系,构建出复杂多变的测试场景。控制器不仅仅是简单的顺序执行容器,它们支持条件分支、循环迭代、并行处理等多种高级功能,使得测试计划的设计更加贴近真实世界的用户交互模式。

常见控制器类型

  1. 简单控制器(Simple Controller): 作为最基本的容器,用于组织相关的取样器和其他元件,自身不提供额外的逻辑控制。适用于将相关测试逻辑分组,提高测试计划的可读性和可维护性。
  2. 循环控制器(Loop Controller): 允许用户定义取样器或控制器的重复执行次数。这对于模拟特定操作的重复执行,如登录登出场景、列表滚动等,是极其有用的。
  3. 交错控制器(Interleave Controller): 使得其子元件按照指定顺序交错执行,每轮执行中轮流选择一个元件运行。这种控制器特别适合于模拟多个用户同时执行不同操作的场景。
  4. 随机控制器(Random Controller): 每次执行时随机选择其下的一个子元件执行,适用于模拟用户行为的不确定性,增加测试的真实度。
  5. 事务控制器(Transaction Controller): 将一组取样器视为单个事务处理,用于衡量一组操作的总响应时间。可选配置为仅记录子取样器的总时间或每个子取样器的时间,是评估系统端到端性能的关键元件。

高级应用场景

● 复杂业务流程模拟:结合不同类型的控制器,可以构建出接近真实用户的复杂业务流程,如登录后进行一系列操作、根据服务器响应动态调整测试路径等。
● 性能压力点测试:通过循环控制器和大量并发线程,可以针对性地对某一功能模块进行高强度的压力测试,评估系统的稳定性和极限承载能力。
● 数据驱动测试:配合CSV Data Set Config或User Defined Variables等配置元件,控制器可以帮助实现数据驱动的测试,每个循环迭代使用不同的数据集,覆盖更多的测试用例。

X4 定时器(Timer)详细介绍

X4空间中的定时器(Timer)是JMeter架构中一个至关重要的组成部分,它们负责在取样器之间插入延迟,模拟真实用户操作间的时间间隔,这对于确保测试的现实性和准确性至关重要。通过精细地控制这些等待时间,测试可以更加真实地反映系统在实际负载条件下的表现,避免因请求过于密集而产生的非典型性能指标。

定时器的作用

  1. 模拟真实用户行为:用户在浏览网页或使用应用程序时,操作之间通常存在时间间隔,定时器能够模拟这种自然延迟,使得测试更加接近实际情况。
  2. 流量控制:在高并发测试中,定时器有助于控制请求的发送速率,避免瞬间峰值流量对被测系统造成不必要的冲击,从而得到更稳定的测试结果。
  3. 资源压力测试:通过调整定时器设置,可以有策略地施加不同级别的压力,比如短时间内的大量突发请求,或是持续的稳定负载,以全面评估系统性能。

常见定时器类型

  1. 固定定时器(Constant Timer):在每个取样器执行后插入一个固定长度的延迟时间。适用于需要在每个请求间保持一致等待时间的场景。
  2. 高斯随机定时器(Gaussian Random Timer):根据高斯分布随机生成延迟时间,允许用户设置平均值和标准差,模拟更加真实的人类操作时延分布。
  3. 统一随机定时器(Uniform Random Timer):在用户定义的最小和最大时间范围内随机选择延迟时间,增加了测试中时间间隔的多样性。
  4. 同步定时器(Synchronizing Timer):确保所有线程(或指定数量的线程)到达该点后再同时执行下一个操作,适用于模拟同时登录、抢购等场景的并发压力。
  5. 泊松定时器(Poisson Random Timer):根据泊松分布产生延迟时间,适用于模拟遵循特定事件发生频率的用户行为模式,如访问量波动较大的网站流量模拟。

X5 测试计划与线程组配置详细介绍

X5空间关注的是测试计划的整体设计与线程组的配置,这是JMeter测试执行的基石。一个完整的测试计划不仅包括了前面提到的取样器、控制器、定时器、前置与后置处理器等核心组件,还涉及如何合理组织这些组件以实现测试目标,以及如何配置线程组来模拟真实的用户负载。

测试计划概述

测试计划是JMeter中最高层级的实体,它包含了所有测试组件的集合。一个测试计划可以包含多个线程组、逻辑控制器、监听器等,用以构建复杂的测试场景。在设计测试计划时,需要考虑以下几个方面:

  1. 目标明确:明确测试的目的,比如是进行压力测试、负载测试还是稳定性测试,这将直接影响到线程组的配置和取样器的选择。
  2. 场景构建:依据测试目标设计测试场景,这包括用户行为的模拟、请求序列的安排、异常情况的处理等。
  3. 数据管理:如果测试需要使用到大量的数据(如用户登录信息、商品ID等),需要考虑如何有效地管理和参数化这些数据,如使用CSV Data Set Config。
  4. 结果验证:确定如何验证测试结果,包括设置合适的断言来检查响应数据是否符合预期。

线程组详解

线程组(Thread Group)是JMeter中模拟用户行为的基本单位,每个线程组代表了一组虚拟用户,这些用户按照预设的配置同时或顺序执行测试任务。
通过细致地规划和配置X5空间中的测试计划与线程组,测试工程师可以构建出既贴近实际又高度可控的测试环境,有效评估系统的性能极限和稳定性。

Y2 断言(Assertions)详细介

断言的作用与重要性

Y2空间中的断言(Assertions)是确保测试有效性和精确性的关键组件。它们在JMeter测试计划中扮演着裁判的角色,负责验证服务器响应是否满足预期条件。通过比较实际响应数据与预设规则或值,断言帮助测试人员确认应用程序是否按预期工作,是测试结果验证环节(Y2空间)的核心。断言的应用不仅限于验证正确性,还包括识别错误、性能基准验证及功能确认等多个层面,确保测试的全面性和深度。

常见断言类型

JMeter提供了多种断言类型,以应对不同测试需求,以下是一些常见断言的介绍:

  1. 响应断言(Response Assertion):最通用的断言类型,允许你验证响应数据中的文本、模式、字节大小、响应代码或消息等。通过正则表达式或精确字符串匹配,可以验证响应内容的准确性。
  2. JSON断言(JSON Path Assertion):针对JSON格式的响应,通过提供JSON路径表达式,验证特定字段的存在性、值或结构。这对于API测试尤为重要,能精准定位到JSON响应中的数据进行验证。
  3. XML断言(XML Assertion):与JSON断言类似,专门用于验证XML响应。通过XPath表达式,可以检查XML文档结构和内容,确保数据的正确性。
  4. Duration Assertion:检查响应时间是否在指定的阈值内。这对于性能测试至关重要,可以确保系统响应速度满足要求,及时发现性能瓶颈。
  5. Size Assertion:验证响应数据的大小是否在预期范围内,适用于确保下载文件大小或响应体大小的正确性。
  6. Response Code Assertion:验证服务器返回的状态码是否符合预期,例如,确保POST请求返回201 Created或GET请求返回200 OK。

高级断言技巧

● 组合使用断言:在复杂场景下,单一断言可能不足以全面验证响应。通过在取样器后添加多个断言,可以实现更细致的验证逻辑,确保所有关键指标均满足要求。
● 条件断言(If Controller + Response Assertion):结合条件控制器(If Controller),根据之前请求的结果或变量值,动态决定是否执行特定断言,实现更灵活的测试逻辑。
● 自定义断言:利用JSR223 Sampler或BeanShell脚本,可以编写自定义逻辑来进行断言,适用于需要高度定制验证逻辑的情况。
● 性能指标关联断言:在进行负载测试时,可以将断言与监听器(如聚合报告、响应时间图)结合使用,根据性能指标如吞吐量、错误率来动态调整断言阈值,使测试更加贴近真实场景。

Z监听器(Listener)详细介绍

监听器的重要性与功能

Z空间的核心——监听器(Listeners),是JMeter体系结构中不可或缺的一环,它们负责收集测试执行期间的所有关键数据,并以可视化的方式展示测试结果,使测试人员能够快速分析系统性能、定位问题并优化。监听器不仅仅被动记录信息,它们还支持实时监控、结果导出、定制化报表生成等功能,是沟通测试执行与结果评估的桥梁。

常见监听器类型

  1. 查看结果树(View Results Tree):最常用的调试工具之一,提供详细的请求和响应信息,包括请求头、请求体、响应头、响应数据及执行时间等。在测试计划开发阶段极为重要,便于快速定位和修正问题,但注意因其资源消耗较大,通常在正式性能测试时不启用。
  2. 聚合报告(Aggregate Report):提供测试结果的统计摘要,包括平均响应时间、吞吐量、样本数、错误率等关键性能指标。这些汇总数据有助于快速了解系统的整体表现和瓶颈所在。
  3. 响应时间图(Respone Time Graph):以图形方式展示随时间变化的平均响应时间和标准偏差,有助于观察测试过程中性能的波动趋势,识别性能下降或异常的时间点。
  4. 表格查看器(Table Viewer):提供一种灵活的表格形式来查看和导出取样器结果数据,适用于需要进行详细数据分析或外部处理的场景。
  5. HTML报告生成器(Html Report Generator):在测试结束后生成包含图表和详细分析的HTML报告,适合团队分享和存档。报告内容丰富,包括测试摘要、响应时间分布、吞吐量图表等,便于非技术人员理解测试结果。
  6. 简单数据编写器(Simple Data Writer):虽然不是直接可视化的监听器,但它允许将测试结果输出到文件,格式包括CSV、XML等,便于后期使用第三方工具进行深入分析或自动化处理。

高级应用与最佳实践

● 策略性使用监听器:考虑到监听器可能对测试性能产生影响,尤其是在高负载测试时,应谨慎选择启用哪些监听器。一般建议在测试设计阶段使用查看结果树进行调试,在执行大规模性能测试时仅保留必要的数据收集监听器,如聚合报告和简单数据编写器。
● 结果分析与优化:结合使用多种监听器,从不同角度分析测试数据。例如,使用聚合报告评估总体性能,同时借助响应时间图追踪性能波动,从而综合判断系统的稳定性和可扩展性。
● 定制化报告:利用JMeter提供的监听器接口或第三方插件,可以定制生成满足特定需求的测试报告,如加入公司Logo、自定义分析指标等,提升报告的专业性和易读性。
● 自动化与集成:通过JMeter的命令行模式结合监听器的输出功能,可以将测试执行和结果分析自动化集成到CI/CD流程中,实现持续性能测试和即时反馈,加速软件交付周期。

结语

JMeter的三维体系结构设计,清晰地展现了从测试计划制定、执行到结果分析的全过程。通过理解并熟练掌握这个模型,测试工程师可以高效地创建复杂多变的测试场景,精准地模拟用户负载,进而对目标系统的性能做出全面而准确的评估。随着JMeter版本的不断更新迭代,其功能和易用性也在持续增强,成为众多企业和开发团队进行性能测试的首选工具。

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

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

相关文章

SSE(Server Sent Event) 踩坑留念

整条链路是 客户端A --> 服务端 A —> 服务端 B 我负责服务端 A 此时要注意 Client 中的 processes 的写法 Post(value “/v2/xx”, processes MediaType.TEXT_EVENT_STREAM) 这样写是一直报错的 改成下面的写法才可以 Post(value “/v2/xx”, processes MediaT…

HTTP 协议的基本格式和Fidder的简单使用

HTTP协议诞生于1996(开玩笑哈,诞生于1991年),http协议用于网页和手机app和服务器交互的场景。通过HTTP协议,客户端(例如网页浏览器或手机应用)可以向服务器发送请求,服务器则会响应这…

10个最佳人物素材网站推荐,免费获取第一个PNG文件!

人物素材是设计中应用最广泛的元素之一。无论是网页设计还是移动终端设计,人物素材的插画设计都比文字信息更容易吸引用户的注意力。作为内容呈现,还可以增加设计的艺术属性。为了节省大家寻找人物素材的时间成本,本文立即为大家整理了10个宝…

数据结构的直接插入排序(C语言版)

一.直接插入排序的基本概念 1.直接插入排序的基本思想 将数组分为已排序和未排序两部分。 每次从未排序部分取出一个元素,将其插入到已排序部分的合适位置,使得已排序部分保持有序。 重复步骤2,直到整个数组有序。 2.排序的工作原理 假设前 i-1 个元素已经有序,现在要将第…

【Django】开发个人博客系统【1】

使用Django开发个人博客系统,博客系统包括用户(博主)注册和登录、博主资料信息、图片墙功能、留言板功能、文章列表、文章正文内容和Admin后台系统。 1. 项目架构设计 下一步将上述设置写入Django的配置文件settings.py,当Django…

利用C#中WinForm设计一个小游戏:DoYouLoveMe???

目录 一、WinForm 二、功能实现 三、代码部分 一、WinForm Windows 窗体是用于生成 Windows 桌面应用的 UI 框架。 它提供了一种基于 Visual Studio 中提供的可视化设计器创建桌面应用的高效方法。 利用视觉对象控件的拖放放置等功能,可以轻松生成桌面应用。 使…

适合大学生低成本创业的又一个项目推荐(宿舍小卖部)

​ 大学生的时间是非常充裕的,这也导致了大学生非常的懒惰,每天除了娱乐(打游戏,针对大部分人),也没有其它爱好了,就连吃饭都要抽时间来吃,所以这就给同学在宿舍做点小生意带来了机会…

如何在忘记密码的情况下解锁 iPhone? 6 种方法分享

您是否因为没有密码而无法解锁您的 iPhone? 别担心,这种情况比你想象的更常见!忘记密码是 iPhone 用户面临的最常见问题之一,而且可能非常令人沮丧 - 但不要绝望。 在这篇文章中,我们将与您分享绕过 iPhone 屏幕密码…

保时捷经销商造反,都怪小米SU7们?

文 | Auto芯球 作者 | 雷慢 造反啦,保时捷的经销售造反啦, 现在时候买合资进口豪车,估计亏得爹妈都不认得了, 放在三年前,打死我也不敢相信豪华车会有今天这样的闹剧, 这两天,保时捷中国的…

Moto和Inter字节序

inter: 低地址按照start_bit位放低字节依次往高字节填充 MotoLsb: 低地址按照start_bit位放高字节,依次往低字节填充MotoMsb:高字节按照start_bit位放低地址,依次往高字节填充

【机器学习】Python中的决策树算法探索

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 Python中的决策树算法探索引言1. 决策树基础理论1.1 算法概述1.2 构建过程 2. P…

软件3班20240527

JDK 版本与 Tomcat 的 兼容性

谷歌忙于手动删除自己搜索引擎中奇怪的人工智能答案

该公司确认正在“迅速采取行动”消除人工智能工具的一些奇怪反应。 社交媒体上充斥着谷歌新的人工智能概述产品的例子,这些产品说了一些奇怪的话,从告诉用户在披萨上涂胶水到建议他们吃石头。混乱的推出意味着,随着各种表情包的发布&#xf…

bootstrap实现天平效果

之前提到了,最近,孩子的幼儿园让家长体验“半日助教活动”,每个家长需要讲授15-20分钟的课程。作为一名程序员,实在没有能教的课程,只能做了一个小游戏,带着小朋友们熟悉数字。 在上一章博客中&#xff0c…

解决mysql5.7版本中,子查询order by后,对子查询进行group by分组获取最新记录无效的问题

目录 场景简介原因示例mysql5.7之前的版本mysql5.7之后的版本解决1、使用having2、使用limit3、使用子查询获取目标数据ID 场景简介 子查询order by后,对子查询进行group by分组获取最新记录失败 应用场景:一对多的关系,通常需要取最新、最…

好消息!PMP纸质证书可以领取啦!(22年11月至23年8月)

上周五,中国国际人才交流基金会官方发布了《关于2022年11月和2023年3月、5月、8月PMI认证考试证书领取》的通知,具体内容如下: 之前顺利通过PMP/ACP/PgMP考试的同学抓紧时间,在5月24日—6月10日内进入官网上登记领取证书。 PMP考…

1990-2021 年全球油棕面积和种植年份数据集

简介 该数据集利用 2016 年至 2021 年的哨兵-1 号数据,以 10 米的分辨率提供了油棕种植园的全球综合地图,包括工业用地和小农地块。此外,该数据集还包括根据 Landsat-5、-7 和-8 图像得出的 1990 年至 2021 年 30 米空间分辨率的种植年份估计…

UE驻网失败问题(二)

另一个UE注册失败的问题,具体过程如下: 问题现象如上,UE在这个N48上的小区一直在重复上述过程,收到RRC Setup后就不发RRC Setupcomplete,闭上眼睛也知道大概率是这个RRC Setup的配置有问题。 在问题时间点周围查看&…

TI_DSP_F2808学习笔记3: ePWM

共有6组ePWM,每一组 ePWM 模块都包含以下 7 个模块:时基模块 TB、计数比较模块 CC、动作模块 AQ、死区产生模块 DB、PWM 斩波模块 PC、错误联防模块 TZ、时间触发模块 ET。 时基模块 TB 确定PWM的周期和相位。 1)PWM 时基计数器&#xff…

使用vue,mybatis,mysql,tomcat,axios实现简单的登录注册功能

目录 第一步环境搭建 后端: 前端: 第二步画流程图 web: service: dao层: 第三步前端代码的实现 这是开始的页面,接下来我们要到router路由下书写#login的路径 路由中的component在我们自己创建的views书写vue文件…