我是Jmeter的新手,正在做POC对Web应用程序进行负载测试。
我想做什么:我总共有4个用户登录名(外科医生)。每个登录名与“ n”名患者关联。我已经创建了2个CSV文件1.一个带有用户登录名和密码的外科医生2.另一个CSV文件,其中包含与该患者相关联的PatientName,PatientID和Surgeon,如下所示。
PatientName,PatientId,loginNamePa1,PID1,用户1Pa2,PID2,用户1Pa3,PID3,用户1Pa4,PID4,用户1Pa5,PID5,用户2Pa6,PID6,用户2Pa7,PID7,用户3Pa8,PID8,user4
我的场景:
我的测试计划
线程组(4个用户,启动时间为1秒,1个循环)-csv1(使用用户名,密码)-登录页面并导航到主页-运行时控制器(承受一定时间的负载)-While Loop(在已登录的外科医生/用户的患者仪表板之间循环)--- CSV2(数据如上所示)----导航到仪表板----导航到主菜单-退出应用程序
我想实现的目标:
我想使用单线程组并同时为所有4个用户运行它。在此过程中,一旦用户登录,用户就应该只从CSV中关联的那些患者数据。例如:当Thread1以User1登录身份运行时,他应该只能循环遍历Pa1,Pa2,Pa3,Pa4用户当线程2通过User2登录运行时,用户应仅读取Pa5,Pa6数据。
像这样,每个用户登录名都只能按照上述关联选择这些用户。有什么办法可以使用单个CSV2文件并完成此任务?这样我就不必用n个CSV文件创建n个登录数的n个线程,每个CSV文件都包含特定于用户登录的数据。
根据JMeter Test Elements Execution Order
0。配置元素
预处理器
计时器
采样器
后处理器(除非SampleResult为null)
Assertions(除非SampleResult为null)
侦听器(除非SampleResult为null)
成为Configuration Element CSV数据集配置一次且之前没有其他操作,因此您将无法使用第二个CSV数据集配置中的第一个CSV数据集配置中的当前变量。
该解决方案使用__CSVRead() function代替,JMeter函数在测试计划中出现的位置进行评估,因此您可以在其中使用任何硬编码值或JMeter变量或其他函数。
1. CSV Data Set Config for Surgeon credentials (loginNameSurgeon & Password)
2. Login Request (take first surgeon credentials from CSV)
3. While ${__jexl3("${loginNameSurgeon}" != "${loginName}")}
a. CSV Data Set Config for patient data w.r.t surgeons (PatientName,PatientId,loginName)
b. If Controller - ${__jexl3("${loginName}" != "<EOF>")} // to check if we have any more loginName left
c. Dashboard request
d. Debug Sampler // Just to validate if the variables are in place.
4. Logout request