# alje001/allure-specflow architecture

> Architecture diagram of the GitHub repository alje001/allure-specflow, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/alje001/allure-specflow
- Repository: https://github.com/alje001/allure-specflow

## Overview

This deprecated SpecFlow runtime plugin translates feature, scenario, step, hook-failure, and attachment events into Allure results. SpecFlow’s runtime is the initiating actor: plugin registration replaces its binding invoker, tracer, and execution engine; those components and plugin hooks report lifecycle events through the adapter to Allure Commons. Attachments are added to scenario context through an extension and emitted when a test case finishes. The runtime and Allure Commons are external dependencies; their internal behavior is not represented here.

Main entry points: [`SpecFlow.Allure/AllureAdapter.cs`](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureAdapter.cs) (Allure adapter), [`SpecFlow.Allure/AllurePlugin.cs`](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllurePlugin.cs) (Runtime plugin), [`SpecFlow.Allure/AllureBindingInvoker.cs`](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureBindingInvoker.cs) (Binding invoker), [`SpecFlow.Allure/AllureTestExecutionEngine.cs`](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureTestExecutionEngine.cs) (Execution engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_registration["Plugin registration"]
  node_plugin["Runtime plugin<br/>[AllurePlugin.cs]"]
end

subgraph group_execution["SpecFlow execution"]
  node_invoker["Binding invoker"]
  node_engine["Execution engine"]
  node_tracer["Step tracer"]
  node_hooks["Lifecycle hooks"]
  node_extensions["Attachment extension"]
end

subgraph group_reporting["Allure reporting"]
  node_config["Plugin configuration<br/>[Config.cs]"]
  node_adapter["Allure adapter<br/>[AllureAdapter.cs]"]
end

node_specflow(("SpecFlow runtime"))
node_context["Scenario context"]
node_allure["Allure Commons"]

node_plugin -->|"registers invoker"| node_invoker
node_plugin -->|"registers tracer"| node_tracer
node_plugin -->|"registers engine"| node_engine
node_specflow -.->|"loads plugin"| node_plugin
node_specflow -.->|"runs hooks"| node_hooks
node_specflow -.->|"invokes bindings"| node_invoker
node_specflow -.->|"traces steps"| node_tracer
node_specflow -.->|"executes scenarios"| node_engine
node_invoker -->|"reports hook outcomes"| node_adapter
node_engine -->|"marks pending cases"| node_adapter
node_tracer -->|"reports step status"| node_adapter
node_hooks -->|"reports case lifecycle"| node_adapter
node_extensions -->|"stores attachment"| node_context
node_adapter -->|"reads attachments"| node_context
node_adapter -->|"reads results path"| node_config
node_adapter -->|"fires result events"| node_allure

click node_plugin "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllurePlugin.cs"
click node_invoker "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureBindingInvoker.cs"
click node_engine "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureTestExecutionEngine.cs"
click node_tracer "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureTestTracer.cs"
click node_hooks "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllurePluginHooks.cs"
click node_extensions "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/SpecFlowExtensions.cs"
click node_config "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/Config.cs"
click node_adapter "https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureAdapter.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plugin toneBlue
class node_invoker,node_engine,node_tracer,node_hooks,node_extensions toneAmber
class node_config,node_adapter toneMint
class node_specflow,node_context,node_allure toneIndigo
```

## Components

### Plugin registration

- [Runtime plugin](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllurePlugin.cs): `SpecFlow.Allure/AllurePlugin.cs`

### SpecFlow execution

- [Binding invoker](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureBindingInvoker.cs): `SpecFlow.Allure/AllureBindingInvoker.cs`
- [Execution engine](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureTestExecutionEngine.cs): `SpecFlow.Allure/AllureTestExecutionEngine.cs`
- [Step tracer](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureTestTracer.cs): `SpecFlow.Allure/AllureTestTracer.cs`
- [Lifecycle hooks](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllurePluginHooks.cs): `SpecFlow.Allure/AllurePluginHooks.cs`
- [Attachment extension](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/SpecFlowExtensions.cs): `SpecFlow.Allure/SpecFlowExtensions.cs`

### Allure reporting

- [Plugin configuration](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/Config.cs): `SpecFlow.Allure/Config.cs`
- [Allure adapter](https://github.com/alje001/allure-specflow/blob/master/SpecFlow.Allure/AllureAdapter.cs): `SpecFlow.Allure/AllureAdapter.cs`

### Other components

- **SpecFlow runtime**
- **Scenario context**
- **Allure Commons**

## Connections

- Runtime plugin → Binding invoker: registers invoker (evidence: `SpecFlow.Allure/AllurePlugin.cs`)
- Runtime plugin → Step tracer: registers tracer (evidence: `SpecFlow.Allure/AllurePlugin.cs`)
- Runtime plugin → Execution engine: registers engine (evidence: `SpecFlow.Allure/AllurePlugin.cs`)
- SpecFlow runtime → Runtime plugin: loads plugin
- SpecFlow runtime → Lifecycle hooks: runs hooks
- SpecFlow runtime → Binding invoker: invokes bindings
- SpecFlow runtime → Step tracer: traces steps
- SpecFlow runtime → Execution engine: executes scenarios
- Binding invoker → Allure adapter: reports hook outcomes (evidence: `SpecFlow.Allure/AllureBindingInvoker.cs`)
- Execution engine → Allure adapter: marks pending cases (evidence: `SpecFlow.Allure/AllureTestExecutionEngine.cs`)
- Step tracer → Allure adapter: reports step status (evidence: `SpecFlow.Allure/AllureTestTracer.cs`)
- Lifecycle hooks → Allure adapter: reports case lifecycle (evidence: `SpecFlow.Allure/AllurePluginHooks.cs`)
- Attachment extension → Scenario context: stores attachment (evidence: `SpecFlow.Allure/SpecFlowExtensions.cs`)
- Allure adapter → Scenario context: reads attachments (evidence: `SpecFlow.Allure/AllureAdapter.cs`)
- Allure adapter → Plugin configuration: reads results path (evidence: `SpecFlow.Allure/AllureAdapter.cs`)
- Allure adapter → Allure Commons: fires result events (evidence: `SpecFlow.Allure/AllureAdapter.cs`)
