First Steps

Creating Your First Auto Test

After installing FireFly locally, you’re ready to write your first test 🚀
Just follow these four easy steps:


1. Create a Folder for Your Test

Create a folder in:

backend/src/modules/auto_test/tests

You can organize it by service name, team, test group — anything that helps with structure.
Nested folders are fully supported.

Example:

backend/src/modules/auto_test/tests/examples/my_service/

2. Create a Python File

In the folder you just created, add an empty .py file.
You can name it however you like — just make sure it reflects the test’s purpose.


3. Add Minimal Test Code

Paste the following content:

from src.modules.auto_test.register import params, register
from src.modules.auto_test.test_abs import TestAbs

@register()  # Only classes with this decorator are recognized as test classes.
class MyFirstTest(TestAbs):  # All test classes must inherit from TestAbs.
    @params(
        [
            dict(iteration_name="First"),  # Iteration name is required and shown in the UI.
        ]
    )
    async def test_success(self):
        pass  # Method name should start or end with 'test' for clarity.

4. Refresh the Test Tree in FireFly

Open your browser and go to the Auto Tests page, for example:

http://localhost/auto/examples

Click the Refresh Test Tree button.

Refresh Test Tree button

🔄 Hot Reload Mode

FireFly backend runs in Hot Reload mode while developing locally.
This means every time you save changes (e.g., Ctrl + S), the backend restarts automatically.

The reload may take from 1 to 20 seconds, depending on your system.

In the backend logs, you’ll see something like:

INFO: Shutting down
INFO: Waiting for application shutdown.
INFO: Application shutdown complete.
INFO: Finished server process
INFO: Started server process
INFO: Waiting for application startup.
INFO: Application startup complete.

💡 When Should You Press Refresh?

You only need to use the Refresh Test Tree button if:

  • New tests are added or removed

  • The path to a test (folders/files/classes) has changed

  • The test or iteration name has changed

In all other cases — like updating the logic inside a test — just save the file and wait a few seconds.
Then run the updated test directly.


✅ That’s It!

You’ve now created your first test.
It doesn’t do anything yet — but that’s up to you!

FireFly doesn’t limit your creativity: you can write any valid Python code in your tests.

Next, check out the section on writing feature-rich tests with better reports and tooling.


Creating Your First Script

Time to write your first script in FireFly 🚀
Once again, it’s just four easy steps:


1. Create a Folder for Your Script

Navigate to:

backend/src/modules/script_runner/scripts

Create a folder for your service, module, or team — nested folders are fully supported.

Example:

backend/src/modules/script_runner/scripts/examples/my_service/

2. Create a Python File

Add a new .py file in the folder you just created.
Again, name it in a way that reflects what the script is for.


3. Add Minimal Script Code

All you need is a regular async function decorated with @register:

from src.modules.script_runner.register import register

@register
async def my_new_script():
    pass

4. Refresh the Script List in FireFly

Open your browser and go to the Scripts page, for example:

http://localhost/script_runner/examples

Click the Refresh Scripts button.

Refresh Scripts button

🔄 Hot Reload Mode

Just like with autotests, FireFly restarts the backend service after every file save.

Wait a few seconds after saving before using the UI.

Only after the backend finishes reloading will the Refresh Scripts button update the list.


💡 When Should You Press Refresh?

Use the Refresh Scripts button only if:

  • New scripts are added or removed

  • The path to a script (folder or file name) has changed

  • The function name of the script has changed

In all other cases — for example, editing the body of a script — just save it and wait.


✅ That’s It!

Your first script is now registered and ready to run 🎉
It doesn’t do anything yet — but it’s fully operational.

FireFly gives you full freedom: any valid Python code is allowed in scripts.

To take your scripts further, check out the next section, where we explore advanced features and scripting utilities built into FireFly.