03-JMeter

 

Jmeter是一款优秀的开源 测试 工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率。
熟练使用Jmeter后, 能用Jmeter搞定的事情,你就不会使用LoadRunner了。
Jmeter 介绍
Jmeter  是一款使用 Java 开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试). 
而且用Jmeter 来测试 Restful API, 非常好用。
 
如何学好Jmeter
如果你用Jmeter去对Web进行功能测试,或者性能测试。 你必须熟练HTTP协议,才能学好Jmeter。 否则你很难理解Jmeter中得概念。
不熟悉HTTP协议的话, 可以参考我的  【小坦克:HTTP 协议教程】
Jmeter  下载和运行
官方网站: http://jmeter.apache.org/
解压后, 运行  “bin/jmeter.bat”   
Jmeter 是支持中文的, 启动Jmeter 后, 点击 Options -> Choose Language  来选择语言


Jmeter  脚本录制:

1-发送一个请求(不用录脚本直接写)
目标: 获取城市的天气数据:
第一步 : 发送request 获取城市的城市代号
http://toy1.weather.com.cn/search?cityname=上海 
从这个请求的response 中获取到上海的城市代号. 比如:
上海的地区代码是101020100
上海动物园的地区代码是:  10102010016A
第二步 :  发送request 到: http://www.weather.com.cn/weather2d/101020100.shtml   可以得到该城市的天气数据
 
第一步: 新建一个Thread Group
必须新建一个Thread Group,  jmeter的所有任务都必须由线程处理,所有任 组下面创建。
 
第二步:新建一个 HTTP Request
 
比如我要发送一个Get 方法的http 请求: http://toy1.weather.com.cn/search?cityname=上海 
可以按照下图这么填
 
第三步 添加HTTP Head Manager
选中上一步新建的HTTP request. 右键,新建一个Http Header manager. 添加一个header
 
第四步: 添加View Results Tree
View Results Tree 是用来看运行的结果的
 
第五步:运行测试,查看结果
到这里。 我们已经成功运行起来了。
 
第六步:添加Assertion和Assert Results
 选择HTTP Request, 右键 Add-> Assertions -> Response Assertion.  添加 Patterns To Test
 
然后添加一个Assetion Results 用来查看Assertion执行的结果. 
选中Thread Group 右键  Add -> Listener -> Assertion Results. 
运行后, 如果HTTP Response中没有包含期待的字符串。 那么test 就会Fail. 
 
第7步: 使用用户自定义变量
我们还可以在Jmeter中定义变量。 比如我定义一个变量叫 city.    使用它的时候用  ${city}
添加一个 User Defined Variables.  选中Thread Group: 右键 Add -> Config Element -> User Defined Variables.
我们添加一个变量: city
 
然后在Http Request中使用这个变量

第八步:关联
所谓关联, 就是第二个Requst, 使用第一个Request中的数据
我们需要在第一个Http Requst 中新建一个正则表达式,把Response的值提取到变量中,提供给别的Http Request 使用
选择第一个Http Request, 右键 Add -> Post Processors -> Regular Expresstion Extractor
 
现在新建第二个Http Request,     发送到: http://www.weather.com.cn/weather2d/${citycode}.html 
${citycode} 中的数据, 是从Regular Expression Extractor 中取来的
 
到这, 脚本就全部写好了, 运行下,看下最终结果
 
 
2-录制脚本
1-HTTP代理服务器录制脚本
测试计划——线程组——等待操作录制脚本会自动出现
工作台——HTTP代理服务器——一顿设置(浏览器和HTTP代理服务器都要设置)——启动HTTP代理服务器
2- Badboy 脚本录制
安装Badboy——录制脚本——导入JMeter里
3-增强脚本
参数化3种(几个参数迭代几次)——设置断言检查点3种——集合点(注意要放在取样器的前面 )——关联——添加定时器(QPS限制,每分钟请求数,目标吞吐量)——添加查看结果树、聚合报告
4-运行各指标监控
安装监控插件——需要开启监控——设置各种监控

5-FTP服务器测试-上传下载性能

6-测试数据库性能

