之前我们的用例数据都是配置在 Jmeter Http 请求中,每次需要增加,修改用例都需要打开 jmeter 重新编辑,当用例越来越多的时候,用例维护起来就越来越麻烦,有没有好的方法来解决这种情况呢?
其实我们可以将用例的数据存放在 csv 文件中,然后通过 csv 文件配置来读取用例中的数据,执行测试。用例数据如下图所示:
用例设计
这里以 httpbin 接口为例,创建用例文件:jmeter-testcase.csv
用例名称变量含义:
${caseSeq}:用例编号
${apiType}:api 类型
${apiSeq} :api 版本号
${apiName}:api 名称
${priority}:优先级
${url}:api 路径
${methods}:请求方法
${parameter}: 请求参数
e
x
p
e
c
t
V
a
l
u
e
:
期
望
值
,
用
于
断
言
J
m
e
t
e
r
设
置
步
骤
1.
新
建
一
个
线
程
组
,
命
名
为
:
数
据
驱
动
2.
创
建
一
个
h
t
t
p
请
求
默
认
值
,
设
置
如
下
:
3.
添
加
一
个
循
环
控
制
器
步
骤
为
:
线
程
组
—
—
添
加
—
—
逻
辑
控
制
器
—
—
循
环
控
制
器
。
循
环
控
制
器
的
作
用
可
以
控
制
整
个
用
例
循
环
执
行
的
次
数
。
默
认
值
是
1
根
据
用
例
数
量
可
以
修
改
为
4
!
[
在
这
里
插
入
图
片
描
述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
20190708140915266.
p
n
g
?
x
−
o
s
s
−
p
r
o
c
e
s
s
=
i
m
a
g
e
/
w
a
t
e
r
m
a
r
k
,
t
y
p
e
Z
m
F
u
Z
3
p
o
Z
W
5
n
a
G
V
p
d
G
k
,
s
h
a
d
o
w
1
0
,
t
e
x
t
a
H
R
0
c
H
M
6
L
y
9
i
b
G
9
n
L
m
N
z
Z
G
4
u
b
m
V
0
L
3
d
l
a
X
h
p
b
l
80
M
j
I
x
M
D
Y
4
N
w
=
=
,
s
i
z
e
1
6
,
c
o
l
o
r
F
F
F
F
F
F
,
t
7
0
)
4.
在
循
环
控
制
器
节
点
下
创
建
C
S
V
文
件
设
置
,
具
体
配
置
内
容
如
下
:
!
[
在
这
里
插
入
图
片
描
述
]
(
h
t
t
p
s
:
/
/
i
m
g
−
b
l
o
g
.
c
s
d
n
i
m
g
.
c
n
/
20190708141027493.
p
n
g
?
x
−
o
s
s
−
p
r
o
c
e
s
s
=
i
m
a
g
e
/
w
a
t
e
r
m
a
r
k
,
t
y
p
e
Z
m
F
u
Z
3
p
o
Z
W
5
n
a
G
V
p
d
G
k
,
s
h
a
d
o
w
1
0
,
t
e
x
t
a
H
R
0
c
H
M
6
L
y
9
i
b
G
9
n
L
m
N
z
Z
G
4
u
b
m
V
0
L
3
d
l
a
X
h
p
b
l
80
M
j
I
x
M
D
Y
4
N
w
=
=
,
s
i
z
e
1
6
,
c
o
l
o
r
F
F
F
F
F
F
,
t
7
0
)
5.
创
建
一
个
i
f
控
制
器
,
步
骤
为
:
线
程
组
—
—
添
加
—
—
逻
辑
控
制
器
—
—
i
f
控
制
器
i
f
控
制
器
的
作
用
为
根
据
不
同
条
件
执
行
不
同
的
用
例
,
例
如
这
里
根
据
不
同
的
接
口
请
求
类
型
,
分
别
创
建
了
G
E
T
和
P
O
S
T
两
个
控
制
器
。
G
E
T
设
置
的
条
件
语
句
如
下
:
!
[
在
这
里
插
入
图
片
描
述
]
(
h
t
t
p
s
:
/
/
i
m
g
c
o
n
v
e
r
t
.
c
s
d
n
i
m
g
.
c
n
/
a
H
R
0
c
H
M
6
L
y
9
t
b
W
J
p
e
i
5
x
c
G
l
j
L
m
N
u
L
21
t
Y
m
l
6
X
3
B
u
Z
y
9
C
d
V
Y
0
Z
1
h
y
T
n
Z
G
c
U
x
2
N
H
F
6
W
F
Y
3
b
W
V
z
M
V
B
3
e
l
Z
s
e
E
1
C
Q
z
l
L
V
0
N
p
Y
3
d
X
a
W
F
3
T
F
h
y
V
E
1
a
T
H
d
H
M
H
o
x
Y
3
h
u
Z
1
d
P
T
E
p
K
a
H
J
z
a
E
x
O
Z
E
N
k
Z
2
h
a
N
2
Z
H
V
1
E
3
T
21
n
M
29
R
L
z
Y
0
M
A
)
条
件
语
句
为
:
"
{expectValue}:期望值,用于断言 Jmeter 设置步骤 1.新建一个线程组,命名为:数据驱动 2.创建一个 http 请求默认值,设置如下: 3.添加一个循环控制器 步骤为:线程组——添加——逻辑控制器——循环控制器。 循环控制器的作用可以控制整个用例循环执行的次数。默认值是 1 根据用例数量可以修改为 4 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190708140915266.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxMDY4Nw==,size_16,color_FFFFFF,t_70) 4.在循环控制器节点下创建 CSV 文件设置,具体配置内容如下: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190708141027493.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxMDY4Nw==,size_16,color_FFFFFF,t_70) 5.创建一个 if 控制器,步骤为:线程组——添加——逻辑控制器——if 控制器 if 控制器的作用为根据不同条件执行不同的用例,例如这里根据不同的接口请求类型,分别创建了 GET 和 POST 两个控制器。 GET 设置的条件语句如下: ![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CdVY0Z1hyTnZGcUx2NHF6WFY3bWVzMVB3elZseE1CQzlLV0NpY3dXaWF3TFhyVE1aTHdHMHoxY3huZ1dPTEpKaHJzaExOZENkZ2haN2ZHV1E3T21nM29RLzY0MA) 条件语句为:"
expectValue:期望值,用于断言Jmeter设置步骤 1.新建一个线程组,命名为:数据驱动 2.创建一个http请求默认值,设置如下: 3.添加一个循环控制器步骤为:线程组——添加——逻辑控制器——循环控制器。循环控制器的作用可以控制整个用例循环执行的次数。默认值是1根据用例数量可以修改为4![在这里插入图片描述](https://img−blog.csdnimg.cn/20190708140915266.png?x−oss−process=image/watermark,typeZmFuZ3poZW5naGVpdGk,shadow10,textaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxMDY4Nw==,size16,colorFFFFFF,t70) 4.在循环控制器节点下创建CSV文件设置,具体配置内容如下:![在这里插入图片描述](https://img−blog.csdnimg.cn/20190708141027493.png?x−oss−process=image/watermark,typeZmFuZ3poZW5naGVpdGk,shadow10,textaHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjIxMDY4Nw==,size16,colorFFFFFF,t70) 5.创建一个if控制器,步骤为:线程组——添加——逻辑控制器——if控制器 if控制器的作用为根据不同条件执行不同的用例,例如这里根据不同的接口请求类型,分别创建了GET和POST两个控制器。 GET设置的条件语句如下:![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy9CdVY0Z1hyTnZGcUx2NHF6WFY3bWVzMVB3elZseE1CQzlLV0NpY3dXaWF3TFhyVE1aTHdHMHoxY3huZ1dPTEpKaHJzaExOZENkZ2haN2ZHV1E3T21nM29RLzY0MA) 条件语句为:"{methods}"“GET"其中
m
e
t
h
o
d
s
表
示
引
用
c
s
v
中
的
m
e
t
h
o
d
s
中
的
值
。
参
数
:
I
n
t
e
r
p
r
e
t
C
o
n
d
i
t
i
o
n
a
s
V
a
r
i
a
b
l
e
E
x
p
r
e
s
s
i
o
n
?
:
如
果
这
个
选
项
被
选
中
,
将
不
会
使
用
j
s
解
析
;
条
件
表
达
式
的
值
必
须
是
t
r
u
e
(
忽
略
大
小
写
)
,
这
里
我
们
取
消
勾
选
状
态
。
E
v
a
l
u
a
t
e
f
o
r
a
l
l
c
h
i
l
d
r
e
n
:
如
果
选
中
这
一
项
,
在
每
个
子
结
点
执
行
前
都
会
计
算
表
达
式
P
O
S
T
条
件
语
句
设
置
为
:
"
{methods}表示引用 csv 中的 methods 中的值。 参数: Interpret Condition as Variable Expression?:如果这个选项被选中,将不会使用 js 解析;条件表达式的值必须是 true(忽略大小写),这里我们取消勾选状态。 Evaluate for all children:如果选中这一项,在每个子结点执行前都会计算表达式 POST 条件语句设置为:"
methods表示引用csv中的methods中的值。 参数: InterpretConditionasVariableExpression?:如果这个选项被选中,将不会使用js解析;条件表达式的值必须是true(忽略大小写),这里我们取消勾选状态。 Evaluateforallchildren:如果选中这一项,在每个子结点执行前都会计算表达式 POST条件语句设置为:"{methods}”“POST”
6.创建 GET 请求类型的用例如下
用例名称格式:${caseSeq}_ KaTeX parse error: Expected group after '_' at position 9: {apiSeq}_̲{apiName}
断言设置如下:${expectValue}引用 csv 中对应的值。
最后添加查看结果树,然后运行可以看到如下运行结果:
7.POST 用例设置和 GET 类似,不过参数请求不一样,是在 body 中,如果发送的是json格式的参数,需要添加http信息头管理器。另外请求方式为:POST
运行结果如下:
8.最后在线程组添加一个查看结果树,执行可以查看全部用例执行情况。
转https://mp.weixin.qq.com/s?__biz=MjM5NTU0MDg0MA==&mid=2651241352&idx=2&sn=df93ad73d8922fdc5ba3b59eb6cf02b0&chksm=bd04e18f8a736899b9ca098d666cb4f694f9774d199314b4a84996ebf15bb72ef50abc3d3ab8&scene=21#wechat_redirect