Skip to main content

miniQA

A simple to use automated QA test tool: miniQA runs an OS of your choice in QEMU, interacts with it based on your YAML test files and ensures the results match your criteria.

miniQA includes a simple web editor/mini IDE providing some helpful tools to write your test cases in quick iterations with the VM screen on the side.

Setup

Via PIP

miniQA can be installed via pip:

pip install miniqa  # - or: `pip install miniqa[ocr]` for text recognition support

Make sure you have the runtime dependencies (qemu-system-x86, qemu-utils and optionally ovmf) installed as well:

  • Debian: sudo apt install qemu-system-x86 qemu-utils ovmf
  • Fedora: sudo dnf install qemu-system-x86 qemu-img edk2-ovmf

To run your tests, invoke this from your tests folder:

miniqa run    # - or: `miniqa editor` for the webui

Via Podman/Docker

Alternatively, miniQA can be used without any installation via podman or docker. The image includes QEMU already. To do so, just invoke a command such as this from your tests folder:

docker run \
    --rm \
    -it \
    --device /dev/kvm \
    --tmpfs /tmp:size=1G,mode=1700 \
    -p 8080:8080 \
    -p 6080:6080 \
    -v .:/tests \
    ghcr.io/mityax/miniqa run    # - or: `miniqa editor` for the webui

Note that the default images include text recognition support; if you don't use that functionality, you can use the ghcr.io/mityax/miniqa:latest-no-ocr image instead, which is just about half the size.

Quick Start

Setup the Files:

This is the directory structure we're going to need:

your_project
├── …
└── tests
    ├── img
    │   └── gnome_os_disk.img
    ├── tests
    │   ├── example_test.yml
    │   ├── second_example_test.yml
    │   └── …
    └── miniqa.yml
  • The img folder: The OS image(s) will be located here. For example, you can grab a copy of GNOME OS Nightly and place it in img/gnome_os_disk.img.

  • The miniqa.yml file: This file contains your overall miniQA configuration and can look like this:

     image: img/gnome_os_disk.img                   # the image our VM boots
    
     use_ovmf: true                                 # required to boot GNOME OS
     qemu_args: [
       "-device", "virtio-multitouch-pci",          # adds multitouch capabilities to the VM
       "-device", "VGA,edid=on,xres=1080,yres=720"  # ensures a fixed screen resolution
     ]
     
     cache_directory: ./miniqa-cache
    
  • The nested tests folder: This will contain your test cases, e.g. example_test.yml, or this one:

    steps:
      - wait:                                      # - wait for boot to complete, and then for the GNOME OS
          for:                                     #   setup wizard (which has gray background) to show up
            dominant_color: '#fafafb' 
          timeout: 120s                            # - on timeout, our test will fail
      - click:                                     # - go to the next page      
          find:
            text: Next
      - snapshot: base                             # - create a snapshot other tests can start from
    

Run your Tests

Now, you're ready to run your first test:

cd your_project/tests
miniqa run

Edit in the Webui

Afterward, you can edit your tests in any editor you like, but I'd highly recommend using miniQA's webui. This way you'll be able to

  • run tests right away,
  • see the VM's screen right next to the YAML editor, and
  • have basic autocomplete making it easy to discover miniQA's features.

The webui also has tools allowing you to easily pick screen positions, regions and colors right from the VM.

To launch it, run:

miniqa editor

Check the Docs

Well, docs might be a bit far-fetched, but there's a bit of reference in ./docs.

The aim is, that this should be enough to easily find your way into miniQA and work with it in the long run; should you have questions or miss anything in there, please don't hesitate to create an issue to get in touch.

Contribute

I'd highly value your contributions – if you'd like to add a new feature or make bigger changes, please create an issue to briefly discuss it upfront, so we can make sure your work is not for nothing; for small fixes feel free to just open a PR.

Please be aware that the codebase is not yet quite as clean as I'd like it to be, since this project was originally just a sidequest and I haven't yet had much time to fully clean it up. However, I'm glad to help you around, should you have questions!

Support

If miniQA is helpful for you, I'd appreciate you supporting me with a small amount. Even a dollar a month helps!

To donate, choose a platform below:

Buy Me a Coffee at ko-fi.com
Recommended! Most payment methods, one-time or recurring donations, no sign up required.

Buy Me a Coffee
Donate by card, no sign up required.

License

This project is licensed under GPL-3.0-or-later.

Metadata

Release files for miniqa 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for miniqa 0.2.0
File Size Uploaded Provenance Actions
miniqa-0.2.0.tar.gz 91.6 kB With provenance Details for miniqa-0.2.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for miniqa 0.2.0
File Interpreter ABI Platform Actions
miniqa-0.2.0-py3-none-any.whl Python 3 none any Details for miniqa-0.2.0-py3-none-any.whl

Total release size: 201.5 kB

Release files / miniqa-0.2.0.tar.gz

Download URL miniqa-0.2.0.tar.gz
Size 91.6 kB
Tags Source
SHA-256 checksum
How to use checksums
367d08693b24c2397df9159431b0840dbb2fcf30a911325c9f9c5aaf8e0e3b65
BLAKE2b-256 checksum
How to use checksums
f698c6afaa82270ea016189f59e48d2ec6215e867e3d8977b72b3eeb2b22e8a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 15, 2026.

Transparency log

Release files / miniqa-0.2.0-py3-none-any.whl

Download URL miniqa-0.2.0-py3-none-any.whl
Size 109.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d39045afb86e8e7f170ffca522b2d0b9416db6d7375b53217f298f4a7708ea8d
BLAKE2b-256 checksum
How to use checksums
c0dcf626460128c62ea6e93d89947a610392d0ba8a9b948b9d45a0a547c4bdcf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 15, 2026.

Transparency log

Security for miniqa 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for miniqa-0.2.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 15, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page