Skip to content

Commit 914e6ae

Browse files
committed
update docs
1 parent 1005e48 commit 914e6ae

10 files changed

Lines changed: 396 additions & 5 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
- Java IDE
4040
- [Intellij IDEA 使用指南](docs/javatool/ide/intellij.md)
4141
- [Eclipse 使用指南](docs/javatool/ide/eclipse.md)
42+
- **测试**
43+
- [Jmeter 应用指南](docs/javatool/test/jmeter.md)
4244

4345
## [JavaCore 教程](https://dunwu.github.io/javacore/)
4446

docs/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@
3939
- Java IDE
4040
- [Intellij IDEA 使用指南](javatool/ide/intellij.md)
4141
- [Eclipse 使用指南](javatool/ide/eclipse.md)
42+
- **测试**
43+
- [Jmeter 应用指南](javatool/test/jmeter.md)
4244

4345
## [JavaCore 教程](https://dunwu.github.io/javacore/)
4446

docs/javalib/java-log.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
>
77
> 我们先来逐一了解一下主流日志工具。
88
>
9-
> :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog)
9+
> 📓 本文已归档到:「[blog](https://github.com/dunwu/blog)
1010
1111
<!-- TOC depthFrom:2 depthTo:3 -->
1212

docs/javatool/build/maven/maven-deploy.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Maven 教程之发布 jar 到私服或中央仓库
22

3-
> :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
3+
> 📓 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
44
55
<!-- TOC depthFrom:2 depthTo:3 -->
66

docs/javatool/build/maven/maven-pom.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Maven 教程之 pom.xml 详解
22

3-
> :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
3+
> 📓 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
44
55
<!-- TOC depthFrom:2 depthTo:3 -->
66

docs/javatool/build/maven/maven-quickstart.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Maven 教程之入门指南
22

3-
> :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
3+
> 📓 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
44
55
<!-- TOC depthFrom:2 depthTo:3 -->
66

docs/javatool/build/maven/maven-settings.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Maven 教程之 settings.xml 详解
22

3-
> :notebook: 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
3+
> 📓 本文已归档到:「[blog](https://github.com/dunwu/blog/blob/master/source/_posts/java/javatool/build/maven/)
44
55
<!-- TOC depthFrom:2 depthTo:3 -->
66

docs/javatool/test/jmeter.md

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
# JMeter 应用指南
2+
3+
> [Jmeter](https://github.com/apache/jmeter) 是一款基于 Java 开发的功能和性能测试软件。
4+
>
5+
> 🎁 本文编辑时的最新版本为:5.1.1
6+
7+
## 1. 简介
8+
9+
[Jmeter](https://github.com/apache/jmeter) 是一款使用 Java 开发的功能和性能测试软件。
10+
11+
### 1.1. 特性
12+
13+
Jmeter 能够加载和性能测试许多不同的应用程序/服务器/协议类型:
14+
15+
- 网络 - HTTP,HTTPS(Java,NodeJS,PHP,ASP.NET 等)
16+
- SOAP / REST Web 服务
17+
- FTP 文件
18+
- 通过 JDBC 的数据库
19+
- LDAP
20+
- 通过 JMS 的面向消息的中间件(MOM)
21+
- 邮件-SMTP(S),POP3(S)和 IMAP(S)
22+
- 本机命令或 Shell 脚本
23+
- TCP 协议
24+
- Java 对象
25+
26+
### 1.2. 工作流
27+
28+
Jmeter 的工作原理是仿真用户向服务器发送请求,并收集服务器应答信息并计算统计信息。
29+
30+
Jmeter 的工作流如下图所示:
31+
32+
![](http://dunwu.test.upcdn.net/cs/java/javaweb/technology/test/jmeter-workflow.png!zp)
33+
34+
### 1.3. 主要元素
35+
36+
Jmeter 的主要元素如下:
37+
38+
- **`测试计划(Test Plan)`** - 可以将测试计划视为 JMeter 的测试脚本 。测试计划由测试元素组成,例如线程组,逻辑控制器,样本生成控制器,监听器,定时器,断言和配置元素。
39+
- **`线程组(Thread Group)`** - 线程组的作用是:模拟大量用户负载的运行场景。
40+
- 设置线程数
41+
- 设置加速期
42+
- 设置执行测试的次数
43+
- **`控制器(Controllers)`** - 可以分为两大类:
44+
- **`采样器(Sampler)`** - 采样器的作用是模拟用户对目标服务器发送请求。 采样器是必须将组件添加到测试计划中的,因为它只能让 JMeter 知道需要将哪种类型的请求发送到服务器。 请求可以是 HTTP,HTTP(s),FTP,TCP,SMTP,SOAP 等。
45+
- **`逻辑控制器`** - 逻辑控制器的作用是:控制多个请求发送的循环次数及顺序等。
46+
- **`监听器(Listeners)`** - 监听器的作用是:收集测试结果信息。如查看结果树、汇总报告等。
47+
- **`计时器(Timers)`** - 计时器的作用是:控制多个请求发送的时间频次。
48+
- **`配置元素(Configuration Elements)`** - 配置元素的工作与采样器的工作类似。但是,它不发送请求,而是提供预备的数据等,如 CSV、函数助手。
49+
- **`预处理器元素(Pre-Processor Elements)`** - 预处理器元素在采样器发出请求之前执行,如果预处理器附加到采样器元素,那么它将在该采样器元素运行之前执行。预处理器元素用于在运行之前准备环境及参数。
50+
- **`后处理器元素(Post-Processor Elements)`** - 后处理器元素是在发送采样器请求之后执行的元素,常用于处理响应数据。
51+
52+
![](http://dunwu.test.upcdn.net/cs/java/javaweb/technology/test/jmeter-elements.png!zp)
53+
54+
> 📌 提示:
55+
>
56+
> Jmeter 元素的数量关系大致如下:
57+
>
58+
> 1. 脚本中最多只能有一个测试计划。
59+
> 2. 测试计划中至少要有一个线程组。
60+
> 3. 线程组中至少要有一个取样器。
61+
> 4. 线程组中至少要有一个监听器。
62+
63+
## 2. 安装
64+
65+
### 2.1. 环境要求
66+
67+
- 必要的。Jmeter 基于 JDK8 开发,所以必须运行在 JDK8 环境。
68+
69+
- JDK8
70+
71+
- 可选的。有些 jar 包不是 Jmeter 提供的,如果需要相应的功能,需要自行下载并置于 `lib` 目录。
72+
- JDBC
73+
- JMS
74+
- [Bouncy Castle](http://www.bouncycastle.org/test_releases.html)
75+
76+
### 2.2. 下载
77+
78+
进入 [**Jmeter 官网下载地址**](https://jmeter.apache.org/download_jmeter.cgi) 选择需要版本进行下载。
79+
80+
### 2.3. 启动
81+
82+
解压 Jmeter 压缩包,进入 bin 目录
83+
84+
Unix 类系统运行 `jmeter` ;Windows 系统运行 `jmeter.bat`
85+
86+
![image-20191024104517721](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024104517721.png!zp)
87+
88+
## 3. 使用
89+
90+
### 3.1. 创建测试计划
91+
92+
> 🔔 注意:
93+
>
94+
> - 在运行整个测试计划之前,应保存测试计划。
95+
>
96+
> - JMeter 的测试计划以 `.jmx` 扩展文件的形式保存。
97+
98+
#### 3.1.1. 创建线程组
99+
100+
- 在“测试计划”上右键 【添加】=>【线程(用户)】=>【线程组】。
101+
102+
- 设置线程数和循环次数
103+
104+
![image-20191024105545736](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024105545736.png!zp)
105+
106+
#### 3.1.2. 配置原件
107+
108+
- 在新建的线程组上右键 【添加】=>【配置元件】=>【HTTP 请求默认值】。
109+
110+
- 填写协议、服务器名称或 IP、端口号
111+
112+
![image-20191024110016264](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024110016264.png!zp)
113+
114+
#### 3.1.3. 构造 HTTP 请求
115+
116+
- 在“线程组”上右键 【添加-】=>【取样器】=>【HTTP 请求】。
117+
118+
- 填写协议、服务器名称或 IP、端口号(如果配置了 HTTP 请求默认值可以忽略)
119+
- 填写方法、路径
120+
- 填写参数、消息体数据、文件上传
121+
122+
![image-20191024110953063](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024110953063.png!zp)
123+
124+
#### 3.1.4. 添加 HTTP 请求头
125+
126+
- 在“线程组”上右键 【添加】=>【配置元件】=>【HTTP 信息头管理器】
127+
- 由于我的测试例中传输的数据为 json 形式,所以设置键值对 `Content-Type``application/json`
128+
129+
![image-20191024111825226](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024111825226.png!zp)
130+
131+
#### 3.1.5. 添加断言
132+
133+
- 在“线程组”上右键 【添加】=>【断言】=>【 响应断言 】
134+
- 在我的案例中,以 HTTP 应答状态码为 200 来判断请求是否成功
135+
136+
![image-20191024112335130](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024112335130.png!zp)
137+
138+
#### 3.1.6. 添加察看结果树
139+
140+
- 在“线程组”上右键 【添加】=>【监听器】=>【察看结果树】
141+
- 直接点击运行,就可以查看测试结果
142+
143+
![image-20191024113849270](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024113849270.png!zp)
144+
145+
#### 3.1.7. 添加汇总报告
146+
147+
- 在“线程组”上右键 【添加】=>【监听器】=>【汇总报告】
148+
- 直接点击运行,就可以查看测试结果
149+
150+
![image-20191024114016424](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024114016424.png!zp)
151+
152+
#### 3.1.8. 保存测试计划
153+
154+
执行测试计划前,GUI 会提示先保存配置为 `jmx` 文件。
155+
156+
### 3.2. 执行测试计划
157+
158+
官方建议不要直接使用 GUI 来执行测试计划,这种模式指适用于创建测试计划和 debug。
159+
160+
执行测试计划应该使用命令行模式,语法形式如下:
161+
162+
```bash
163+
jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
164+
```
165+
166+
执行测试计划后,在 `-e -o` 参数后指定的 web 报告目录下,可以找到测试报告内容。在浏览器中打开 `index.html` 文件,可以看到如下报告:
167+
168+
![image-20191024120233058](http://dunwu.test.upcdn.net/snap/jmeter/image-20191024120233058.png!zp)
169+
170+
## 4. 问题
171+
172+
### 4.1. 如何读取本地 txt/csv 文件作为请求参数
173+
174+
参考:[Jmeter 读取本地 txt/csv 文件作为请求参数,实现接口自动化](https://www.jianshu.com/p/3b2d3b643415)
175+
176+
(1)依次点击【添加】=>【配置元件】=>【CSV 数据文件设置】
177+
178+
配置如下所示:
179+
180+
![image-20191127175820747](http://dunwu.test.upcdn.net/snap/image-20191127175820747.png)
181+
182+
重要配置说明(其他配置根据实际情况填):
183+
184+
- 文件名:输入需要导入的数据文件位置。
185+
- 文件编码:设为 UTF-8,避免乱码。
186+
- 变量名称:使用 `,` 分隔输入变量列表。如截图中设置了两个变量 `a``b`
187+
188+
(2)在 HTTP 请求的消息体数据中配置参数
189+
190+
```
191+
[{"a":"${a}","b":"${b}"}]
192+
```
193+
194+
### 4.2. 如何有序发送数据
195+
196+
依次点击【添加】=>【逻辑控制器】=>【事务控制器】
197+
198+
## 5. 参考资料
199+
200+
- [Jmeter 官网](https://jmeter.apache.org/)
201+
- [Jmeter Github](https://github.com/apache/jmeter)
202+
- [Jmeter 性能测试入门](https://www.cnblogs.com/TankXiao/p/4045439.html)
203+
- [易百教程 - Jmeter 教程](https://www.yiibai.com/jmeter)
204+
- [Jmeter 读取本地 txt/csv 文件作为请求参数,实现接口自动化](https://www.jianshu.com/p/3b2d3b643415)

docs/sidebar.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
- Java IDE
2929
- [Intellij IDEA 使用指南](javatool/ide/intellij.md)
3030
- [Eclipse 使用指南](javatool/ide/eclipse.md)
31+
- **测试工具**
32+
- [Jmeter 应用指南](javatool/test/jmeter.md)
3133

3234
## [JavaCore 教程](https://dunwu.github.io/javacore/)
3335

0 commit comments

Comments
 (0)