f3ts-cookiecutter is a project template that generates a ready-to-use hardware test project structure. Instead of setting up pytest-f3ts, configuration files, and project layout from scratch, start with a working foundation.
Quick Start#
Generate a new project:
pip install cookiecutter
cookiecutter gh:fixturfab/f3ts-cookiecutterAnswer the prompts:
project_name [my-hardware-tests]: acme-board-tests
project_slug [acme-board-tests]:
description [Hardware functional tests]: Functional tests for ACME board rev C
author [Your Name]: Test Engineer
include_docker [y]: y
include_github_actions [y]: y
Your new project:
acme-board-tests/
├── tests/
│ ├── conftest.py # pytest-f3ts fixtures
│ ├── test_power_on.py # Example power-on tests
│ └── test_communication.py # Example serial tests
├── config/
│ ├── dev.yaml # Development config
│ └── production.yaml # Production config
├── pyproject.toml # Project dependencies
├── Dockerfile # Test runner container
├── .github/
│ └── workflows/
│ └── test.yml # CI workflow
└── README.md
What's Included#
Test Structure
- Pre-configured
conftest.pywith hardware fixtures - Example tests demonstrating common patterns
- Organized test modules by test type
Configuration
- Hardware configuration templates for dev and production
- Environment variable support
- Multi-fixture configuration examples
CI/CD
- GitHub Actions workflow for automated testing
- Docker configuration for consistent test environments
- Test reporting integration
Documentation
- README template with setup instructions
- Configuration documentation
- Test development guide
Customization#
The template includes hooks for customization:
# Generate with custom options
cookiecutter gh:fixturfab/f3ts-cookiecutter \
--no-input \
project_name="my-tests" \
include_docker=nWhen to Use#
f3ts-cookiecutter helps when:
- Starting a new hardware test project
- Standardizing test structure across multiple projects
- Onboarding team members to hardware testing best practices
For simple scripts or experiments, direct pytest-f3ts installation may be sufficient.