首先让我以1)开头,我不是开发人员,2)我只使用JMeter不到1个月。
我正在对我们的数据库执行API的基本CRUD测试。由于表约束,被测试表中的每个记录必须具有唯一的typeId和groupId,其中typeId / groupId组合在其他地方预定义。
我需要在基本的Create:
上执行以下操作路径:/.../.../.../crud/QualificationExpression 方法:POST
{
"id": null,
"displayName": "crudTest: ${__Random(1,10000000, randomNumber)}",
"functionName": null,
"displayableSourceExpression": "TRUE",
"clobObjId": null,
"typeId": xxx,
"groupId": yyy,
"typeCode": null
}
我试图找出最佳方法:
搜索论坛和其他在线资源时,当人们使用CSV时,他们通常会使用它来存储随机登录的用户名密码。这导致他们使用参数而不是Post Body。
Array示例似乎都包含一个列数组,它们从数组中提取随机值。但是,我有一对:如果typeId = x,那么objectId必须= y。
然后我看到一个阵列列表示例,我很困惑:
ArrayList listOfPairs = new ArrayList();
ArrayList pair1 = new ArrayList();
pair1.add(203);
pair1.add(303);
listOfPairs.add(pair1);
ArrayList pair2 = new ArrayList();
pair2.add(204);
pair2.add(304);
listOfPairs.add(pair2);
ArrayList pair3 = new ArrayList();
pair3.add(205);
pair3.add(305);
listOfPairs.add(pair3);
for (int i = 0; i < listOfPairs.size(); i++) {
ArrayList pair = (ArrayList)listOfPairs.get(i);
System.out.println("pair:" + pair.get(0) + " " + pair.get(1));
}
我的愿望是没有CSV文件,最好让测试计划.jmx独立,而不依赖于&#34;有效载荷&#34;文件存在。
我希望那些拥有更多经验和知识的人能够提供一些指导和见解。
答案 0 :(得分:2)
您的要求几乎与this post中的要求相同。
当您一次又一次地发送相同的HTTP请求时 - 只需更改不同的参数,在您的情况下输入id和group id - 绝对使用CSV data set config
是一个非常好的选择,如果是JDBC Request
则是CREATE DEFINER=`dev-user`@`%` PROCEDURE `geospacial`(IN _lat double, IN _lng double, IN _distance double, IN _limit int)
BEGIN
set @radius = _distance;
set @lng_min = _lng - @radius / abs(cos(radians(_lat)) * 111);
set @lng_max = _lng + @radius / abs(cos(radians(_lat)) * 111);
set @lat_min = _lat - (@radius / 111);
set @lat_max = _lat + (@radius / 111);
SELECT DISTINCT
`project_id`
FROM (
SELECT
`project_id`,
ROUND((6371 * ACOS(COS(RADIANS(_lat)) * COS(RADIANS(`lat`)) * COS(RADIANS(`long`) - RADIANS(_lng)) + SIN(RADIANS(_lat)) * SIN(RADIANS(`lat`)))), 2) AS distance
FROM
geodata
WHERE
(`long` BETWEEN @lng_min AND @lng_max)
AND
(`lat` BETWEEN @lat_min and @lat_max)
ORDER BY
CAST(distance as DECIMAL(10,5)) ASC
) as _geo
;END
在DB中。我不明白为什么你不喜欢CSV文件的方法。如果我是你,我会尝试将数据完全远离测试脚本。将来很容易维护。
让我们说你正在使用arraylist(为什么选择arraylist?你的意思是Map?)!突然之间,如果您需要为一组新的1000类型ID和组ID运行测试,您是否会更新脚本以在Array或Map中添加这些ID?如果使用CSV数据集配置,只需将文件路径更改为指向新CSV。就是这样。你很好!
不要通过包含beanshell /其他采样器来创建测试数据等来增加测试计划的复杂性。保持测试计划非常简单。 JMeter的工作应该很简单 - 发送请求并获得响应。它不应该花时间来创建测试数据。
答案 1 :(得分:2)
转到Functions,从性能角度来看,最好尽可能使用内置组件。
如果你:
typeId
和groupId
组合 - 您需要将这些对保留在某处需要typeId
和groupId
对是唯一的 - 最明显的解决方案是使用当前虚拟用户号作为前缀或后缀,如:
:
使用__threadNum()和__V()函数组合,如:
"typeId": "${__V(typeId_${__threadNum})}",
"groupId": "${__V(groupId_${__threadNum})}",
计划为多次迭代运行测试 - 使用__counter()函数作为额外的后缀
有关上述和其他JMeter功能的全面信息,请参阅How to Use JMeter Functions文章系列。