# Steps vs Step Extensions
A `@step` is _just_ a function that has implicit access to the `context` inside a `@script`.
A `@step_extension` is a `@step` that is added as a type extension method onto some other type.
## Understanding `@step_extension`
The intent of type extensions is to add methods to a type. We use this in `@step_extension` to enable syntax like:
```python
@scripted_test
def some_test():
When.http.my_thing() # this is a custom "http" step
```
## How to extend the `http` steps for your tests
Define a `test_steps.py` module.
```python
from safetydance_django.steps import (
http_client,
http_response,
)
from safetydance_django.test import Http
from safetydance_test.step_extension import step_extension
@step_extension(target_type=Http)
def my_thing():
...
assert http_response.status_code == 200 # example, you can just use it
...
```
This should enable you to use it in your tests
```python
@scripted_test
def test_some_thing():
...
When.http.my_thing()
...
```