<think>好的,我现在要解决用户提到的SLF4J绑定冲突和Log4j没有正确初始化的问题。首先,我需要回忆一下SLF4J的工作原理。根据引用[1],SLF4J在编译时会查找具体的LoggerFactoryBinder实现类,如果有多个绑定库在classpath中,就会导致冲突。比如同时存在slf4j-log4j和logback的话,就会报多个绑定错误。所以解决冲突的关键是排除多余的依赖,只保留一个绑定。 接下来是Log4j没有找到appender的警告。这可能是因为Log4j的配置文件缺失或配置不正确。引用[2]提到需要在src目录下添加log4j.properties文件,而引用[3]则涉及Log4j2的异步配置,可能需要检查配置文件的位置和内容是否正确,比如是否配置了适当的Appender。 用户的问题可能是在使用Log4j1.x或者Log4j2.x时出现的。如果是Log4j2,可能还需要注意异步日志的依赖,如引用[3]中的disruptor库,以及全局异步配置是否正确。同时,如果用户混合使用了不同的日志框架,比如JCL,可能需要通过slf4j-jcl来桥接,如引用[4]所示,但这也可能引入额外的绑定。 现在,我需要整理解决步骤:首先是检查并排除多余的SLF4J绑定,只保留一个;然后是确保Log4j的配置文件存在且正确配置了Appender。此外,如果是Log4j2,可能需要处理异步日志的依赖和配置。还要考虑Maven依赖中的排除操作,避免多个绑定库共存。 可能需要分步骤详细说明,比如使用Maven的dependency:tree来查看依赖树,找出冲突的绑定库,然后在pom.xml中排除掉不需要的。同时,确认配置文件的位置是否正确,比如log4j2.xml是否在resources目录下。另外,如果用户升级到SLF4J 2.0.0以上版本,需要注意StaticLoggerBinder被替换的情况,可能需要调整依赖。 最后,生成相关问题,比如如何排查依赖冲突,如何配置Log4j2的异步日志等,帮助用户进一步理解问题。</think>### 解决SLF4J绑定冲突及Log4j初始化问题 #### 1. **SLF4J多个绑定冲突的解决方法** SLF4J要求classpath中**仅存在一个绑定实现**(如logback、slf4j-log4j等),否则会报错:`SLF4J: Class path contains multiple SLF4J bindings`[^1]。 **解决步骤:** - **步骤1:检查依赖树** 使用Maven命令定位冲突的绑定库: ```bash mvn dependency:tree -Dincludes=org.slf4j ``` 输出示例: ``` [INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.30 (compile) [INFO] +- ch.qos.logback:logback-classic:jar:1.2.3 (compile) ``` 若同时存在`slf4j-log4j12`和`logback-classic`,需排除其中一个。 - **步骤2:排除多余依赖** 在`pom.xml`中通过`<exclusion>`移除不需要的绑定: ```xml <dependency> <groupId>com.example</groupId> <artifactId>example-module</artifactId> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> </exclusions> </dependency> ``` - **步骤3:确认唯一绑定** 保留一个绑定实现(如Log4j): ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.36</version> </dependency> ``` #### 2. **Log4j未正确初始化的解决** Log4j报错`No appenders could be found`通常因**配置文件缺失或路径错误**导致[^2]。 **解决步骤:** - **步骤1:添加配置文件** 在`src/main/resources`下创建`log4j.properties`,示例内容: ```properties log4j.rootLogger=INFO, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n ``` - **步骤2:检查Log4j版本兼容性** 若使用Log4j2,需改用`log4j2.xml`配置文件,并添加异步日志依赖(如需要)[^3]: ```xml <!-- Log4j2核心依赖 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.17.1</version> </dependency> <!-- 异步日志依赖 --> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.4.4</version> </dependency> ``` - **步骤3:启用异步日志(可选)** 在`log4j2.component.properties`中添加: ```properties Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector ``` #### 3. **混合日志框架的处理** 若项目依赖了其他日志框架(如JCL),需通过桥接器统一到SLF4J[^4]: ```xml <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.36</version> </dependency> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值