内容纲要
  • JMeter 可以启用线程组来并发请求
  • 可以选择 Recording 模板开启代理,然后浏览器设置 JMeter 代理来录制 http 请求
  • Thread Group
    • Number of Threads (users): 5 线程数
    • Ramp-Up Period (in seconds): 1 加速周期(以秒为单位)
    • Loop Count: Forever 或者 100
  • 可以右键 Thread Group 选 Validate 验证测试,然后 View Results Tree 查看单次运行结果
  • 大负载测试应使用命令行,不使用图形界面
jmeter -n -t [jmx file] -l [results file] -e -o [Path to output folder]

GUI mode should only be used for creating the test script, CLI mode (NON GUI) must be used for load testing

线程组

线程组的控件使您可以:

  • 设置线程数
  • 设置加速时间
  • 设置执行测试的次数

每个线程将完整地执行测试计划,并且完全独立于其他测试线程。多个线程用于模拟与服务器应用程序的并发连接。

加速期告诉JMeter将“加速”到所选线程的总数需要多长时间。如果使用了10个线程,并且启动周期为100秒,那么JMeter将花费100秒来启动和运行所有10个线程。每个线程将在上一个线程开始后10(100/10)秒开始。如果有30个线程,启动周期为120秒,则每个连续线程将延迟4秒。

升级需要足够长的时间,以避免在测试开始时工作量过大,还应足够短,以使最后一个线程在第一个线程完成之前开始运行(除非有人希望这样做)。

从“ Ramp-up =线程数”开始,然后根据需要向上或向下调整。

默认情况下,线程组配置为在其元素之间循环一次。

线程组还提供了一个调度程序。单击“线程组”面板底部的复选框以启用/禁用其他字段,您可以在其中输入测试持续时间,启动延迟,运行的开始和结束时间。您可以配置持续时间(秒)和启动延迟(秒)来控制每个线程组的持续时间以及启动后的秒数。当测试开始时,JMeter将在启动线程组的线程之前等待启动延迟(秒),然后运行配置的持续时间(秒)。请注意,这两个选项会覆盖“ 开始时间”和“ 结束时间”。

另外,您也可以使用其他两个字段Start time和End time(尽管不建议这样做,因为它不太灵活)。测试开始时,如有必要,JMeter将等待直到达到启动时间。在每个周期的末尾,JMeter会检查是否已达到结束时间,如果已结束,则运行将停止,否则,将允许测试继续进行直到达到迭代限制。

随机变量

Random Variable

Name: Random Variable

Ouput variable
    Variable Name: random
    Output Format: 00000

Configure the Random generator
    Minimum Value: 10000
    Maximum Value: 99999
    Seed for Random function: 10000

Options
    Per Thread(User)?: False            # False 全局共享变量  True 每线程一个变量

从 csv 文件获取

Name: CSV Data Set Config

Configure the CSV Data Source
    Filename: users.csv
    File encoding:
    Variable Names (comma-delimited): email,password
    Ignore first line (only used if Variable Names is not empty): False
    Delimiter (user `\t` for tab): ,
    Allow quoted data?: False
    Recycle on EOF ?: True
    Stop thread on EOF ?: False
    Sharing mode: All threads

该“所有线程的共享模式的装置,该文件将所有线程之间共享,并且每个请求将读取CSV文件中的一行,以连续的顺序。“ CSV数据集配置”默认为这种方式。它看起来像这样:

从时间函数获取

/clientip/${__time()}

其他

testing${__Random(1,10000000)}@my-internal-test-email-server.com

${__UUID}@test-email.com 

12345678-1234-4444-a123-${__Random(111111111111,999999999999)}

${__RandomString(5)}
will return a random string of 5 characters which can be readable or not
${__RandomString(10,abcdefg)}
will return a random string of 10 characters picked from abcdefg set, like cdbgdbeebd or adbfeggfad, …
${__RandomString(6,a12zeczclk, MYVAR)}
will return a random string of 6 characters picked from a12zeczclk set and store the result in MYVAR, MYVAR will contain string like 2z22ak or z11kce, …

${__RandomFromMultipleVars(val)}
will return a random string based on content of variable val taking into account wether they are multi-value or not
${__RandomFromMultipleVars(val1|val2)}
will return a random string based on content of variables val1 and val2 taking into account wether they are multi-value or not
${__RandomFromMultipleVars(val1|val2, MYVAR)}
will return a random string based on content of variables val1 and val2 taking into account wether they are multi-value or not and store the result in MYVAR

${__BeanShell(123*456)}
returns 56088
${__BeanShell(source("function.bsh"))}
processes the script in function.bsh

${__RandomString(10,qwertyuiopasdfghjklzxcvbnm,)}@gmail.com
${__RandomString(10,qwertyuiopasdfghjklzxcvbnm,)}@${__RandomString(3,qwertyuiopasdfghjklzxcvbnm,)}.${__RandomString(2,qwertyuiopasdfghjklzxcvbnm,)}

${__RandomString(10,1234567890,)}
09${__RandomString(8,1234567890,)}

${__RandomString(15,`-=~!@#$%^&*()_+[]\;'\,./{}|:"<>?,)}

${__RandomString(${__Random(5,10,)},qwertyuiopasdfghjklzxcvbnm,)}

${__javaScript(Math.floor(Math.random() * 10))}

${__javaScript(“${username}”==”canberk”,found)}
{
    "createBy_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "createDateTime_data":"${__time(yyyyMMddHHmmss+0700)}",
    "dayOfWeek_key1":"${__RandomString(5,abcdefghijklmnopqrstuvwxyz,)}",
    "intervalTimeEnd_key3":"${__time(hh:mm:ss)}",
    "intervalTimeStart_key2":"${__time(hh:mm:ss)}",
    "routeGroup_key0":"${__RandomString(10000,abcdefghijklmnopqrstuvwxyz,)}",
    "updateBy_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "updateDateTime_key4":"${__time(yyyyMMddHHmmss+0700)}"
}

{
    "configName_key0":"${__RandomString(5,abcdefghijklmnopqrstuvwxyz,)}",
    "configVal1_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "configVal2_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "configVal3_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "createBy_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "createDateTime_data":"${__time(yyyyMMddHHmmss+0700)}",
    "description_data":"${__RandomString(10000,abcdefghijklmnopqrstuvwxyz,)}",
    "updateBy_data":"${__RandomString(10,abcdefghijklmnopqrstuvwxyz,)}",
    "updateDateTime_key1":"${__time(yyyyMMddHHmmss+0700)}"
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注