---
title: "BeanShell Timer"
description: "Configure the JMeter BeanShell Timer timers: properties, defaults, and practical usage notes for building reliable load tests."
url: https://docs.jmeter.ai/components/beanshell-timer/
lastUpdated: 2026-10-01
source: docs.jmeter.ai
---

# BeanShell Timer

*Part of the **Timers** category. Also documented in context in the [full Component Reference](/user-manual/component-reference/#beanshell-timer).*

![BeanShell Timer](/images/screenshots/timers/beanshell_timer.png)

The BeanShell Timer can be used to generate a delay.

**For full details on using BeanShell, please see the [BeanShell website.](http://www.beanshell.org/)**

> **Note**
> Migration to [JSR223 Timer](/components/jsr223-timer/)+Groovy is highly recommended for performance, support of new Java features and limited maintenance of the BeanShell library.

The test element supports the `ThreadListener` and `TestListener` methods.
These should be defined in the initialisation file.
See the file `BeanShellListeners.bshrc` for example definitions.

| Name | Required | Description |
| --- | --- | --- |
| Name | No | Descriptive name for this element that is shown in the tree.     The name is stored in the script variable `Label` |
| Reset bsh.Interpreter before each call | Yes | If this option is selected, then the interpreter will be recreated for each sample.     This may be necessary for some long running scripts.     For further information, see [Best Practices - BeanShell scripting](/user-manual/best-practices/#bsh_scripting). |
| Parameters | No | Parameters to pass to the BeanShell script.     The parameters are stored in the following variables:      - `Parameters` - string containing the parameters as a single variable - `bsh.args` - String array containing parameters, split on white-space |
| Script file | No | A file containing the BeanShell script to run.     The file name is stored in the script variable `FileName`      The return value is used as the number of milliseconds to wait. |
| Script | Yes (unless script file is provided) | The BeanShell script. The return value is used as the number of milliseconds to wait. |

Before invoking the script, some variables are set up in the BeanShell interpreter:

- `log` - ([Logger](https://www.slf4j.org/api/org/slf4j/Logger.html)) - can be used to write to the log file
- `ctx` - ([JMeterContext](https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterContext.html)) - gives access to the context
- `vars` - ([JMeterVariables](https://jmeter.apache.org/api/org/apache/jmeter/threads/JMeterVariables.html)) - gives read/write access to variables:  `vars.get(key); vars.put(key,val); vars.putObject("OBJ1",new Object());`
- `props` - (JMeterProperties - class java.util.Properties) - e.g. `props.get("START.HMS");` `props.put("PROP1","1234");`
- `prev` - ([SampleResult](https://jmeter.apache.org/api/org/apache/jmeter/samplers/SampleResult.html)) - gives access to the previous `SampleResult` (if any)

For details of all the methods available on each of the above variables, please check the Javadoc

If the property `beanshell.timer.init` is defined, this is used to load an initialisation file, which can be used to define methods etc. for use in the BeanShell script.

## Related

- [Timers, Think Time & Pacing](/topics/timers-pacing-throughput-modeling/)
- [Thread Calculator](/tools/thread-calculator/)
- [Full Component Reference](/user-manual/component-reference/)
- [Functions and Variables](/user-manual/functions/)
