grpctestify 1.8.6

gRPC testing utility written in Rust
Documentation
# Attributes

Per-section execution modifiers using `#[name(value)]` syntax.

## When to use

- Skip a section during execution (`#[skip]`)
- Set per-section timeout (`#[timeout(10)]`)
- Retry a section on failure (`#[retry(3)]`)
- Override display name in reports (`#[name(Login flow)]`)

## Syntax

Attributes are placed on a separate line immediately before a section header:

```gctf
#[skip]
--- REQUEST ---
{
  "user_id": "123"
}
```

Multiple attributes can be applied to one section:

```gctf
#[timeout(10)]
#[retry(2)]
--- REQUEST ---
{
  "query": "slow search"
}
```

## Supported attributes

| Attribute | Value | Description |
| --------- | ----- | ----------- |
| `#[skip]` | flag (or `#[skip(true)]`) | Skip this section during execution |
| `#[timeout(N)]` | seconds | Per-section timeout for gRPC request |
| `#[retry(N)]` | count | Retry section on failure with 100ms × attempt delay |
| `#[name(...)]` | string | Display name for this section in reports |

## Inheritance

Attributes inherit between sections. A child section can override a parent's attribute:

```gctf
#[timeout(30)]
--- REQUEST ---
{
  "user_id": "1"
}

--- RESPONSE ---
{
  "id": "1"
}

#[timeout(5)]
--- REQUEST ---
{
  "user_id": "2"
}
```

In this example:

- First `REQUEST` inherits `timeout(30)`
- Second `REQUEST` overrides with `timeout(5)`

## Skip behavior

`#[skip]` is a boolean flag. Both forms are equivalent:

```gctf
#[skip]
--- REQUEST ---
{}
```

```gctf
#[skip(true)]
--- REQUEST ---
{}
```

A skipped section is ignored during execution. The test continues with subsequent sections.

## Examples

### Retry flaky assertions

```gctf
--- ENDPOINT ---
user.UserService/GetUser

#[retry(3)]
--- REQUEST ---
{
  "user_id": "123"
}

--- ASSERTS ---
.status == "active"
```

### Timeout for slow endpoints

```gctf
--- ENDPOINT ---
search.SearchService/Search

#[timeout(60)]
--- REQUEST ---
{
  "query": "complex aggregation"
}
```

## Rules

- One attribute per line
- Attribute must appear on the line immediately before `--- SECTION ---`
- Attributes apply to the section that follows them
- Values are strings by default; numbers are parsed from the value
- Quoted strings are supported: `#[name("My Test")]`
- Runtime attribute naming follows snake_case (`#[retry_delay]`, `#[no_retry]`)

## Related

- [META]./meta — file-level metadata (tags, owner, summary)
- [OPTIONS]./options — global execution options
- Runtime precedence quick map:
  - `run`: section attributes > `OPTIONS` > CLI runtime baseline/defaults
  - `bench`: CLI bench flags > `BENCH` section > bench defaults
- [Report Formats]../api/report-formats