mirror of
https://github.com/aykhans/sarin.git
synced 2026-01-13 20:11:21 +00:00
v1.0.0: here we go again
This commit is contained in:
333
docs/configuration.md
Normal file
333
docs/configuration.md
Normal file
@@ -0,0 +1,333 @@
|
||||
# Configuration
|
||||
|
||||
Sarin supports environment variables, CLI flags, and YAML files. However, they are not exactly equivalent—YAML files have the most configuration options, followed by CLI flags, and then environment variables.
|
||||
|
||||
When the same option is specified in multiple sources, the following priority order applies:
|
||||
|
||||
```
|
||||
YAML (Highest) > CLI Flags > Environment Variables (Lowest)
|
||||
```
|
||||
|
||||
Use `-s` or `--show-config` to see the final merged configuration before sending requests.
|
||||
|
||||
## Properties
|
||||
|
||||
> **Note:** For CLI flags with `string / []string` type, the flag can be used once with a single value or multiple times to provide multiple values.
|
||||
|
||||
| Name | YAML | CLI | ENV | Default | Description |
|
||||
| --------------------------- | ----------------------------------- | --------------------------------------------- | -------------------------------- | ------- | ---------------------------- |
|
||||
| [Help](#help) | - | `-help` / `-h` | - | - | Show help message |
|
||||
| [Version](#version) | - | `-version` / `-v` | - | - | Show version and build info |
|
||||
| [Show Config](#show-config) | `showConfig`<br>(boolean) | `-show-config` / `-s`<br>(boolean) | `SARIN_SHOW_CONFIG`<br>(boolean) | `false` | Show merged configuration |
|
||||
| [Config File](#config-file) | `configFile`<br>(string / []string) | `-config-file` / `-f`<br>(string / []string) | `SARIN_CONFIG_FILE`<br>(string) | - | Path to config file(s) |
|
||||
| [URL](#url) | `url`<br>(string) | `-url` / `-U`<br>(string) | `SARIN_URL`<br>(string) | - | Target URL (HTTP/HTTPS) |
|
||||
| [Method](#method) | `method`<br>(string / []string) | `-method` / `-M`<br>(string / []string) | `SARIN_METHOD`<br>(string) | `GET` | HTTP method(s) |
|
||||
| [Timeout](#timeout) | `timeout`<br>(duration) | `-timeout` / `-T`<br>(duration) | `SARIN_TIMEOUT`<br>(duration) | `10s` | Request timeout |
|
||||
| [Concurrency](#concurrency) | `concurrency`<br>(number) | `-concurrency` / `-c`<br>(number) | `SARIN_CONCURRENCY`<br>(number) | `1` | Number of concurrent workers |
|
||||
| [Requests](#requests) | `requests`<br>(number) | `-requests` / `-r`<br>(number) | `SARIN_REQUESTS`<br>(number) | - | Total requests to send |
|
||||
| [Duration](#duration) | `duration`<br>(duration) | `-duration` / `-d`<br>(duration) | `SARIN_DURATION`<br>(duration) | - | Test duration |
|
||||
| [Quiet](#quiet) | `quiet`<br>(boolean) | `-quiet` / `-q`<br>(boolean) | `SARIN_QUIET`<br>(boolean) | `false` | Hide progress bar and logs |
|
||||
| [Output](#output) | `output`<br>(string) | `-output` / `-o`<br>(string) | `SARIN_OUTPUT`<br>(string) | `table` | Output format for stats |
|
||||
| [Dry Run](#dry-run) | `dryRun`<br>(boolean) | `-dry-run` / `-z`<br>(boolean) | `SARIN_DRY_RUN`<br>(boolean) | `false` | Generate without sending |
|
||||
| [Insecure](#insecure) | `insecure`<br>(boolean) | `-insecure` / `-I`<br>(boolean) | `SARIN_INSECURE`<br>(boolean) | `false` | Skip TLS verification |
|
||||
| [Body](#body) | `body`<br>(string / []string) | `-body` / `-B`<br>(string / []string) | `SARIN_BODY`<br>(string) | - | Request body |
|
||||
| [Params](#params) | `params`<br>(object) | `-param` / `-P`<br>(string / []string) | `SARIN_PARAM`<br>(string) | - | URL query parameters |
|
||||
| [Headers](#headers) | `headers`<br>(object) | `-header` / `-H`<br>(string / []string) | `SARIN_HEADER`<br>(string) | - | HTTP headers |
|
||||
| [Cookies](#cookies) | `cookies`<br>(object) | `-cookie` / `-C`<br>(string / []string) | `SARIN_COOKIE`<br>(string) | - | HTTP cookies |
|
||||
| [Proxy](#proxy) | `proxy`<br>(string / []string) | `-proxy` / `-X`<br>(string / []string) | `SARIN_PROXY`<br>(string) | - | Proxy URL(s) |
|
||||
| [Values](#values) | `values`<br>(string / []string) | `-values` / `-V`<br>(string / []string) | `SARIN_VALUES`<br>(string) | - | Template values (key=value) |
|
||||
|
||||
---
|
||||
|
||||
## Help
|
||||
|
||||
Show help message.
|
||||
|
||||
## Version
|
||||
|
||||
Show version and build information.
|
||||
|
||||
## Show Config
|
||||
|
||||
Show the final merged configuration before sending requests.
|
||||
|
||||
## Config File
|
||||
|
||||
Path to configuration file(s). Supports local paths and remote URLs.
|
||||
|
||||
If multiple config files are specified, they are merged in order. Later files override earlier ones.
|
||||
|
||||
**Example:**
|
||||
|
||||
```yaml
|
||||
# config2.yaml
|
||||
configFile: /config4.yaml
|
||||
```
|
||||
|
||||
```sh
|
||||
SARIN_CONFIG_FILE=/config1.yaml sarin -f /config2.yaml -f https://example.com/config3.yaml
|
||||
```
|
||||
|
||||
In this example, all 4 config files are read and merged with the following priority:
|
||||
|
||||
```
|
||||
config3.yaml > config2.yaml > config4.yaml > config1.yaml
|
||||
```
|
||||
|
||||
## URL
|
||||
|
||||
Target URL. Must be HTTP or HTTPS.
|
||||
|
||||
## Method
|
||||
|
||||
HTTP method(s). If multiple values are provided, Sarin cycles through them randomly for each request. Supports [templating](templating.md).
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
method: GET
|
||||
|
||||
# OR
|
||||
|
||||
method:
|
||||
- GET
|
||||
- POST
|
||||
- PUT
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-method GET -method POST -method PUT
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_METHOD=GET
|
||||
```
|
||||
|
||||
## Timeout
|
||||
|
||||
Request timeout. Must be greater than 0.
|
||||
|
||||
Valid time units: `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`
|
||||
|
||||
**Examples:** `5s`, `300ms`, `1m20s`
|
||||
|
||||
## Concurrency
|
||||
|
||||
Number of concurrent workers. Must be between 1 and 100,000,000.
|
||||
|
||||
## Requests
|
||||
|
||||
Total number of requests to send. At least one of `requests` or `duration` must be specified. If both are provided, the test stops when either limit is reached first.
|
||||
|
||||
## Duration
|
||||
|
||||
Test duration. At least one of `requests` or `duration` must be specified. If both are provided, the test stops when either limit is reached first.
|
||||
|
||||
Valid time units: `ns`, `us` (or `µs`), `ms`, `s`, `m`, `h`
|
||||
|
||||
**Examples:** `1m30s`, `25s`, `1h`
|
||||
|
||||
## Quiet
|
||||
|
||||
Hide the progress bar and runtime logs.
|
||||
|
||||
## Output
|
||||
|
||||
Output format for response statistics.
|
||||
|
||||
Valid formats: `table`, `json`, `yaml`, `none`
|
||||
|
||||
Using `none` disables output and reduces memory usage since response statistics are not stored.
|
||||
|
||||
## Dry Run
|
||||
|
||||
Generate requests without sending them. Useful for testing templates.
|
||||
|
||||
## Insecure
|
||||
|
||||
Skip TLS certificate verification.
|
||||
|
||||
## Body
|
||||
|
||||
Request body. If multiple values are provided, Sarin cycles through them randomly for each request. Supports [templating](templating.md).
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
body: '{"product": "car"}'
|
||||
|
||||
# OR
|
||||
|
||||
body:
|
||||
- '{"product": "car"}'
|
||||
- '{"product": "phone"}'
|
||||
- '{"product": "watch"}'
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-body '{"product": "car"}' -body '{"product": "phone"}' -body '{"product": "watch"}'
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_BODY='{"product": "car"}'
|
||||
```
|
||||
|
||||
## Params
|
||||
|
||||
URL query parameters. If multiple values are provided for a key, Sarin cycles through them randomly for each request. Supports [templating](templating.md).
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
params:
|
||||
key1: value1
|
||||
key2: [value2, value3]
|
||||
|
||||
# OR
|
||||
|
||||
params:
|
||||
- key1: value1
|
||||
- key2: [value2, value3]
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-param "key1=value1" -param "key2=value2" -param "key2=value3"
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_PARAM="key1=value1"
|
||||
```
|
||||
|
||||
## Headers
|
||||
|
||||
HTTP headers. If multiple values are provided for a key, Sarin cycles through them randomly for each request. Supports [templating](templating.md).
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
headers:
|
||||
key1: value1
|
||||
key2: [value2, value3]
|
||||
|
||||
# OR
|
||||
|
||||
headers:
|
||||
- key1: value1
|
||||
- key2: [value2, value3]
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-header "key1: value1" -header "key2: value2" -header "key2: value3"
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_HEADER="key1: value1"
|
||||
```
|
||||
|
||||
## Cookies
|
||||
|
||||
HTTP cookies. If multiple values are provided for a key, Sarin cycles through them randomly for each request. Supports [templating](templating.md).
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
cookies:
|
||||
key1: value1
|
||||
key2: [value2, value3]
|
||||
|
||||
# OR
|
||||
|
||||
cookies:
|
||||
- key1: value1
|
||||
- key2: [value2, value3]
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-cookie "key1=value1" -cookie "key2=value2" -cookie "key2=value3"
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_COOKIE="key1=value1"
|
||||
```
|
||||
|
||||
## Proxy
|
||||
|
||||
Proxy URL(s). If multiple values are provided, Sarin cycles through them randomly for each request.
|
||||
|
||||
Supported protocols: `http`, `https`, `socks5`, `socks5h`
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
proxy: http://proxy1.com
|
||||
|
||||
# OR
|
||||
|
||||
proxy:
|
||||
- http://proxy1.com
|
||||
- socks5://proxy2.com
|
||||
- socks5h://proxy3.com
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-proxy http://proxy1.com -proxy socks5://proxy2.com -proxy socks5h://proxy3.com
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_PROXY="http://proxy1.com"
|
||||
```
|
||||
|
||||
## Values
|
||||
|
||||
Template values in key=value format. Supports [templating](templating.md). Multiple values can be specified and all are rendered for each request.
|
||||
|
||||
See the [Templating Guide](templating.md) for more details on using values and available template functions.
|
||||
|
||||
**YAML example:**
|
||||
|
||||
```yaml
|
||||
values: "key=value"
|
||||
|
||||
# OR
|
||||
|
||||
values: |
|
||||
key1=value1
|
||||
key2=value2
|
||||
key3=value3
|
||||
```
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
-values "key1=value1" -values "key2=value2" -values "key3=value3"
|
||||
```
|
||||
|
||||
**ENV example:**
|
||||
|
||||
```sh
|
||||
SARIN_VALUES="key1=value1"
|
||||
```
|
||||
712
docs/examples.md
Normal file
712
docs/examples.md
Normal file
@@ -0,0 +1,712 @@
|
||||
# Examples
|
||||
|
||||
This guide provides practical examples for common Sarin use cases.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Basic Usage](#basic-usage)
|
||||
- [Request-Based vs Duration-Based Tests](#request-based-vs-duration-based-tests)
|
||||
- [Dynamic Requests with Templating](#dynamic-requests-with-templating)
|
||||
- [Headers, Cookies, and Parameters](#headers-cookies-and-parameters)
|
||||
- [Request Bodies](#request-bodies)
|
||||
- [Using Proxies](#using-proxies)
|
||||
- [Output Formats](#output-formats)
|
||||
- [Docker Usage](#docker-usage)
|
||||
- [Dry Run Mode](#dry-run-mode)
|
||||
- [Show Configuration](#show-configuration)
|
||||
|
||||
---
|
||||
|
||||
## Basic Usage
|
||||
|
||||
Send 1000 GET requests with 10 concurrent workers:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Send requests with a custom timeout:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 -T 5s
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
timeout: 5s
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Request-Based vs Duration-Based Tests
|
||||
|
||||
**Request-based:** Stop after sending a specific number of requests:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 10000 -c 50
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 10000
|
||||
concurrency: 50
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Duration-based:** Run for a specific amount of time:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -d 5m -c 50
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
duration: 5m
|
||||
concurrency: 50
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Combined:** Stop when either limit is reached first:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 100000 -d 2m -c 100
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 100000
|
||||
duration: 2m
|
||||
concurrency: 100
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Dynamic Requests with Templating
|
||||
|
||||
Generate a random User-Agent for each request:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-H "User-Agent: {{ fakeit_UserAgent }}"
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
headers:
|
||||
User-Agent: "{{ fakeit_UserAgent }}"
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Send requests with random user data:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/users -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-B '{"name": "{{ fakeit_Name }}", "email": "{{ fakeit_Email }}"}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/users
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
body: '{"name": "{{ fakeit_Name }}", "email": "{{ fakeit_Email }}"}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Use values to share generated data across headers and body:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/users -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-V "ID={{ fakeit_UUID }}" \
|
||||
-H "X-Request-ID: {{ .Values.ID }}" \
|
||||
-B '{"id": "{{ .Values.ID }}", "name": "{{ fakeit_Name }}"}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/users
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
values: "ID={{ fakeit_UUID }}"
|
||||
headers:
|
||||
X-Request-ID: "{{ .Values.ID }}"
|
||||
body: '{"id": "{{ .Values.ID }}", "name": "{{ fakeit_Name }}"}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
Generate random IPs and timestamps:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/logs -r 500 -c 20 \
|
||||
-M POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-B '{"ip": "{{ fakeit_IPv4Address }}", "timestamp": "{{ fakeit_Date }}", "action": "{{ fakeit_HackerVerb }}"}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/logs
|
||||
requests: 500
|
||||
concurrency: 20
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
body: '{"ip": "{{ fakeit_IPv4Address }}", "timestamp": "{{ fakeit_Date }}", "action": "{{ fakeit_HackerVerb }}"}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
> For the complete list of 320+ template functions, see the **[Templating Guide](templating.md)**.
|
||||
|
||||
## Headers, Cookies, and Parameters
|
||||
|
||||
**Custom headers:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-H "Authorization: Bearer token123" \
|
||||
-H "X-Custom-Header: value"
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
headers:
|
||||
Authorization: Bearer token123
|
||||
X-Custom-Header: value
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Random headers from multiple values:**
|
||||
|
||||
> **Note:** When multiple values are provided for the same header, Sarin starts at a random index and cycles through all values in order. Once the cycle completes, it picks a new random starting point. This ensures all values are used while maintaining some randomness.
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-H "X-Region: us-east" \
|
||||
-H "X-Region: us-west" \
|
||||
-H "X-Region: eu-central"
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
headers:
|
||||
X-Region:
|
||||
- us-east
|
||||
- us-west
|
||||
- eu-central
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Query parameters:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/search -r 1000 -c 10 \
|
||||
-P "query=test" \
|
||||
-P "limit=10"
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/search
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
params:
|
||||
query: test
|
||||
limit: "10"
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Dynamic query parameters:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/users -r 1000 -c 10 \
|
||||
-P "id={{ fakeit_IntRange 1 1000 }}" \
|
||||
-P "fields=name,email"
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/users
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
params:
|
||||
id: "{{ fakeit_IntRange 1 1000 }}"
|
||||
fields: name,email
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Cookies:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-C "session_id=abc123" \
|
||||
-C "user_id={{ fakeit_UUID }}"
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
cookies:
|
||||
session_id: abc123
|
||||
user_id: "{{ fakeit_UUID }}"
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Request Bodies
|
||||
|
||||
**Simple JSON body:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/data -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-B '{"key": "value"}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/data
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
body: '{"key": "value"}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Multiple bodies (randomly cycled):**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/products -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-B '{"product": "laptop", "price": 999}' \
|
||||
-B '{"product": "phone", "price": 599}' \
|
||||
-B '{"product": "tablet", "price": 399}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/products
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
body:
|
||||
- '{"product": "laptop", "price": 999}'
|
||||
- '{"product": "phone", "price": 599}'
|
||||
- '{"product": "tablet", "price": 399}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Dynamic body with fake data:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/orders -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-B '{
|
||||
"order_id": "{{ fakeit_UUID }}",
|
||||
"customer": "{{ fakeit_Name }}",
|
||||
"email": "{{ fakeit_Email }}",
|
||||
"amount": {{ fakeit_Price 10 500 }},
|
||||
"currency": "{{ fakeit_CurrencyShort }}"
|
||||
}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/orders
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
headers:
|
||||
Content-Type: application/json
|
||||
body: |
|
||||
{
|
||||
"order_id": "{{ fakeit_UUID }}",
|
||||
"customer": "{{ fakeit_Name }}",
|
||||
"email": "{{ fakeit_Email }}",
|
||||
"amount": {{ fakeit_Price 10 500 }},
|
||||
"currency": "{{ fakeit_CurrencyShort }}"
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Multipart form data:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/upload -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-B '{{ body_FormData (dict_Str "username" "john" "email" "john@example.com") }}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/upload
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
body: '{{ body_FormData (dict_Str "username" "john" "email" "john@example.com") }}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Multipart form data with dynamic values:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/api/users -r 1000 -c 10 \
|
||||
-M POST \
|
||||
-B '{{ body_FormData (dict_Str "name" (fakeit_Name) "email" (fakeit_Email) "phone" (fakeit_Phone)) }}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com/api/users
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
method: POST
|
||||
body: '{{ body_FormData (dict_Str "name" (fakeit_Name) "email" (fakeit_Email) "phone" (fakeit_Phone)) }}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
> **Note:** `body_FormData` automatically sets the `Content-Type` header to `multipart/form-data` with the appropriate boundary.
|
||||
|
||||
## Using Proxies
|
||||
|
||||
**Single HTTP proxy:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-X http://proxy.example.com:8080
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
proxy: http://proxy.example.com:8080
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**SOCKS5 proxy:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-X socks5://proxy.example.com:1080
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
proxy: socks5://proxy.example.com:1080
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Multiple proxies (load balanced):**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-X http://proxy1.example.com:8080 \
|
||||
-X http://proxy2.example.com:8080 \
|
||||
-X socks5://proxy3.example.com:1080
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
proxy:
|
||||
- http://proxy1.example.com:8080
|
||||
- http://proxy2.example.com:8080
|
||||
- socks5://proxy3.example.com:1080
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Proxy with authentication:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-X http://user:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
proxy: http://user:password@proxy.example.com:8080
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Output Formats
|
||||
|
||||
**Table output (default):**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 -o table
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
output: table
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**JSON output (useful for parsing):**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 -o json
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
output: json
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**YAML output:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 -o yaml
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
output: yaml
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**No output (minimal memory usage):**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 -o none
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
output: none
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
**Quiet mode (hide progress bar):**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 -q
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
quiet: true
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
## Docker Usage
|
||||
|
||||
**Basic Docker usage:**
|
||||
|
||||
```sh
|
||||
docker run --rm aykhans/sarin -U http://example.com -r 1000 -c 10
|
||||
```
|
||||
|
||||
**With local config file:**
|
||||
|
||||
```sh
|
||||
docker run --rm -v $(pwd)/config.yaml:/config.yaml aykhans/sarin -f /config.yaml
|
||||
```
|
||||
|
||||
**With remote config file:**
|
||||
|
||||
```sh
|
||||
docker run --rm aykhans/sarin -f https://example.com/config.yaml
|
||||
```
|
||||
|
||||
**Interactive mode with TTY:**
|
||||
|
||||
```sh
|
||||
docker run --rm -it aykhans/sarin -U http://example.com -r 1000 -c 10
|
||||
```
|
||||
|
||||
## Dry Run Mode
|
||||
|
||||
Test your configuration without sending actual requests:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 10 -c 1 -z \
|
||||
-H "X-Request-ID: {{ fakeit_UUID }}" \
|
||||
-B '{"user": "{{ fakeit_Name }}"}'
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 10
|
||||
concurrency: 1
|
||||
dryRun: true
|
||||
headers:
|
||||
X-Request-ID: "{{ fakeit_UUID }}"
|
||||
body: '{"user": "{{ fakeit_Name }}"}'
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
This validates templates.
|
||||
|
||||
## Show Configuration
|
||||
|
||||
Preview the merged configuration before running:
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com -r 1000 -c 10 \
|
||||
-H "Authorization: Bearer token" \
|
||||
-s
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>YAML equivalent</summary>
|
||||
|
||||
```yaml
|
||||
url: http://example.com
|
||||
requests: 1000
|
||||
concurrency: 10
|
||||
showConfig: true
|
||||
headers:
|
||||
Authorization: Bearer token
|
||||
```
|
||||
|
||||
</details>
|
||||
BIN
docs/static/demo.gif
vendored
Normal file
BIN
docs/static/demo.gif
vendored
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 96 KiB |
610
docs/templating.md
Normal file
610
docs/templating.md
Normal file
@@ -0,0 +1,610 @@
|
||||
# Templating
|
||||
|
||||
Sarin supports Go templates in methods, bodies, headers, params, cookies, and values.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Using Values](#using-values)
|
||||
- [General Functions](#general-functions)
|
||||
- [String Functions](#string-functions)
|
||||
- [Collection Functions](#collection-functions)
|
||||
- [Body Functions](#body-functions)
|
||||
- [Fake Data Functions](#fake-data-functions)
|
||||
- [File](#file)
|
||||
- [ID](#id)
|
||||
- [Product](#product)
|
||||
- [Person](#person)
|
||||
- [Generate](#generate)
|
||||
- [Auth](#auth)
|
||||
- [Address](#address)
|
||||
- [Game](#game)
|
||||
- [Beer](#beer)
|
||||
- [Car](#car)
|
||||
- [Words](#words)
|
||||
- [Text](#text)
|
||||
- [Foods](#foods)
|
||||
- [Misc](#misc)
|
||||
- [Color](#color)
|
||||
- [Image](#image)
|
||||
- [Internet](#internet)
|
||||
- [HTML](#html)
|
||||
- [Date/Time](#datetime)
|
||||
- [Payment](#payment)
|
||||
- [Finance](#finance)
|
||||
- [Company](#company)
|
||||
- [Hacker](#hacker)
|
||||
- [Hipster](#hipster)
|
||||
- [App](#app)
|
||||
- [Animal](#animal)
|
||||
- [Emoji](#emoji)
|
||||
- [Language](#language)
|
||||
- [Number](#number)
|
||||
- [String](#string)
|
||||
- [Celebrity](#celebrity)
|
||||
- [Minecraft](#minecraft)
|
||||
- [Book](#book)
|
||||
- [Movie](#movie)
|
||||
- [Error](#error)
|
||||
- [School](#school)
|
||||
- [Song](#song)
|
||||
|
||||
## Using Values
|
||||
|
||||
Values are generated once per request and can be referenced in multiple fields using `{{ .Values.KEY }}` syntax. This is useful when you need to use the same generated value (e.g., a UUID) in both headers and body within the same request.
|
||||
|
||||
**Example:**
|
||||
|
||||
```yaml
|
||||
values: |
|
||||
REQUEST_ID={{ fakeit_UUID }}
|
||||
USER_ID={{ fakeit_UUID }}
|
||||
|
||||
headers:
|
||||
X-Request-ID: "{{ .Values.REQUEST_ID }}"
|
||||
body: |
|
||||
{
|
||||
"requestId": "{{ .Values.REQUEST_ID }}",
|
||||
"userId": "{{ .Values.USER_ID }}"
|
||||
}
|
||||
```
|
||||
|
||||
In this example, `REQUEST_ID` is generated once and the same value is used in both the header and body. Each new request generates a new `REQUEST_ID`.
|
||||
|
||||
**CLI example:**
|
||||
|
||||
```sh
|
||||
sarin -U http://example.com/users \
|
||||
-V "ID={{ fakeit_UUID }}" \
|
||||
-H "X-Request-ID: {{ .Values.ID }}" \
|
||||
-B '{"id": "{{ .Values.ID }}"}'
|
||||
```
|
||||
|
||||
## General Functions
|
||||
|
||||
### String Functions
|
||||
|
||||
| Function | Description | Example |
|
||||
| ---------------------------------------------------------- | ------------------------------------------------------------------- | --------------------------------------------------------- |
|
||||
| `strings_ToUpper` | Convert string to uppercase | `{{ strings_ToUpper "hello" }}` → `HELLO` |
|
||||
| `strings_ToLower` | Convert string to lowercase | `{{ strings_ToLower "HELLO" }}` → `hello` |
|
||||
| `strings_RemoveSpaces` | Remove all spaces from string | `{{ strings_RemoveSpaces "hello world" }}` → `helloworld` |
|
||||
| `strings_Replace(s string, old string, new string, n int)` | Replace first `n` occurrences of `old` with `new`. Use `-1` for all | `{{ strings_Replace "hello" "l" "L" -1 }}` → `heLLo` |
|
||||
| `strings_ToDate(date string)` | Parse date string (YYYY-MM-DD format) | `{{ strings_ToDate "2024-01-15" }}` |
|
||||
| `strings_First(s string, n int)` | Get first `n` characters | `{{ strings_First "hello" 2 }}` → `he` |
|
||||
| `strings_Last(s string, n int)` | Get last `n` characters | `{{ strings_Last "hello" 2 }}` → `lo` |
|
||||
| `strings_Truncate(s string, n int)` | Truncate to `n` characters with ellipsis | `{{ strings_Truncate "hello world" 5 }}` → `hello...` |
|
||||
| `strings_TrimPrefix(s string, prefix string)` | Remove prefix from string | `{{ strings_TrimPrefix "hello" "he" }}` → `llo` |
|
||||
| `strings_TrimSuffix(s string, suffix string)` | Remove suffix from string | `{{ strings_TrimSuffix "hello" "lo" }}` → `hel` |
|
||||
| `strings_Join(sep string, values ...string)` | Join strings with separator | `{{ strings_Join "-" "a" "b" "c" }}` → `a-b-c` |
|
||||
|
||||
### Collection Functions
|
||||
|
||||
| Function | Description | Example |
|
||||
| ----------------------------- | --------------------------------------------- | -------------------------------------------- |
|
||||
| `dict_Str(pairs ...string)` | Create string dictionary from key-value pairs | `{{ dict_Str "key1" "val1" "key2" "val2" }}` |
|
||||
| `slice_Str(values ...string)` | Create string slice | `{{ slice_Str "a" "b" "c" }}` |
|
||||
| `slice_Int(values ...int)` | Create int slice | `{{ slice_Int 1 2 3 }}` |
|
||||
| `slice_Uint(values ...uint)` | Create uint slice | `{{ slice_Uint 1 2 3 }}` |
|
||||
|
||||
### Body Functions
|
||||
|
||||
| Function | Description | Example |
|
||||
| ----------------------------------------- | ------------------------------------------------------------------------ | -------------------------------------------------- |
|
||||
| `body_FormData(fields map[string]string)` | Create multipart form data. Automatically sets the `Content-Type` header | `{{ body_FormData (dict_Str "field1" "value1") }}` |
|
||||
|
||||
## Fake Data Functions
|
||||
|
||||
These functions are powered by [gofakeit](https://github.com/brianvoe/gofakeit) library.
|
||||
|
||||
### File
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ---------------------- | -------------- | -------------------- |
|
||||
| `fakeit_FileExtension` | File extension | `"nes"` |
|
||||
| `fakeit_FileMimeType` | MIME type | `"application/json"` |
|
||||
|
||||
### ID
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------- | --------------------------------- | ---------------------------------------- |
|
||||
| `fakeit_ID` | Generate random unique identifier | `"pfsfktb87rcmj6bqha2fz9"` |
|
||||
| `fakeit_UUID` | Generate UUID v4 | `"b4ddf623-4ea6-48e5-9292-541f028d1fdb"` |
|
||||
|
||||
### Product
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| --------------------------- | ------------------- | --------------------------------- |
|
||||
| `fakeit_ProductName` | Product name | `"olive copper monitor"` |
|
||||
| `fakeit_ProductDescription` | Product description | `"Backwards caused quarterly..."` |
|
||||
| `fakeit_ProductCategory` | Product category | `"clothing"` |
|
||||
| `fakeit_ProductFeature` | Product feature | `"ultra-lightweight"` |
|
||||
| `fakeit_ProductMaterial` | Product material | `"brass"` |
|
||||
| `fakeit_ProductUPC` | UPC code | `"012780949980"` |
|
||||
| `fakeit_ProductAudience` | Target audience | `["adults"]` |
|
||||
| `fakeit_ProductDimension` | Product dimension | `"medium"` |
|
||||
| `fakeit_ProductUseCase` | Use case | `"home"` |
|
||||
| `fakeit_ProductBenefit` | Product benefit | `"comfort"` |
|
||||
| `fakeit_ProductSuffix` | Product suffix | `"pro"` |
|
||||
| `fakeit_ProductISBN` | ISBN number | `"978-1-4028-9462-6"` |
|
||||
|
||||
### Person
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ----------------------- | ---------------------- | ------------------------ |
|
||||
| `fakeit_Name` | Full name | `"Markus Moen"` |
|
||||
| `fakeit_NamePrefix` | Name prefix | `"Mr."` |
|
||||
| `fakeit_NameSuffix` | Name suffix | `"Jr."` |
|
||||
| `fakeit_FirstName` | First name | `"Markus"` |
|
||||
| `fakeit_MiddleName` | Middle name | `"Belinda"` |
|
||||
| `fakeit_LastName` | Last name | `"Daniel"` |
|
||||
| `fakeit_Gender` | Gender | `"male"` |
|
||||
| `fakeit_Age` | Age | `40` |
|
||||
| `fakeit_Ethnicity` | Ethnicity | `"German"` |
|
||||
| `fakeit_SSN` | Social Security Number | `"296446360"` |
|
||||
| `fakeit_EIN` | Employer ID Number | `"12-3456789"` |
|
||||
| `fakeit_Hobby` | Hobby | `"Swimming"` |
|
||||
| `fakeit_Email` | Email address | `"markusmoen@pagac.net"` |
|
||||
| `fakeit_Phone` | Phone number | `"6136459948"` |
|
||||
| `fakeit_PhoneFormatted` | Formatted phone | `"136-459-9489"` |
|
||||
|
||||
### Generate
|
||||
|
||||
| Function | Description | Example |
|
||||
| ------------------------------ | -------------------------------------- | ------------------------------------------------------ |
|
||||
| `fakeit_Regex(pattern string)` | Generate string matching regex pattern | `{{ fakeit_Regex "[a-z]{5}[0-9]{3}" }}` → `"abcde123"` |
|
||||
|
||||
### Auth
|
||||
|
||||
| Function | Description | Example |
|
||||
| --------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | ----------------------------------------------------- |
|
||||
| `fakeit_Username` | Username | `"Daniel1364"` |
|
||||
| `fakeit_Password(upper bool, lower bool, numeric bool, special bool, space bool, length int)` | Generate password with specified character types and length | `{{ fakeit_Password true true true false false 16 }}` |
|
||||
|
||||
### Address
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| --------------------------------------------------- | ---------------------------- | --------------------------------------------------- |
|
||||
| `fakeit_City` | City name | `"Marcelside"` |
|
||||
| `fakeit_Country` | Country name | `"United States of America"` |
|
||||
| `fakeit_CountryAbr` | Country abbreviation | `"US"` |
|
||||
| `fakeit_State` | State name | `"Illinois"` |
|
||||
| `fakeit_StateAbr` | State abbreviation | `"IL"` |
|
||||
| `fakeit_Street` | Full street | `"364 East Rapidsborough"` |
|
||||
| `fakeit_StreetName` | Street name | `"View"` |
|
||||
| `fakeit_StreetNumber` | Street number | `"13645"` |
|
||||
| `fakeit_StreetPrefix` | Street prefix | `"East"` |
|
||||
| `fakeit_StreetSuffix` | Street suffix | `"Ave"` |
|
||||
| `fakeit_Unit` | Unit | `"Apt 123"` |
|
||||
| `fakeit_Zip` | ZIP code | `"13645"` |
|
||||
| `fakeit_Latitude` | Random latitude | `-73.534056` |
|
||||
| `fakeit_Longitude` | Random longitude | `-147.068112` |
|
||||
| `fakeit_LatitudeInRange(min float64, max float64)` | Latitude in specified range | `{{ fakeit_LatitudeInRange 0 90 }}` → `22.921026` |
|
||||
| `fakeit_LongitudeInRange(min float64, max float64)` | Longitude in specified range | `{{ fakeit_LongitudeInRange 0 180 }}` → `-8.170450` |
|
||||
|
||||
### Game
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ----------------- | ----------- | ------------------- |
|
||||
| `fakeit_Gamertag` | Gamer tag | `"footinterpret63"` |
|
||||
|
||||
### Beer
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| -------------------- | --------------- | ----------------------------- |
|
||||
| `fakeit_BeerAlcohol` | Alcohol content | `"2.7%"` |
|
||||
| `fakeit_BeerBlg` | Blg | `"6.4°Blg"` |
|
||||
| `fakeit_BeerHop` | Hop | `"Glacier"` |
|
||||
| `fakeit_BeerIbu` | IBU | `"29 IBU"` |
|
||||
| `fakeit_BeerMalt` | Malt | `"Munich"` |
|
||||
| `fakeit_BeerName` | Beer name | `"Duvel"` |
|
||||
| `fakeit_BeerStyle` | Beer style | `"European Amber Lager"` |
|
||||
| `fakeit_BeerYeast` | Yeast | `"1388 - Belgian Strong Ale"` |
|
||||
|
||||
### Car
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ---------------------------- | ------------ | ---------------------- |
|
||||
| `fakeit_CarMaker` | Car maker | `"Nissan"` |
|
||||
| `fakeit_CarModel` | Car model | `"Aveo"` |
|
||||
| `fakeit_CarType` | Car type | `"Passenger car mini"` |
|
||||
| `fakeit_CarFuelType` | Fuel type | `"CNG"` |
|
||||
| `fakeit_CarTransmissionType` | Transmission | `"Manual"` |
|
||||
|
||||
### Words
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ---------------------------------- | --------------------------- | ---------------- |
|
||||
| `fakeit_Word` | Random word | `"example"` |
|
||||
| `fakeit_Noun` | Random noun | `"computer"` |
|
||||
| `fakeit_NounCommon` | Common noun | `"table"` |
|
||||
| `fakeit_NounConcrete` | Concrete noun | `"chair"` |
|
||||
| `fakeit_NounAbstract` | Abstract noun | `"freedom"` |
|
||||
| `fakeit_NounCollectivePeople` | Collective noun (people) | `"team"` |
|
||||
| `fakeit_NounCollectiveAnimal` | Collective noun (animal) | `"herd"` |
|
||||
| `fakeit_NounCollectiveThing` | Collective noun (thing) | `"bunch"` |
|
||||
| `fakeit_NounCountable` | Countable noun | `"book"` |
|
||||
| `fakeit_NounUncountable` | Uncountable noun | `"water"` |
|
||||
| `fakeit_Verb` | Random verb | `"run"` |
|
||||
| `fakeit_VerbAction` | Action verb | `"jump"` |
|
||||
| `fakeit_VerbLinking` | Linking verb | `"is"` |
|
||||
| `fakeit_VerbHelping` | Helping verb | `"can"` |
|
||||
| `fakeit_Adverb` | Random adverb | `"quickly"` |
|
||||
| `fakeit_AdverbManner` | Manner adverb | `"carefully"` |
|
||||
| `fakeit_AdverbDegree` | Degree adverb | `"very"` |
|
||||
| `fakeit_AdverbPlace` | Place adverb | `"here"` |
|
||||
| `fakeit_AdverbTimeDefinite` | Definite time adverb | `"yesterday"` |
|
||||
| `fakeit_AdverbTimeIndefinite` | Indefinite time adverb | `"soon"` |
|
||||
| `fakeit_AdverbFrequencyDefinite` | Definite frequency adverb | `"daily"` |
|
||||
| `fakeit_AdverbFrequencyIndefinite` | Indefinite frequency adverb | `"often"` |
|
||||
| `fakeit_Preposition` | Random preposition | `"on"` |
|
||||
| `fakeit_PrepositionSimple` | Simple preposition | `"in"` |
|
||||
| `fakeit_PrepositionDouble` | Double preposition | `"out of"` |
|
||||
| `fakeit_PrepositionCompound` | Compound preposition | `"according to"` |
|
||||
| `fakeit_Adjective` | Random adjective | `"beautiful"` |
|
||||
| `fakeit_AdjectiveDescriptive` | Descriptive adjective | `"large"` |
|
||||
| `fakeit_AdjectiveQuantitative` | Quantitative adjective | `"many"` |
|
||||
| `fakeit_AdjectiveProper` | Proper adjective | `"American"` |
|
||||
| `fakeit_AdjectiveDemonstrative` | Demonstrative adjective | `"this"` |
|
||||
| `fakeit_AdjectivePossessive` | Possessive adjective | `"my"` |
|
||||
| `fakeit_AdjectiveInterrogative` | Interrogative adjective | `"which"` |
|
||||
| `fakeit_AdjectiveIndefinite` | Indefinite adjective | `"some"` |
|
||||
| `fakeit_Pronoun` | Random pronoun | `"he"` |
|
||||
| `fakeit_PronounPersonal` | Personal pronoun | `"I"` |
|
||||
| `fakeit_PronounObject` | Object pronoun | `"him"` |
|
||||
| `fakeit_PronounPossessive` | Possessive pronoun | `"mine"` |
|
||||
| `fakeit_PronounReflective` | Reflective pronoun | `"myself"` |
|
||||
| `fakeit_PronounDemonstrative` | Demonstrative pronoun | `"that"` |
|
||||
| `fakeit_PronounInterrogative` | Interrogative pronoun | `"who"` |
|
||||
| `fakeit_PronounRelative` | Relative pronoun | `"which"` |
|
||||
| `fakeit_Connective` | Random connective | `"however"` |
|
||||
| `fakeit_ConnectiveTime` | Time connective | `"then"` |
|
||||
| `fakeit_ConnectiveComparative` | Comparative connective | `"similarly"` |
|
||||
| `fakeit_ConnectiveComplaint` | Complaint connective | `"although"` |
|
||||
| `fakeit_ConnectiveListing` | Listing connective | `"firstly"` |
|
||||
| `fakeit_ConnectiveCasual` | Casual connective | `"because"` |
|
||||
| `fakeit_ConnectiveExamplify` | Examplify connective | `"for example"` |
|
||||
|
||||
### Text
|
||||
|
||||
| Function | Description | Example |
|
||||
| ---------------------------------------------------------------------------------------- | ----------------------------------------------- | --------------------------------------------- |
|
||||
| `fakeit_Sentence` | Random sentence | `{{ fakeit_Sentence }}` |
|
||||
| `fakeit_Paragraph` | Random paragraph | `{{ fakeit_Paragraph }}` |
|
||||
| `fakeit_LoremIpsumWord` | Lorem ipsum word | `"lorem"` |
|
||||
| `fakeit_LoremIpsumSentence(wordCount int)` | Lorem ipsum sentence with specified word count | `{{ fakeit_LoremIpsumSentence 5 }}` |
|
||||
| `fakeit_LoremIpsumParagraph(paragraphs int, sentences int, words int, separator string)` | Lorem ipsum paragraphs with specified structure | `{{ fakeit_LoremIpsumParagraph 1 3 5 "\n" }}` |
|
||||
| `fakeit_Question` | Random question | `"What is your name?"` |
|
||||
| `fakeit_Quote` | Random quote | `"Life is what happens..."` |
|
||||
| `fakeit_Phrase` | Random phrase | `"a piece of cake"` |
|
||||
|
||||
### Foods
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------ | -------------- | ---------------------------------------- |
|
||||
| `fakeit_Fruit` | Fruit | `"Peach"` |
|
||||
| `fakeit_Vegetable` | Vegetable | `"Amaranth Leaves"` |
|
||||
| `fakeit_Breakfast` | Breakfast food | `"Blueberry banana happy face pancakes"` |
|
||||
| `fakeit_Lunch` | Lunch food | `"No bake hersheys bar pie"` |
|
||||
| `fakeit_Dinner` | Dinner food | `"Wild addicting dip"` |
|
||||
| `fakeit_Snack` | Snack | `"Trail mix"` |
|
||||
| `fakeit_Dessert` | Dessert | `"French napoleons"` |
|
||||
|
||||
### Misc
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------ | -------------- | -------------- |
|
||||
| `fakeit_Bool` | Random boolean | `true` |
|
||||
| `fakeit_FlipACoin` | Flip a coin | `"Heads"` |
|
||||
|
||||
### Color
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------- | ------------------ | --------------------------------------------------------- |
|
||||
| `fakeit_Color` | Color name | `"MediumOrchid"` |
|
||||
| `fakeit_HexColor` | Hex color | `"#a99fb4"` |
|
||||
| `fakeit_RGBColor` | RGB color | `[85, 224, 195]` |
|
||||
| `fakeit_SafeColor` | Safe color | `"black"` |
|
||||
| `fakeit_NiceColors` | Nice color palette | `["#cfffdd", "#b4dec1", "#5c5863", "#a85163", "#ff1f4c"]` |
|
||||
|
||||
### Image
|
||||
|
||||
| Function | Description | Example |
|
||||
| ----------------------------------------- | ------------------------- | -------------------------------- |
|
||||
| `fakeit_ImageJpeg(width int, height int)` | Generate JPEG image bytes | `{{ fakeit_ImageJpeg 100 100 }}` |
|
||||
| `fakeit_ImagePng(width int, height int)` | Generate PNG image bytes | `{{ fakeit_ImagePng 100 100 }}` |
|
||||
|
||||
### Internet
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| --------------------------------- | ------------------------------------------ | ----------------------------------------------------- |
|
||||
| `fakeit_URL` | Random URL | `"http://www.principalproductize.biz/target"` |
|
||||
| `fakeit_UrlSlug(words int)` | URL slug with specified word count | `{{ fakeit_UrlSlug 3 }}` → `"bathe-regularly-quiver"` |
|
||||
| `fakeit_DomainName` | Domain name | `"centraltarget.biz"` |
|
||||
| `fakeit_DomainSuffix` | Domain suffix | `"org"` |
|
||||
| `fakeit_IPv4Address` | IPv4 address | `"222.83.191.222"` |
|
||||
| `fakeit_IPv6Address` | IPv6 address | `"2001:cafe:8898:ee17:bc35:9064:5866:d019"` |
|
||||
| `fakeit_MacAddress` | MAC address | `"cb:ce:06:94:22:e9"` |
|
||||
| `fakeit_HTTPStatusCode` | HTTP status code | `200` |
|
||||
| `fakeit_HTTPStatusCodeSimple` | Simple status code | `404` |
|
||||
| `fakeit_LogLevel(logType string)` | Log level (types: general, syslog, apache) | `{{ fakeit_LogLevel "general" }}` → `"error"` |
|
||||
| `fakeit_HTTPMethod` | HTTP method | `"HEAD"` |
|
||||
| `fakeit_HTTPVersion` | HTTP version | `"HTTP/1.1"` |
|
||||
| `fakeit_UserAgent` | Random User-Agent | `"Mozilla/5.0..."` |
|
||||
| `fakeit_ChromeUserAgent` | Chrome User-Agent | `"Mozilla/5.0 (X11; Linux i686)..."` |
|
||||
| `fakeit_FirefoxUserAgent` | Firefox User-Agent | `"Mozilla/5.0 (Macintosh; U;..."` |
|
||||
| `fakeit_OperaUserAgent` | Opera User-Agent | `"Opera/8.39..."` |
|
||||
| `fakeit_SafariUserAgent` | Safari User-Agent | `"Mozilla/5.0 (iPad;..."` |
|
||||
| `fakeit_APIUserAgent` | API User-Agent | `"curl/8.2.5"` |
|
||||
|
||||
### HTML
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------ | --------------- | ------------------ |
|
||||
| `fakeit_InputName` | HTML input name | `"email"` |
|
||||
| `fakeit_Svg` | SVG image | `"<svg>...</svg>"` |
|
||||
|
||||
### Date/Time
|
||||
|
||||
| Function | Description | Example |
|
||||
| -------------------------------------------------- | --------------------------------- | ------------------------------------------------------------------------------------ |
|
||||
| `fakeit_Date` | Random date | `2023-06-15 14:30:00` |
|
||||
| `fakeit_PastDate` | Past date | `2022-03-10 09:15:00` |
|
||||
| `fakeit_FutureDate` | Future date | `2025-12-20 18:45:00` |
|
||||
| `fakeit_DateRange(start time.Time, end time.Time)` | Random date between start and end | `{{ fakeit_DateRange (strings_ToDate "2020-01-01") (strings_ToDate "2025-12-31") }}` |
|
||||
| `fakeit_NanoSecond` | Nanosecond | `123456789` |
|
||||
| `fakeit_Second` | Second (0-59) | `45` |
|
||||
| `fakeit_Minute` | Minute (0-59) | `30` |
|
||||
| `fakeit_Hour` | Hour (0-23) | `14` |
|
||||
| `fakeit_Month` | Month (1-12) | `6` |
|
||||
| `fakeit_MonthString` | Month name | `"June"` |
|
||||
| `fakeit_Day` | Day (1-31) | `15` |
|
||||
| `fakeit_WeekDay` | Weekday | `"Monday"` |
|
||||
| `fakeit_Year` | Year | `2024` |
|
||||
| `fakeit_TimeZone` | Timezone | `"America/New_York"` |
|
||||
| `fakeit_TimeZoneAbv` | Timezone abbreviation | `"EST"` |
|
||||
| `fakeit_TimeZoneFull` | Full timezone | `"Eastern Standard Time"` |
|
||||
| `fakeit_TimeZoneOffset` | Timezone offset | `-5` |
|
||||
| `fakeit_TimeZoneRegion` | Timezone region | `"America"` |
|
||||
|
||||
### Payment
|
||||
|
||||
| Function | Description | Example |
|
||||
| ---------------------------------------- | ----------------------------------------------------- | -------------------------------------------------------------- |
|
||||
| `fakeit_Price(min float64, max float64)` | Random price in range | `{{ fakeit_Price 1 100 }}` → `92.26` |
|
||||
| `fakeit_CreditCardCvv` | CVV | `"513"` |
|
||||
| `fakeit_CreditCardExp` | Expiration date | `"01/27"` |
|
||||
| `fakeit_CreditCardNumber(gaps bool)` | Credit card number. `gaps`: add spaces between groups | `{{ fakeit_CreditCardNumber true }}` → `"4111 1111 1111 1111"` |
|
||||
| `fakeit_CreditCardType` | Card type | `"Visa"` |
|
||||
| `fakeit_CurrencyLong` | Currency name | `"United States Dollar"` |
|
||||
| `fakeit_CurrencyShort` | Currency code | `"USD"` |
|
||||
| `fakeit_AchRouting` | ACH routing number | `"513715684"` |
|
||||
| `fakeit_AchAccount` | ACH account number | `"491527954328"` |
|
||||
| `fakeit_BitcoinAddress` | Bitcoin address | `"1BoatSLRHtKNngkdXEeobR76b53LETtpyT"` |
|
||||
| `fakeit_BitcoinPrivateKey` | Bitcoin private key | `"5HueCGU8rMjxEXxiPuD5BDuG6o5xjA7QkbPp"` |
|
||||
| `fakeit_BankName` | Bank name | `"Wells Fargo"` |
|
||||
| `fakeit_BankType` | Bank type | `"Investment Bank"` |
|
||||
|
||||
### Finance
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| -------------- | ---------------- | ---------------- |
|
||||
| `fakeit_Cusip` | CUSIP identifier | `"38259P508"` |
|
||||
| `fakeit_Isin` | ISIN identifier | `"US38259P5089"` |
|
||||
|
||||
### Company
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ---------------------- | -------------- | ------------------------------------------ |
|
||||
| `fakeit_BS` | Business speak | `"front-end"` |
|
||||
| `fakeit_Blurb` | Company blurb | `"word"` |
|
||||
| `fakeit_BuzzWord` | Buzzword | `"disintermediate"` |
|
||||
| `fakeit_Company` | Company name | `"Moen, Pagac and Wuckert"` |
|
||||
| `fakeit_CompanySuffix` | Company suffix | `"Inc"` |
|
||||
| `fakeit_JobDescriptor` | Job descriptor | `"Central"` |
|
||||
| `fakeit_JobLevel` | Job level | `"Assurance"` |
|
||||
| `fakeit_JobTitle` | Job title | `"Director"` |
|
||||
| `fakeit_Slogan` | Company slogan | `"Universal seamless Focus, interactive."` |
|
||||
|
||||
### Hacker
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| --------------------------- | ------------------- | --------------------------------------------------------------------------------------------- |
|
||||
| `fakeit_HackerAbbreviation` | Hacker abbreviation | `"ADP"` |
|
||||
| `fakeit_HackerAdjective` | Hacker adjective | `"wireless"` |
|
||||
| `fakeit_HackeringVerb` | Hackering verb | `"connecting"` |
|
||||
| `fakeit_HackerNoun` | Hacker noun | `"driver"` |
|
||||
| `fakeit_HackerPhrase` | Hacker phrase | `"If we calculate the program, we can get to the AI pixel through the redundant XSS matrix!"` |
|
||||
| `fakeit_HackerVerb` | Hacker verb | `"synthesize"` |
|
||||
|
||||
### Hipster
|
||||
|
||||
| Function | Description | Example |
|
||||
| ------------------------- | ----------------- | ------------------------------------------------------------------- |
|
||||
| `fakeit_HipsterWord` | Hipster word | `"microdosing"` |
|
||||
| `fakeit_HipsterSentence` | Hipster sentence | `"Soul loops with you probably haven't heard of them undertones."` |
|
||||
| `fakeit_HipsterParagraph` | Hipster paragraph | `"Single-origin austin, double why. Tag it Yuccie, keep it any..."` |
|
||||
|
||||
### App
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------- | ----------- | --------------------- |
|
||||
| `fakeit_AppName` | App name | `"Parkrespond"` |
|
||||
| `fakeit_AppVersion` | App version | `"1.12.14"` |
|
||||
| `fakeit_AppAuthor` | App author | `"Qado Energy, Inc."` |
|
||||
|
||||
### Animal
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------- | ----------- | ------------------- |
|
||||
| `fakeit_PetName` | Pet name | `"Ozzy Pawsborne"` |
|
||||
| `fakeit_Animal` | Animal | `"elk"` |
|
||||
| `fakeit_AnimalType` | Animal type | `"amphibians"` |
|
||||
| `fakeit_FarmAnimal` | Farm animal | `"Chicken"` |
|
||||
| `fakeit_Cat` | Cat breed | `"Chausie"` |
|
||||
| `fakeit_Dog` | Dog breed | `"Norwich Terrier"` |
|
||||
| `fakeit_Bird` | Bird | `"goose"` |
|
||||
|
||||
### Emoji
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------------- | ---------------------------------------------- | ------------------------------------------------------ |
|
||||
| `fakeit_Emoji` | Random emoji | `"🤣"` |
|
||||
| `fakeit_EmojiCategory` | Emoji category | `"Smileys & Emotion"` |
|
||||
| `fakeit_EmojiAlias` | Emoji alias | `"smile"` |
|
||||
| `fakeit_EmojiTag` | Emoji tag | `"happy"` |
|
||||
| `fakeit_EmojiFlag` | Flag emoji | `"🇺🇸"` |
|
||||
| `fakeit_EmojiAnimal` | Animal emoji | `"🐱"` |
|
||||
| `fakeit_EmojiFood` | Food emoji | `"🍕"` |
|
||||
| `fakeit_EmojiPlant` | Plant emoji | `"🌸"` |
|
||||
| `fakeit_EmojiMusic` | Music emoji | `"🎵"` |
|
||||
| `fakeit_EmojiVehicle` | Vehicle emoji | `"🚗"` |
|
||||
| `fakeit_EmojiSport` | Sport emoji | `"⚽"` |
|
||||
| `fakeit_EmojiFace` | Face emoji | `"😊"` |
|
||||
| `fakeit_EmojiHand` | Hand emoji | `"👋"` |
|
||||
| `fakeit_EmojiClothing` | Clothing emoji | `"👕"` |
|
||||
| `fakeit_EmojiLandmark` | Landmark emoji | `"🗽"` |
|
||||
| `fakeit_EmojiElectronics` | Electronics emoji | `"📱"` |
|
||||
| `fakeit_EmojiGame` | Game emoji | `"🎮"` |
|
||||
| `fakeit_EmojiTools` | Tools emoji | `"🔧"` |
|
||||
| `fakeit_EmojiWeather` | Weather emoji | `"☀️"` |
|
||||
| `fakeit_EmojiJob` | Job emoji | `"👨💻"` |
|
||||
| `fakeit_EmojiPerson` | Person emoji | `"👤"` |
|
||||
| `fakeit_EmojiGesture` | Gesture emoji | `"🙌"` |
|
||||
| `fakeit_EmojiCostume` | Costume emoji | `"🎃"` |
|
||||
| `fakeit_EmojiSentence` | Emoji sentence with random emojis interspersed | `"Weekends reserve time for 🖼️ Disc 🏨 golf and day."` |
|
||||
|
||||
### Language
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ----------------------------- | --------------------- | -------------- |
|
||||
| `fakeit_Language` | Language | `"English"` |
|
||||
| `fakeit_LanguageAbbreviation` | Language abbreviation | `"en"` |
|
||||
| `fakeit_ProgrammingLanguage` | Programming language | `"Go"` |
|
||||
|
||||
### Number
|
||||
|
||||
| Function | Description | Example |
|
||||
| ----------------------------------------------- | ----------------------------------- | ------------------------------------------ |
|
||||
| `fakeit_Number(min int, max int)` | Random number in range | `{{ fakeit_Number 1 100 }}` → `42` |
|
||||
| `fakeit_Int` | Random int | `{{ fakeit_Int }}` |
|
||||
| `fakeit_IntN(n int)` | Random int from 0 to n | `{{ fakeit_IntN 100 }}` |
|
||||
| `fakeit_Int8` | Random int8 | `{{ fakeit_Int8 }}` |
|
||||
| `fakeit_Int16` | Random int16 | `{{ fakeit_Int16 }}` |
|
||||
| `fakeit_Int32` | Random int32 | `{{ fakeit_Int32 }}` |
|
||||
| `fakeit_Int64` | Random int64 | `{{ fakeit_Int64 }}` |
|
||||
| `fakeit_Uint` | Random uint | `{{ fakeit_Uint }}` |
|
||||
| `fakeit_UintN(n uint)` | Random uint from 0 to n | `{{ fakeit_UintN 100 }}` |
|
||||
| `fakeit_Uint8` | Random uint8 | `{{ fakeit_Uint8 }}` |
|
||||
| `fakeit_Uint16` | Random uint16 | `{{ fakeit_Uint16 }}` |
|
||||
| `fakeit_Uint32` | Random uint32 | `{{ fakeit_Uint32 }}` |
|
||||
| `fakeit_Uint64` | Random uint64 | `{{ fakeit_Uint64 }}` |
|
||||
| `fakeit_Float32` | Random float32 | `{{ fakeit_Float32 }}` |
|
||||
| `fakeit_Float32Range(min float32, max float32)` | Random float32 in range | `{{ fakeit_Float32Range 0 100 }}` |
|
||||
| `fakeit_Float64` | Random float64 | `{{ fakeit_Float64 }}` |
|
||||
| `fakeit_Float64Range(min float64, max float64)` | Random float64 in range | `{{ fakeit_Float64Range 0 100 }}` |
|
||||
| `fakeit_RandomInt(slice []int)` | Random int from slice | `{{ fakeit_RandomInt (slice_Int 1 2 3) }}` |
|
||||
| `fakeit_HexUint(bits int)` | Random hex uint with specified bits | `{{ fakeit_HexUint 8 }}` → `"0xff"` |
|
||||
|
||||
### String
|
||||
|
||||
| Function | Description | Example |
|
||||
| ------------------------------------- | ------------------------------- | --------------------------------------------------------------- |
|
||||
| `fakeit_Digit` | Single random digit | `"0"` |
|
||||
| `fakeit_DigitN(n uint)` | Generate `n` random digits | `{{ fakeit_DigitN 5 }}` → `"0136459948"` |
|
||||
| `fakeit_Letter` | Single random letter | `"g"` |
|
||||
| `fakeit_LetterN(n uint)` | Generate `n` random letters | `{{ fakeit_LetterN 10 }}` → `"gbRMaRxHki"` |
|
||||
| `fakeit_Lexify(pattern string)` | Replace `?` with random letters | `{{ fakeit_Lexify "?????@??????.com" }}` → `"billy@mister.com"` |
|
||||
| `fakeit_Numerify(pattern string)` | Replace `#` with random digits | `{{ fakeit_Numerify "(###)###-####" }}` → `"(555)867-5309"` |
|
||||
| `fakeit_RandomString(slice []string)` | Random string from slice | `{{ fakeit_RandomString (slice_Str "a" "b" "c") }}` |
|
||||
|
||||
### Celebrity
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| -------------------------- | ------------------ | ------------------ |
|
||||
| `fakeit_CelebrityActor` | Celebrity actor | `"Brad Pitt"` |
|
||||
| `fakeit_CelebrityBusiness` | Celebrity business | `"Elon Musk"` |
|
||||
| `fakeit_CelebritySport` | Celebrity sport | `"Michael Phelps"` |
|
||||
|
||||
### Minecraft
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| --------------------------------- | ----------------- | ---------------- |
|
||||
| `fakeit_MinecraftOre` | Minecraft ore | `"coal"` |
|
||||
| `fakeit_MinecraftWood` | Minecraft wood | `"oak"` |
|
||||
| `fakeit_MinecraftArmorTier` | Armor tier | `"iron"` |
|
||||
| `fakeit_MinecraftArmorPart` | Armor part | `"helmet"` |
|
||||
| `fakeit_MinecraftWeapon` | Minecraft weapon | `"bow"` |
|
||||
| `fakeit_MinecraftTool` | Minecraft tool | `"shovel"` |
|
||||
| `fakeit_MinecraftDye` | Minecraft dye | `"white"` |
|
||||
| `fakeit_MinecraftFood` | Minecraft food | `"apple"` |
|
||||
| `fakeit_MinecraftAnimal` | Minecraft animal | `"chicken"` |
|
||||
| `fakeit_MinecraftVillagerJob` | Villager job | `"farmer"` |
|
||||
| `fakeit_MinecraftVillagerStation` | Villager station | `"furnace"` |
|
||||
| `fakeit_MinecraftVillagerLevel` | Villager level | `"master"` |
|
||||
| `fakeit_MinecraftMobPassive` | Passive mob | `"cow"` |
|
||||
| `fakeit_MinecraftMobNeutral` | Neutral mob | `"bee"` |
|
||||
| `fakeit_MinecraftMobHostile` | Hostile mob | `"spider"` |
|
||||
| `fakeit_MinecraftMobBoss` | Boss mob | `"ender dragon"` |
|
||||
| `fakeit_MinecraftBiome` | Minecraft biome | `"forest"` |
|
||||
| `fakeit_MinecraftWeather` | Minecraft weather | `"rain"` |
|
||||
|
||||
### Book
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------- | ----------- | -------------- |
|
||||
| `fakeit_BookTitle` | Book title | `"Hamlet"` |
|
||||
| `fakeit_BookAuthor` | Book author | `"Mark Twain"` |
|
||||
| `fakeit_BookGenre` | Book genre | `"Adventure"` |
|
||||
|
||||
### Movie
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------- | ----------- | -------------- |
|
||||
| `fakeit_MovieName` | Movie name | `"Inception"` |
|
||||
| `fakeit_MovieGenre` | Movie genre | `"Sci-Fi"` |
|
||||
|
||||
### Error
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------------ | ----------------- | ---------------------------------- |
|
||||
| `fakeit_Error` | Random error | `"connection refused"` |
|
||||
| `fakeit_ErrorDatabase` | Database error | `"database connection failed"` |
|
||||
| `fakeit_ErrorGRPC` | gRPC error | `"rpc error: code = Unavailable"` |
|
||||
| `fakeit_ErrorHTTP` | HTTP error | `"HTTP 500 Internal Server Error"` |
|
||||
| `fakeit_ErrorHTTPClient` | HTTP client error | `"HTTP 404 Not Found"` |
|
||||
| `fakeit_ErrorHTTPServer` | HTTP server error | `"HTTP 503 Service Unavailable"` |
|
||||
| `fakeit_ErrorRuntime` | Runtime error | `"panic: runtime error"` |
|
||||
|
||||
### School
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| --------------- | ----------- | ---------------------- |
|
||||
| `fakeit_School` | School name | `"Harvard University"` |
|
||||
|
||||
### Song
|
||||
|
||||
| Function | Description | Example Output |
|
||||
| ------------------- | ----------- | --------------------- |
|
||||
| `fakeit_SongName` | Song name | `"Bohemian Rhapsody"` |
|
||||
| `fakeit_SongArtist` | Song artist | `"Queen"` |
|
||||
| `fakeit_SongGenre` | Song genre | `"Rock"` |
|
||||
Reference in New Issue
Block a user