之前已经介绍过了jmeter的安装以及部分简单使用,这篇文章主要用来详细描述Jmeter的界面功能
jmeter界面包括五个部分:标题栏、菜单栏、常用工具栏、测试计划标签、测试计划标签内容’
标题栏
记录计划的标题、jmeter的版本信息
菜单栏
文件
子菜单
|
描述
|
新建
|
新建一个测试用例
|
模板
|
常用用例模板指导
|
打开
|
打开一个新的jmx文件
|
最近打开
|
打开最近使用过的jmx文件
|
合并
|
合并多个jmx文件
|
保存测试计划
|
保存当前编辑的测试计划,不包括测试工作台相关内容
|
保存测试计划为
|
将当前编辑的测试计划保存为另一个指定的jmx文件,不包括测试工作台内容的相关编辑
|
选中部分保存为
|
将当前编辑的测试计划选中部分,另存为一个指定的jmx文件,包括测试工作台内容的相关编辑
|
保存为测试片段
|
只能保存除线程组、测试计划、工作台之外的测试片段
|
还原
|
将修改后的jmx还原为上一次已经保存过的jmx
|
重启
|
重新启动jmeter
|
模板-Templates:
用例模板
|
|
BeanShell Sampler
|
简单的BeanShell用例 (BeanShell 一种类似于java的脚本语言)
|
Building a SOAP WebService Test Plan
|
创建一个SOAP web服务的测试计划(SOAP 一种简单XML协议,使程序通过HTTP进行通信)
|
Building a Web Test Plan
|
创建一个web测试用例
|
Building an Advanced Web Test Plan
|
创建一个优化版本的测试计划
|
Building an Extended LDAP Test Plan
|
创建一个扩展的LDAP测试用例 (LDAP 一种轻型目录访问协议,通过IP协议提供访问控制和维护分布式信息的目录信息,常用于单点登录)
|
Building an LDAP Test Plan
|
创建一个LDAP测试计划(LDAP 一种轻型目录访问协议,通过IP协议提供访问控制和维护分布式信息的目录信息,常用于单点登录)
|
Building an FTP Test Plan
|
创建一个FTP测试计划(FTP 一种文件传输协议)
|
Functional Testing Test Plan [01]
|
功能测试测试计划
|
JDBC Load Test
|
JDBC压力测试(JDBC java数据库)
|
MongoDB Load Test
|
MongoDB压力测试
|
JSR223 Sampler using Groovy
|
使用Goovy的JSR223用例(JSR223 java中的script脚本引擎)
|
Recording
|
录制脚本
|
Recording with Think Time
|
录制带有思考时间的脚本(更真实模拟用户操作)
|
Think Time at a point
|
在某时刻设置思考时间
|
OverView:模板简介
Useful links:使用帮助文档链接
编辑
(对选中的标签进行处理(也可选中相应标签,右击鼠标))
子菜单
|
功能
|
添加
|
为计划添加相关测试组件
|
粘贴
|
将剪切板中的组件内容粘贴至计划中(仅限于计划下的一级子菜单内容)
|
打开
|
打开一个已存在的jmx文件
|
合并
|
将多个jmx文件合并成一个jmx文件(仅合并单个文件,不将文件内容合并)
|
选中部分保存为
|
将当前计划另存为一个jmx文件
|
保存节点为图片
|
将当前标签内容保存为图片形式
|
保存屏幕为图片
|
将当前整个jmeter屏幕保存为图片形式
|
启用
|
启用当前组件
|
禁用
|
禁用当前组件
|
切换
|
当前选中取样器禁用和启用两种状态的切换
|
帮助
|
官方帮助使用jmeter文档
|
- 选中线程,点击编辑(或者右击鼠标):
子菜单
|
功能
|
添加
|
添加线程下的相关组件
|
剪切
|
剪切当前线程组至剪切面板
|
复制
|
复制当前线程组
|
粘贴
|
将剪切面板中的线程下的相关组件复制到该线程下
|
复写
|
复制一份相同的线程组至当前测试计划下
|
删除
|
删除该线程组
|
打开
|
打开一个已存在的 .jmx文件
|
合并
|
将其它线程组与当前选中线程组进行合并
|
选中部分保存为
|
将当前线程组保存为一份jmx文件
|
保存节点为图片
|
将当前线程组界面内容保存为一张图片形式
|
保存屏幕为图片
|
将当前整个JMetre界面保存为图片形式
|
启用
|
启用当前选中的线程组
|
禁用
|
禁用当前选中的线程组
|
切换
|
切换当前线程组的启用和禁用状态
|
帮助
|
跳转至介绍线程组使用的官方文档
|
- 选中取样器,点击编辑(或者右击鼠标)
子菜单
|
功能
|
添加
|
在取样器下添加相关元件
|
插入上级
|
在当前取样器上一级插入逻辑控制器,控制取样器的执行
|
剪切
|
将当前取样器剪切至剪切面板中
|
复制
|
复制当前取样器
|
粘贴
|
将剪切板中的取样器下包含的元件复制到当前取样器下
|
复写
|
复制一份相同的取样器至当前线程组下
|
删除
|
删除当前取样器
|
打开
|
打开一个已存在的 .jmx文件
|
合并
|
将其它jmx文件的取样器内容合并至当前取样器下
|
选中部分保存为
|
将当前取样器的内容保存为另一份 .jmx文件
|
保存为测试片段
|
将当前取样器脚本保存为可复用的测试片段,可在其它模块中进行添加复用
|
保存节点为图片
|
将当前取样器内容保存为图片形式
|
保存屏幕为图片
|
将当前JMetre界面保存为图片形式
|
启用
|
启用该取样器
|
禁用
|
禁用该取样器
|
切换
|
切换取样器的禁用和启用状态
|
帮助
|
点击至介绍取样器使用的官方文档
|
- 选中元件,点击编辑(或者右击鼠标):
监听器会多一个子菜单:清除,其它子菜单功能均与上述子菜单类似
查找
子菜单
|
功能
|
查找
|
查找/替换标签树中相匹配的标签,点击search All 会将所有模糊匹配成功的标签都标红,只有点击重置搜索,才可恢复
|
重置搜索
|
取消查找标记
|
运行
子菜单
|
功能
|
启动
|
运行启用状态下的线程组
|
不停顿开始
|
直接不停顿运行,忽略定时器
|
停止
|
停止测试计划的运行
|
关闭
|
关闭测试计划
|
远程启动
|
指定一个远程代理运行测试计划
|
远程启动所有
|
让所有远程代理运行测试计划
|
远程停止
|
指定一个远程代理停止运行测试计划
|
远程停止所有
|
让所有远程代理停止运行测试计划
|
远程关闭
|
关闭一个指定的远程代理
|
远程关闭所有
|
关闭所有远程代理
|
远程退出
|
指定一个远程代理退出执行
|
远程退出所有
|
所有远程代理退出执行
|
清除
|
清除选择菜单中的运行结果数据
|
清除全部
|
清除所有历史运行结果数据
|
选项
子菜单
|
功能
|
外观
|
界面展示选择,主要是字体及背景颜色、边框线的区别
|
日志查看
|
查看运行日志,启用后会在标签内容下出现
|
日志级别
|
选择需要查看相应级别的日志,有6种
|
SSL管理器
|
选择相应的SSL证书(在进行https请求时,需要安装SSL证书),每次重启jmeter都需要选择一次
|
选择语言
|
选择jmeter使用的描述语言
|
全部折叠
|
折叠所有标签
|
全部展开
|
展开所有标签
|
放大
|
放大整个界面的内容
|
缩小
|
缩小整个界面的内容
|
运行前自动保存
|
在每次运行测试计划前都自动保存编辑内容
|
工具
子菜单
|
功能
|
创建一个堆转储
|
创建当JVM崩溃的堆转储(堆转储是某个时间点应用程序内存的快照),这个文件可以用堆分析工具(如JHAT),以确定根本原因进行分析
|
创建一个线程转储
|
创建当JVM崩溃的线程转储 (线程转储是某个时间点在应用程序中运行的所有线程的快照)
|
函数助手对话框
|
在编写脚本的时候,使用函数助手可以协助生成指定的代码,比入随机码,正则过滤等
|
Generate HTML report
|
将测试结果输出为html报告
|
Compile JSR223 Test Elements
|
编译JSR223测试元素
|
导出交换报告
|
导出交换报告
|
Generate Schematic View(alpha)
|
生成结构数视图
|
Import from cURL
|
导入
|
函数助手对话框:生成相对应的函数字符串
可选函数:
函数
|
功能
|
BeanShell
|
执行传递的脚本,返回相应的结果
|
changeCase
|
更改大小写功能返回一个字符串值
|
char
|
将一串数字翻译成Unicode字符
|
counter
|
计数器,可配置为独立计数器(统计测试计划执行了多少次)或者全局计数器(统计总共请求了多少次)
|
CSVRead
|
从CSV文件读取一个字符串,遇到空行停止读取,遇到逗号断行,需区分文件名大小写。支持从多个文件中读取
|
dataTimeConvert
|
时间戳转为本地时间
|
digest
|
摘要函数在特定的哈希算法中返回加密的值,并带有可选的salt,大写字母和变量名
|
escapeHtml
|
将字符转换为HTML格式的字符
|
escapeOroRegexpChars
|
把正则表达式转换成Java正则引擎能识别的表达式
|
escapeXML
|
转义字符串中的字符(使用HTML实体),例如,“bread” & "butter"变为"bread" & "butter"
|
eval
|
执行一个字符串表达式,并返回执行结果.可以对字符串(存储在变量中)中的变量和函数引用做出修改。例如,给定变量name=Smith、column=age、table=birthdays、SQL=select ${column} from ${table} where name=’${name}’,那么通过${__eval(${SQL})},就能执行"select age from birthdays where name=‘Smith’"
|
evalVar
|
执行保存在变量中的表达式,并返回执行结果。用户可以从文件中读取一行字符串,并处理字符串中引用的变量。例如,假设变量 query 中包含有 select ${column} from ${table} ,而 column 和 table 中分别包含有 name 和 customers ,那么${__evalVar(query)}将会执行 select name from customers
|
FileToString
|
用来读取设置的整个文件,与StringFromFile区别在于,StringFromFile读取的是字符串,并非一次性读取整个文件
|
groovy
|
执行Apache Groovy脚本,并返回结果
|
intSum
|
用来计算多个整数值的和,最后一个指定的包含字母的参数为其它参数求和的结果变量名,结果变量名非必填
|
IsPropDefined
|
判断属性是否存在
|
isVarDefined
|
判断变量是否存在
|
javaScript
|
执行javaScript代码片段,可作为脚本语言做计算
|
jexl2
|
用于执行通用JEXL表达式,并返回执行结果
|
jexl3
|
用于执行通用JEXL表达式,并返回执行结果
|
log
|
记录日志,并返回函数的输入字符串
|
logn
|
记录日志,返回空字符串
|
longSum
|
用来计算多个长整型的和,最后一个指定的包含字母的参数为其它参数求和的结果变量名,结果变量名非必填
|
machineIP
|
返回本地IP地址
|
machineName
|
返回本机主机名
|
p
|
简化版的属性函数,目的是使用命令行中定义的属性,若默认值未设定,则默认为1
|
property
|
返回一个Jmeter属性的值,如果函数没有返回属性值,也没有指定默认值,则将返回属性的名称
|
Random
|
指定最大值和最小值之间的随机数,并指定结果变量名,结果变量名非必填
|
RandomDate
|
返回位于给定开始日期和结束日期值之间的随机日期
|
RandomFromMultipleVars
|
根据源变量提供的变量值返回一个随机值
|
RandomString
|
随机字符串函数
|
regexFunction
|
正则表达式函数,可使用正则表达式解析之前服务器响应/变量值,也可用于保存变量值,便于后期调用
|
samplerName
|
返回当前采样器的名称
|
setProperty
|
设置JMeter属性值,默认返回空字符串,属性对于JMeter是全局的,可以被用来在线程和线程组之间通信
|
split
|
通过分隔符来拆分传递的字符串,并返回原始的字符串。连接在一起的分隔符将会返回变量值 ?,拖尾的分隔符也会被认为缺少一个变量,返回 ?
|
StringFromFile
|
从文本文件中一行一行地读取字符串,用于处理大文件数据,类似于配置元件CSV Data Set Config的功能。打开/读取文件发生错误时,返回Error
|
StringToFile
|
用于将字符串写入文件。每次调用它时,它都会向文件中写入一个字符串,并追加或覆盖该字符串,默认返回空字符串
|
TestPlanName
|
返回当前测试计划的名称
|
threadGroupName
|
返回当前线程组的名字
|
threadNum
|
线程编号,无函数参数,不可使用于配置元件中(不同线程可能拥有相同的线程编号)
|
time
|
通过设置不同格式返回当前时间
|
timeShift
|
计算时间差,不填写任何参数则返回当前时间
|
unescape
|
反转义Java-escaped字符串
|
unescapeHtml
|
反转义一个包含HTML实体的字符串,将其变为包含实际Unicode字符的字符串,例如,字符串"<Français>“变为”<Fran?ais>"
|
urldecode
|
使用UTF8编码方案解密application/x-www-form-urlencoded这种类型的字符串
|
urlencode
|
加密一个字符串成为application/x-www-form-urlencoded类型的字符串
|
UUID
|
返回伪随机类型4通用唯一标识符(UUID)
|
V
|
执行变量名表达式,并返回执行结果,可以被用于执行嵌套函数引用
|
XPath
|
读取XML文件,并在文件中寻找与指定XPath相匹配的地方。每调用函数一次,就会返回下一个匹配项。到达文件末尾后,会从头开始,如果没有匹配的节点,那么函数会返回空字符串,另外,还会向JMeter日志文件写一条警告信息
|
函数参数
|
函数参数描述
|
TRUE,每个用户有自己的计数器;FALSE,使用全局计数器
|
指定全局计数器或者独立计数器
|
存储结果的变量名(可选)
|
指定存储计数值的变量
|
函数参数
|
函数参数描述
|
用于获取值的CSV文件 | *别名
|
设置从哪个文件读取(或者*ALIAS),使用*ALIAS特性可以多次打开同一个文件,另外还能缩减文件名称
|
CSV文件列号| next| *alias
|
从文件的哪一列读取。0 =第一列, 1 =第二列,依此类推。next为走到文件的下一行。*ALIAS为打开一个文件,并给它分配一个别名
|
注意:
1、如果希望在输入的列中使用逗号,那么需要换一个分隔符(通过设置属性csvread.delimiter来实现),且该符号没有在CSV文件的任何列中出现
2、每一个线程都有独立的内部指针指向文件数组中的当前行。当某个线程第一次引用文件时,函数会为线程在数组中分配下一个空闲行。如此一来,任何一个线程访问的文件行,都与其他线程不同(除非线程数大于数组包含的行数)
3、当对某个文件进行第一次读取时,文件将被打开并读取到一个内部数组中,一旦数据量大,将会占用大量内存空间,因此不适用于大数据文件,大数据文件可选择使用StringToFile函数或者CSV Data Set进行存取
- dataTimeConvert
函数参数
|
函数参数描述
|
格式化时间
|
被转换的时间,为空时,表示当前时间戳,精确到毫秒
|
源时间格式
|
被转换时间转换前的时间格式
|
目标时间格式
|
被转换时间转换后的时间格式
|
存储结果的变量名(可选)
|
转换后时间的引用变量名
|
- digest
函数参数
|
函数参数描述
|
算法摘要
|
加密算法,常见的有MD2、MD5、SHA-1、SHA-224、SHA-256、SHA-384、SHA-512
|
String to be hashed
|
需加密的字符串
|
Salt to be used for hashing (optional)
|
用于计算散列的盐(可选项)
|
Upper case result, defaults to false (optional)
|
结果是否为大写,默认为小写(False),大写为True
|
存储结果的变量名(可选)
|
存储加密结果的引用名
|
函数参数
|
函数参数描述
|
输入文件的全路径
|
包含路径的文件名(路径可以是相对于JMeter启动目录的相对路径)
|
File encoding if not the platform default (opt)
|
读取文件需要用到的文件编码方式。如果没有指明就使用平台默认的编码方式
|
存储结果的变量名(可选)
|
引用名(refName)用于重用函数创建的值
|
- javaScript
函数参数
|
函数参数描述
|
JavaScript expression to evaluate
|
待执行的JavaScript代码片段
|
存储结果的变量名(可选)
|
指定结果变量名,方便后期调用
|
常见调用变量:
变量
|
描述
|
Log
|
该函数的日志记录器
|
Ctx
|
JmeterContext对象
|
Vars
|
JmeterVariables对象
|
threadName
|
字符串包含当前线程名称
|
sampler
|
当前采样器对象
|
sampleResult
|
前面的采样结果对象
|
props
|
JMeter属性对象
|
通过它的包对象来访问静态方法
|
example:访问JMeterContextService静态方法 Packages.org.apache.jmeter.threads.JMeterContextService.getTotalThreads()
|
注意:为文本字符串添加必要的引号以及对类似于逗号一类字符用 \ 进行转义
函数参数
|
函数参数描述
|
String to be logged (and returned)
|
待记录的字符串
|
Log level (default INFO) or OUT or ERR
|
日志级别,OUT、ERR、DEBUG、INFO(默认)、WARN或者ERROR
|
Throwable text (optional)
|
可抛弃的文本,如果非空,会创建一个可抛弃的文本传递给记录器
|
Additional comment (optional)
|
注释, 会在字符串中展示,用于标识日志记录了什么
|
注意:OUT 和ERR的日志级别,将会分别导致输出记录到System.out和System.err中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)
函数参数
|
函数参数描述
|
String to be logged
|
待记录的字符串
|
Log level (default INFO) or OUT or ERR
|
日志级别,OUT、ERR、DEBUG、INFO(默认)、WARN或者ERROR
|
Throwable text (optional)
|
可抛弃的文本,如果非空,会创建一个可抛弃的文本传递给记录器
|
注意:OUT 和ERR的日志级别,将会分别导致输出记录到System.out和System.err中。在这种情况下,输出总是会被打印(它不依赖于当前的日志设置)
- RandomDate
函数参数
|
函数参数描述
|
Format string for DateTimeFormatter (optional) (default yyyy-MM-dd)
|
生成的随机日期的格式
|
开始时间(可选)(默认:现在)
|
可取随机时期开始时间
|
结束时间
|
可取随机日期结束时间
|
String format of a locale (ex: fr_FR , en_EN) (optional)
|
日期相关的地区信息
|
存储结果的变量名(可选)
|
存储随机日期的引用变量名
|
函数参数
|
函数参数描述
|
Source Variable(s) (use | as separator)
|
源数据的变量名,如a|b|c,此时a、b、c均为赋值过的变量,此处不可直接填写源数据
|
Target Variable
|
随机获取到的值的引用变量名
|
- RandomString
函数参数
|
函数参数描述
|
Random string length
|
随机字符的长度
|
Chars to use for random string generation
|
用来生成随机字符串的字符,可以是纯数字,纯字符,字符字母数字组合
|
存储结果的变量名(可选)
|
生成的随机字符串变量名
|
函数参数
|
函数参数描述
|
用于从前一个请求搜索结果的正则表达式
|
第1个参数是用于解析服务器响应数据的正则表达式。它会找到所有匹配项。如果测试人员希望将表达式中的某部分应用在模板字符串中,一定记得为其加上圆括号。例如,< a href="(.)" >。这样就会将链接的值存放到第一个匹配组合中(这里只有一个匹配组合)。又如,<input type=“hidden” name="(.)“value=”(.*)">。在这个例子中,链接的name作为第一个匹配组合,链接的value会作为第二个匹配组合。这些组合可以用在测试人员的模板字符串中(必填项)
|
Template for the replacement string, using groups from the regular expression. Format is [group][group][group]. Example 111.
|
这是一个模板字符串,函数会动态填写字符串的部分内容。要在字符串中引用正则表达式捕获的匹配组合,请使用语法:[groupnumber][group_number][groupnumber]。例如111或者 222 (必填项)
|
Which match to use. An integer 1 or greater, RAND to indicate JMeter should randomly choose, A float, or ALL indicating all matches should be used ([1])
|
第3个参数告诉JMeter使用第几次匹配。填写的正则表达式可能会找到多个匹配项。对此,有4种选择:整数,直接告诉JMeter使用第几个匹配项。"1"对应第一个匹配,"2"对应第二个匹配,以此类推;RAND,告诉JMeter随机选择一个匹配项;ALL,告诉JMeter使用所有匹配项,为每一个匹配项创建一个模板字符串,并将它们连接在一起;浮点值0到1之间,根据公式(找到的总匹配数目*指定浮点值)计算使用第几个匹配项,计算值向最近的整数取整 。默认为1(非必填项)
|
Between text. If ALL is selected, the between text will be used to generate the results ([""])
|
如果在上一个参数中选择了“ALL”,那么这个参数会被插入到重复的模板值之间(非必填项)
|
Default text. Used instead of the template if the regular expression finds no matches ([""])
|
如果没有找到匹配项返回的默认值(非必填项)
|
存储结果的变量名(可选)
|
重用函数解析值的引用名,如果输入"refName"作为该参数变量名,则:$ {refName}为第2个参数(Template for the replacement string)的计算结果;$ {refName_g0}为函数解析后发现的所有匹配结果;$ {refName_g1}为函数解析后发现的第一个匹配组合;$ {refName_gN}为函数解析后发现的第N个匹配组合;${refName_matchNr}为函数总共发现的匹配组合数目 (非必填项)
|
Input variable name containing the text to be parsed ([previous sample])
|
输入变量名称。如果指定了这一参数,那么该变量的值就会作为函数的输入,而不再使用前面的采样结果作为搜索对象(非必填项)
|
函数参数
|
函数参数描述
|
属性名称
|
待设置的属性名
|
Value of property
|
属性的值
|
Return Original Value of property (default false)?
|
是否返回属性的初始值,选择True的话,函数会返回该属性的初始值
|
- split
函数参数
|
函数参数描述
|
String to split
|
待拆分的字符串
|
函数名称。用于存储在测试计划中其他的方式使用的值。
|
重用函数计算值的引用名称
|
String to split on. Default is , (comma).
|
分隔符,默认使用逗号作为分隔符,若手动设置逗号为空格符,则需要对逗号进行转义:\,
|
- StringFromFile
函数参数
|
函数参数描述
|
输入文件的全路径
|
文件名(可以使用相对于JMeter启动目录的相对路径)。如果要在文件名中使用可选的序列号,那么文件名必须适合转成十进制格式,文件名需要使用格式字符串java.text.DecimalFormat。如果要在文件名中使用可选的序列号,当前的序列号会作为唯一的参数。如果不指明可选的初始序列号,就使用文件名作为起始值。一些有用的格式序列如下:#:插入数字,不从零开始,不包含空格(pin#:pin1,pin2,…);000:插入数字,包含3个数字组合,不从零开始(pin000:pin001,pin002,…)
|
存储结果的变量名(可选)
|
一个引用名(refName),目的是复用这一函数创建的值。可以使用语法${refName}来引用函数创建的值。默认值为“StringFromFile_”
|
Start file sequence number (opt)
|
初始序列号(如果省略这一参数,终止序列号会作为一个循环计数器)
|
Final file sequence number (opt)
|
终止序列号(如果省略这一参数,序列号会一直增加下去,不会受到限制)
|
注意:如果不希望某个格式字符被翻译,需要为它加上单引号,如"."是格式字符,必须被单引号所包含
函数参数
|
函数参数描述
|
Path to file (absolute)
|
文件名的路径(路径为绝对路径)
|
String to write
|
要写入文件的字符串,如果需要在内容中插入换行符,请在字符串中使用\n
|
Append to file (true appends, false overwrites, default true)
|
写入字符串的方法,true表示追加,false表示覆盖。如果未指定,则默认附加为true
|
Charset (defaults to UTF-8)
|
用于写入文件的编码。如果未指定,则默认编码为UTF-8
|
- time
函数参数
|
函数参数描述
|
Format string for SimpleDateFormat (optional)
|
当前时间返回的格式,默认以毫秒的形式返回当前时间
|
存储结果的变量名(可选)
|
结果返回的变量名
|
时间采用的格式:
时间格式
|
描述
|
YMd
|
yyyyMMdd,年月日,eg:20211020
|
Hms
|
HHmmss,时分秒,eg:173440
|
YMdHms
|
年月日时分秒,eg:2021102931710653
|
- timeShift
函数参数
|
函数参数描述
|
Format string for DateTimeFormatter (optional) (default unix timestamp in millisecond)
|
格式化时间,如果不填,时间戳精确到毫秒,如果填了,就格式化输出时间
|
转换时间(可选)(默认:现在)
|
需进行处理的时间
|
Amount of seconds/minutes/hours/days to add (e.g. P2D : plus two days) (optional)
|
时间位移,第一位:负号或正号,负号表示整个时间相减;正号或者不填表示相加;第二位p或者P,表示后面跟具体位移数和单位;第三位:数字+单位’D’,表示天;第四位:‘T’,表示后面跟时分秒和单位;第五位:数字+单位’H’,表示小时;第六位:数字+‘M’,表示分钟,第七位:数字+‘S’,表示秒。数字可以是正数或负数;天\时\分 前的数字为整数,秒,可以是小数。如在当前日期上增加 2 天 4 小数 6 分 10.234 秒:p2dt4h6m10.234s)}
|
String format of a locale (ex: fr_FR , en_EN) (optional)
|
区域语言
|
存储结果的变量名(可选)
|
计算后结果的引用变量名
|
eg:存在变量A1、A2和N=1
${A1} = A1变量的值
${A${N}}:无法正常工作(嵌套变量引用)
${__V(A${N})}:可以正常工作。A${N}变为A1,函数 __V返回变量值A1
函数参数
|
函数参数描述
|
XML file to get values from
|
一个待解析的XML文件名
|
XPath expression to match against
|
一个XPath表达式,用于在XML文件中寻找目标节点
|
使用时可参考网上XPath表达式语法
Generate HTML report
点击Generate report:
生成的测试报告:
注:jmeter.properties文件中有个output_format的属性配置,如果不是默认的csv格式,在生成报告时,会报错
帮助
子菜单
|
描述
|
帮助
|
点击后跳转至Apache JMeter官方使用文档介绍界面
|
这个节点是什么?
|
点击后将在控制台打印出当前选中标签的GUI 和测试元件的类名
|
调试开
|
开启debug调试日志记录
|
调试关
|
关闭debug调试日志记录
|
有用的链接
|
点击后可访问apache Jmeter官网版本发布信息、发布页、组件介绍、变量属性介绍 等链接
|
关于Apache JMetre
|
当前使用的Apache JMetre的版本信息
|
常用工具栏
从菜单栏提取出来的常用工具,鼠标悬浮可展示图标功能
测试计划标签及内容
线程(用户)
子菜单
|
描述
|
setUp线程组
|
在其他线程执行开始前自动执行的预操作,一般用于准备测试数据
|
tearDown线程组
|
在所有线程执行完毕后自动执行,一般用于测试清理工作,删除数据、回收等
|
线程组
|
正式执行的普通线程组
|
配置元件:
子菜单
|
描述
|
CSV Data Set Config
|
导入批量数据,用来模拟大量用户并发场景
|
HTTP信息头管理
|
设置HTTP头部信息
|
HTTP Cookie管理器
|
Cookie管理器,会在登录成功后,自动存储cookie值,用于之后的请求
|
HTTP缓存管理器
|
向HTTP请求添加缓存,模拟浏览器缓存功能。会对照当前时间检查“Cache-Control/Expires”值。如果请求是GET请求,并且时间戳记在缓存之后,则取样器将立即返回,而无需从远程服务器请求URL
|
HTTP请求默认值
|
设置请求默认携带的param参数、请求,每次请求将会自动携带该部分信息
|
Bolt Connection Configuration
|
提供给Bolt Request取样器使用的Bolt连接池(表示咱目前不懂)
|
DNS缓存管理器
|
允许测试在负载平衡器(CDN等)后面有多个服务器的应用程序;在每次迭代时分别解析每个线程的名称,并将解析结果保存到其内部DNS缓存中,该缓存独立于JVM和系统DNS缓存
|
FTP默认请求
|
FTP(文件传输协议)默认请求,配置相应请求信息进行上传或者下载文件
|
HTTP授权管理器
|
设置自动对一些需要验证的页面进行验证和登录
|
JDBC Connection Configuration
|
数据库连接设置,需下载相应的数据库连接jar包使用
|
Java默认请求
|
配合java 请求使用,设置请求时携带的默认值,每个java请求都会携带该配置中的值
|
Keystore Configuration
|
秘钥库配置,允许配置密钥库的加载方式以及它将使用的密钥,通常用于HTTPS方案中,在响应时间内不考虑秘钥初始化时间
|
LDAP扩展请求默认值
|
配合LDAP默认请求使用,设置请求默认值(LDAP:轻型访问目录协议)
|
LDAP默认请求
|
向LDAP服务器发送不同的LDAP请求(添加、修改、删除和搜索) (LDAP:轻型访问目录协议)
|
Random Variable
|
随机变量
|
TCP取样器配置
|
配合TCP取样器发送TCP协议请求
|
用户定义的变量
|
配置用户常使用的默认变量值
|
登陆配置元件/素
|
用来配置取样器验证的默认用户名和密码,如可配置所要测试的服务器的用户名和密码
|
简单配置元件
|
允许在取样器中添加或覆盖任意值,主要是供开发人员在开发新的JMeter组件时使用的基本GUI
|
计数器
|
根据配置的递增规则,产生递增的变量值
|
监听器:可参考 https://copyfuture.com/blogs-details/202008041651527922ld7vnymru0bwps 但更推荐查看官网描述
子菜单
|
描述
|
查看结果树
|
展示每一个取样器的结果、请求信息和响应信息,可以查看这些内容分析脚本是否存在问题,请求是否出错
|
汇总报告
|
为测试中的每个不同命名的请求创建一个表行,统计测试数据,分析被测系统的性能,相比较聚合报告消耗更低的内存
|
聚合报告
|
统计测试数据,分析测试被测系统的性能
|
后端监听器
|
异步侦听器,可以将数据推入都数据库中
|
JSR223 Listener
|
JSR223脚本代码应用于示例结果,得出自己想要的结果格式
|
保存响应到文件
|
创建一个响应数据文件。它的主要用途是创建功能测试,也可以应用于因响应太大而无法显示在视图结果树侦听器中的场景
|
响应时间图
|
查看整个请求过程响应时间的变化图
|
图形结果
|
以曲线图展示出TPS、响应时间、偏差等数据
|
断言结果
|
可以文件形式保存测试过程中的所有请求断言结果
|
比较断言可视化器
|
显示任何比较断言元素的结果
|
汇总图
|
表格数据结果展示成图表
|
生成概要结果
|
在日志文件和/或标准输出中生成到目前为止的测试运行摘要。显示运行和差异总计。在适当的时间边界上,每n秒(默认为30秒)生成一次输出,以便同步在同一时间上的多个测试运行
|
用表格查看结果
|
为每个示例结果创建一行,与查看结果树一样,使用大量内存
|
简单数据写入器
|
将结果记录到文件中,但不能记录到UI中。它旨在通过消除GUI开销来提供记录数据的有效方法
|
邮件观察仪
|
可在服务器多次响应失败时,使用该元件发送email
|
BeanShell Listener
|
允许使用BeanShell处理样本以进行保存等
|
定时器:
作用域:
1、定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
2、当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3、如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入
子菜单
|
描述
|
固定定时器
|
控制请求的时间间隔,延迟请求到达服务器的时间,模拟真实用户的行为;获取服务端某些数据之前加固定定时器,用以确保之前的请求已经在服务端生成了数据。(固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间)
|
统一随机定时器
|
控制请求的时间间隔,延迟请求到达服务器的时间。这个延迟的时间是随机的,延时时间在指定范围内且每个时间的取值概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏移值之和:总的延时 = 固定延迟时间 + 随机生成的延时
|
Precise Throughput Timer
|
精确吞吐量计时器,此计时器引入了可变暂停,计算的目的是使总吞吐量(例如,以每分钟样本数为单位)尽可能接近给定的数字)。用于揭发并发问题
|
Constant Throughput Timer
|
常数吞吐量定时器,此计时器引入可变暂停,计算时使总吞吐量(以每分钟样本数为单位)尽可能接近给定的数字,尽管计时器被称为恒定吞吐量计时器,但吞吐量值不需要恒定。它可以通过变量或函数调用来定义,并且可以在测试期间更改值
|
JSR223 Timer
|
用于使用JSR223脚本语言生成延迟
|
Synchronizing Timer
|
同步定时器,将相同请求的线程组集合到一起进行释放,可以瞬间产生很大的压力,模拟并发测试
|
泊松随机定时器
|
在每个线程请求之前按随机的时间停顿(这个随机时间符合泊松分布,更符合自然停顿时间),大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和
|
高斯随机定时器
|
在每个线程请求之前按随机的时间停顿(这个随机时间符合高斯分布,更符合自然停顿时间),总的延时 = 固定延迟时间 + 高斯随机生成的偏差值
|
BeanShell Timer
|
用于自定义编程设置取样器延时时间
|
Precise Throughput Timer 配置元素:
元素
|
描述
|
Target throughput (in samples per ‘throughput period’)
|
每个“吞吐量周期”(包括组中的所有线程)从所有受影响的采样器获取的最大样本数吞吐量周期
|
Throughput period (seconds)
|
吞吐量周期。例如,如果“吞吐量”设置为42,“吞吐量周期”设置为21秒,则每秒将获得2个样本
|
Test duration (seconds)
|
这用于确保在“测试持续时间”时间段内获得吞吐量*持续时间样本。
|
Number of threads in the batch (threads)
|
如果该值超过1,则多个线程同时离开计时器。平均吞吐量仍然满足“吞吐量”值
|
Delay between threads in the batch (ms)
|
例如,如果设置为42,且批大小为3,则线程将在x、x+42ms、x+84ms处离开
|
Random seed (change from 0 to random)
|
注意:不同的计时器最好具有不同的种子值。恒定种子确保计时器在每次测试启动时产生相同的延迟。值“0”表示计时器是真正随机的(从一个执行到另一个执行不可重复)。。
|
Constant Throughput Timer配置元素:
元素
|
描述
|
Target throughput(in samples per minute)
|
目标吞吐量(单位分钟),即每分钟要求发出的吞吐量(QPS)
|
Calculate Throughput based on
|
计算吞吐量策略
|
This thread only
|
仅对当前线程,也就是每个线程相互是不干扰的,都互相分开计算需要多少延迟时间(总吞吐量=Target throughput乘以线程数
|
All active threads
|
设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程
|
All active threads in current thread group
|
设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同
|
All active threads(shared)
|
线程延迟计算是基于任意一个线程上次运行的时间,也就是随便获取一个线程的运行时间来计算,既然是随机,结果就不一定准确,所以只能是努力控制吞吐量在某一个范围
|
All active threads in current thread group (shared)
|
在当前线程组中任取一个线程的上次运行时间来计算延时,与上面意思相近
|
Synchronizing Timer 配置元素:
元素
|
描述
|
Number of Simulated users to Group by
|
集合点集合够N个用户开始并发,如果设置为0,等同于设置为线程租中的线程数量
|
Timeout in milliseconds
|
如果设置为0,Timer将会等待线程数达到了“Number of Simultaneous Users toGroup”中设置的值才释放。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间(毫秒为单位)后还没达到“Number of Simultaneous Users toGroup”中设置的值,Timer将不再等待,释放已到达的线程。默认为0
|
前置处理器:在取样之前运行
子菜单
|
描述
|
JSR223 PreProcessor
|
使用JSR223脚本获取取样器所需要的的准备数据,如登录时对相关传参进行加密
|
用户参数
|
对不同用户设置相应的传参变量
|
HTML链接解析器
|
用于从前一个sampler返回的html页面中按照规则解析链接和表单(input/textarea/select/option等),再根据此处理器所在的sampler中的规则进行匹配修改
|
HTTP URL 重写修饰器
|
专用于使用url重写来存储sessionId而非cookie的http request。Session Argument Name参数:sessionID存储的名称。应用场景:系统只允许登录成功的用户才可以访问系统,当用户登录成功后返回一个SessionID(或者JsessionId)给用户,后续访问都需要验证这个SessionID
|
JDBC PreProcessor
|
数据库预处理器,用于在sample开始前查询数据库并获取一些值,参考JDBC Request
|
取样器超时
|
用于设定sample的超时时间,如果完成时间过长,此预处理器会调度计时器任务以中断样本
|
正则表达式用户参数
|
使用正则表达式为从另一个HTTP请求中提取的HTTP参数指定动态值,配合regular expression extractor使用
|
BeanShell PreProcessor
|
使用java脚本获取取样器所需要的的准备数据,如登录时对相关传参进行加密
|
后置处理器:发出“取样器请求”之后执行一些操作
子菜单
|
描述
|
CSS/Query提取器
|
通过css选择器定位页面元素并读取数据
|
JSON JMESPath Extractor
|
使用JMESPath查询语言从Json结果中提取值,只支持提取一个变量
|
JSON提取器
|
使用JSON-PATH语法从JSON格式的响应中提取数据,支持提取多个个变量
|
正则表达式提取器
|
使用正则表达式从服务器响应中提取值
|
边界提取器
|
填写左右边界提取服务器响应的值
|
JSR223 PostProcessor
|
使用JSR223脚本提取服务器响应值
|
Debug PostProcessor
|
调试后置处理程序,脚本调试,察看结果树可以看到取样器的相关变量、系统相关属性、JMeter相关变量与属性
|
JDBC PostProcessor
|
JDBC后置处理器,相当于JDBC Request,可发送JDBC请求
|
XPath2 Extractor
|
可以使用XPath2查询语言从结构化响应(XML或(X)HTML)中提取值
|
XPath提取器
|
提取请求返回的消息为xml或html格式的数据
|
结果状态处理器
|
控制请求遇到错误后执行的操作
|
BeanShell PostProcessor
|
jBeanShell后置处理器,可使用java编写脚本处理服务器响应内容或者提取响应值
|
断言:
子菜单
|
描述
|
响应断言
|
对各种返回类型的结果进行断言
|
JSON断言
|
针对响应结果是applicaton/json格式的请求进行断言
|
大小断言
|
对服务器响应返回的结果字节大小进行断言
|
JSR223 Assertion
|
针对取样器中的JSR223 sampler而使用的断言
|
XPath2 Assertion
|
断言测试文档的格式是否良好
|
Compare Assertion
|
比较断言可用于比较其范围内的样本结果。可以比较内容或经过的时间,并且可以在比较之前过滤内容。断言比较可以在“ 比较断言可视化器”中看到,负载测试中不可使用,因为它消耗大量资源(内存和CPU)
|
HTML断言
|
针对sampler中的SOAP/XML-RPC Request而使用的断言
|
JSON JMESPath Assertion
|
使用JMESPath对JSON文档内容执行断言
|
MD5Hex断言
|
允许用户检查响应数据的MD5 hash
|
SMIME断言
|
用于评估来自邮件阅读器采样器的样本结果,此断言验证邮件消息的主体是否已签名。签名也可以针对特定的签名者证书进行验证
|
XML Schema断言
|
对返回结果为xml-schema xml模式数据类型的消息进行断言
|
XML断言
|
判断返回结果是否和xml的格式即<></>成对出现,即测试响应数据包含形式正确的XML文档
|
XPath断言
|
针对返回信息为XPAth的数据类型进行断言
|
断言持续时间
|
在限定的时间内得到响应数据,如果响应时间大于设置的响应时间,则断言失败,否则成功
|
BeanShell断言
|
针对sampler中的Bean Shell sampler而使用的断言
|
测试片段:
非测试元件:
子菜单
|
描述
|
HTTP代理服务器
|
录制脚本使用,作为web浏览器代理,对浏览器请求进行脚本录制
|
HTTP镜像服务器
|
|
属性显示
|
|
取样器:
子菜单
|
描述
|
HTTP请求
|
HTTP请求取样器,发送http或者https请求
|
测试活动
|
|
Debug Sampler
|
可以将其元组范围内的变量进行输出,输出结果包含在相应数据中,元组范围指的是该元组可以调用的所有变量,都会进行输出,变量的来源一般是以下几种:用户自定义变量,正则表达式提取的变量,用户定义的全局变量,参数文件导入的变量
|
JSR223 Sampler
|
|
AJP/1.3 取样器
|
|
Access Log Sampler
|
|
BeanShell取样器
|
|
Bolt Request
|
|
FTP请求
|
|
GraphQL HTTP Request
|
|
JDBC Request
|
JDBC请求取样器
|
JMS发布
|
|
JMS点到点
|
|
JMS订阅
|
|
JUnit请求
|
|
Java请求
|
|
LDAP扩展请求默认值
|
|
LDAP请求
|
|
OS进程取样器
|
|
SMTP取样器
|
|
TCP取样器
|
|
WebSocket Sampler
|
WebSocket取样器
|
邮件阅读者取样器
|
|
逻辑控制器:参考https://www.cnblogs.com/du-hong/category/1149349.html?page=1
子菜单
|
描述
|
如果(if)控制器
|
实现了代码中IF的功能,通过判断表达式的True/False来判定是否执行相应的操作
|
事务控制器
|
事务控制器可以把其他节点下的取样器执行消耗时间累加在一起,便于统计其响应时间、吞吐量等
|
循环控制器
|
控制在其节点下的元件的执行次数,可以是具体数字,也可以是变量
|
While控制器
|
其节点下的元件将一直运行直到While 条件为false
|
ForEach控制器
|
一般搭配用户变量使用。依次调用用户定义的变量,直到最后一个,结束循环;为了满足ForEach Controller提取数据,变量命名的格式一般为“变量名_数字”,其中数字从1开始
|
Include控制器
|
导入外部的测试片段(非完整的测试计划),在执行时会执行导入的测试计划,但是被导入的测试计划有特殊要求,它不能有线程组,只能包含简单的控制器及控制器下的元件。换句话说就是相当于加了一个执行单元,一个封装了的业务操作单元,类似我们程序开发中的函数(方法)一样
|
Runtime控制器
|
用来控制其子元件的执行时长。市场单位是秒(Runtime默认为1,去掉1则默认为0,此时不执行其节点下的元件。与线程组中的调度器的持续时间 效果一致;如果线程组中设置了持续时间,Runtime 控制器也设置了 运行时间,那么会优先于线程组中的设置。)
|
临界部分控制器
|
控制它的子元素(samplers /控制器等)在执行控制器的子程序之前只执行一个线程作为指定的锁,使其按顺序执行取样器和线程循环
|
仅一次控制器
|
通常用于控制需要登录的请求,测试过程中,我们往往都只需要登录一次,获取到对应的登录信息后即可执行后续相关的请求,而不是每执行一个请求都登录一次,如将login请求放入仅一次控制器,则在线程组循环运行期间,不论循环次数设置为多少次,login请求都将仅在第一次执行时运行
|
录制控制器
|
实际上它是一个位置,当我们用JMeter代理进行录制时,录制的脚本默认放在此控制器的节点下面。没有实际的逻辑作用,我们用简单控制器也可以代替它
|
简单控制器
|
简单控制器可以被模块控制器所引用,其作用就是分组
|
交替控制器
|
根据被控制器触发执行次数,去依次执行控制器下的子节点<逻辑控制器、采样器>。被触发执行可以由线程组的线程数、循环次数、逻辑控制器触发,每个线程只执行次控制器下的一个子节点
|
随机控制器
|
节点下的元件随机运行,与交替控制器不一样的是节点下的元件运行顺序不定
|
随机顺序控制器
|
随机顺序控制器是将节点下的所有子节点都正常执行,只是将执行顺序打乱
|
吞吐量控制器
|
用来控制其下元件的执行次数,并无控制吞吐量的功能(1、吞吐量控制器有两种模式:Total Executions:设置运行次数与Percent Executions:设置运行比例(1~100之间);2、Per User:线程数,当选Total Executions时,是线程数;当选percent Executions时,是线程数*循环次数)
|
Switch控制器
|
开关控制器,通过其下样例顺序数值或名称 控制执行某一个样例
|
模块控制器
|
可以快速的切换脚本,不用来回的新建,方便脚本调试,是从内部文件中引用,引用上相对比较灵活,可以只引用部分测试片段或模块内容,包括控制器是从外部文件引用,只能引用整个测试片段的内容
|
Jmeter-界面功能介绍相关推荐
- 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入
一.下载solr,下载地址是:http://archive.apache.org/dist/lucene/solr/,选择自己想要的solr的版本,本项目使用的版本是4.10.3 二.如果想下载Luc ...
- 三十九、SPSS神器界面功能介绍,计算变量和个案计数和加权
@Author : By Runsen @Date:2020/5/14 在2020年一月初,也是我大三上的寒假,我开始写书,为什么呢?因为化工原理和化工热力学挂了,我需要重拾自己的自信. 对于一个大学 ...
- 视频剪辑软件VEGAS Movie Studio 15版本界面功能介绍
听说最近VEGAS的家庭系列软件Movie Studio又出了新版的Movie Studio 15,那么具体有哪些新的功能和改动呢?一起跟随小编来看看吧! 首先,从软件的LOGO说起,新版的Movie ...
- Android N 多窗口分析之freeform流程分析一(界面功能介绍)
先上两张效果图开下开启freeform时的功能 在NavigationBar上点击了Recent 按钮时,会弹出图1 的界面 点击图1中的Email上的Button(图1标示),进入Email应用界面 ...
- [VMM 2008虚拟化之初体验-2] 界面功能介绍
最近比较忙,博客更新比较慢,没关系,慢慢来.因为我们都是在学习,所以机器的配置可能比较低,所以采取的方案是VMM 2008的所有组件都安装在一台机器上. 目前我的配置是: 处理器:Intel 酷睿2双 ...
- Marketing Cloud profile界面功能介绍
Profile列表界面: Last Interaction - 最后一次交互的渠道 Interest:该客户感兴趣的内容 Engagement Score:客户engagement指数,越高越好 Se ...
- Hadoop之WEBUi界面功能介绍及日志配置查看
启动Hadoop服务器 sbin/start-all.sh 浏览器访问 http:// hadoop-senior01.test.com:8088 Cluster Metrics:集群指标 apps( ...
- postman基本功能介绍
接口测试之postman postman的安装 postman基本功能 可实现功能 1.请求调试 2.代理抓包 3.环境变量设置 4.导入与导出 5.生成在线API文档 6.自动化测试 7.mock ...
- JMETER 主界面工具栏介绍
JMETER 主界面工具栏介绍 JMETER 启动完成,进入JMETER主界面,下面对JMETER 工具栏各菜单项进行简单介绍. 左边文件菜单,打开之前保存JMX 文件,关闭是关闭当前测试计划中间内 ...
- AIBlockChain:“知名博主独家讲授”人工智能创新应用竞赛【精选实战作品】之《基于计算机视觉、自然语言处理、区块链和爬虫技术的智能会议系统》软件系统案例的界面简介、功能介绍分享之二、会中智能
AI&BlockChain:"知名博主独家讲授"人工智能创新应用竞赛[精选实战作品]之<基于计算机视觉.自然语言处理.区块链和爬虫技术的智能会议系统>软件系统案 ...
最新文章
- 川大和西南交大计算机考研难易度,2020考研:百所211院校报考难易度分析
- /src/applicationContext.xml
- dos和linux有关系吗,DOS和Linux近年来的发展比较
- m1芯片Mac安装Apple版TensorFlow(conda-forge)+编译安装sklearn
- (转)Spring4.2.5+Hibernate4.3.11+Struts2.3.24整合开发
- 数据结构HashMap(Android SparseArray 和ArrayMap)
- SPI读写串行FLASH(W25Q64)
- 优麒麟安装qq (Ubuntu)
- DDR 参数 内存延迟时序“CL-tRCD-tRP-tRAS”
- Nginx 重定向所有子域名到www
- “创客天下·杭向未来”2020杭州海外高层次人才创新创业大赛
- [openwrt] ubus实现进程间通信举例
- RT-Thread 01线程调度与管理
- 艾永亮:为什么良品铺子能在同质化的零食市场中突出重围?
- 将数字转化为拼音(1000内)
- 详解GMT CST UTC DST PDT PST几个时间概念
- 手撸的一个快递查询系统,竟然阅读量过1.8w
- swt包下载,swt包引入(一个简单的SWT程序实例及详解)
- offiice2013全套软件,加破击工具,教程,真是验证过链接:https://pan.baidu.com/s/1Csv4ZXDQyK_cKfpIXwwn6Q 提取码:h7dp 复制这段内容后打
- 口水了,各大互联网大厂年终奖一览表!
热门文章
- nginx 配置 apple-app-site-association
- FreeIPA 4.7.0 服务端 部署
- qq空间留言板删除 php,qq批量删除空间留言及说说
- Console密码恢复出厂设置
- 【爆牙游记】黄山归来不看岳-走进新时代。
- VMWare 16 pro虚拟机无法开启,打不开磁盘“E:\ubuntu16.04.vmdk”或它所依赖的某个快照磁盘,显示模块“Disk”启动失败
- python改变背景颜色_Python实现转换图片背景颜色代码
- steam安装维护服务器,安装steam无法连接服务器 | 手游网游页游攻略大全
- 2021-2027全球与中国功能性涂层复合材料市场现状及未来发展趋势
- 北京折叠——一部刚要开始就已经结束的科幻小说