Skip to main content

A testing framework for OpenSCAD scripts

Project description

openscad_test

A testing framework for OpenSCAD scripts, built with uv and available on PyPI.

Installation

pip install openscad-test

Requirements

  • Python 3.11 or later
  • OpenSCAD installed and available on your system PATH

Usage

Create one or more .scadtest files describing your tests, then run:

openscad-test mymodule.scadtest

You can pass multiple files at once:

openscad-test tests/basic.scadtest tests/advanced.scadtest

By default, up to 5 tests run in parallel. Use -j to control the number of parallel processes:

openscad-test -j 1 mymodule.scadtest   # serial
openscad-test -j 8 mymodule.scadtest   # up to 8 parallel

Output

Each file is listed as a header, with individual test results indented beneath it. When a test fails, the relevant ECHO, WARNING, and ERROR lines from OpenSCAD are shown. A per-file summary is printed after each file, followed by an overall summary:

tests/basic.scadtest
  Echo Integer Test PASSED
  Expected Failure Test PASSED
  No Warnings Test PASSED
  Bad Echo Test FAILED
    Expected echo not found: ECHO: 99
    ECHO: 42
  3 of 4 passed, 1 failed.

2 of 4 tests passed, 1 failed.

The process exits with code 0 if all tests pass, or 1 if any test fails.

The .scadtest File Format

A .scadtest file is a TOML file. Each test is defined as a [[test]] section.

Fields

Field Type Default Description
name string "Unnamed Test" Human-readable test name
script string Inline OpenSCAD script to run
script_file string Path to a .scad file (relative to the .scadtest file)
set_vars table {} Variables to pass to the script via -D
expect_success bool true Whether OpenSCAD should complete without errors
assert_echoes list of strings [] Each string must appear (as a substring) in an ECHO output line
assert_no_echoes bool true Assert that there are no ECHO output lines (skipped when assert_echoes is non-empty)
assert_warnings list of strings [] Each string must appear (as a substring) in a WARNING line
assert_no_warnings bool true Assert that there are no WARNING lines (skipped when assert_warnings is non-empty)
timeout integer 60 Maximum seconds to wait for the test to complete before marking it failed

Exactly one of script or script_file must be provided for each test.

File-level configuration

A [config] section at the top of the file sets default values for all tests in that file. Per-test values always take precedence over [config] values, which in turn take precedence over the built-in defaults.

The following fields are supported in [config]:

Field Description
timeout Default timeout in seconds for all tests (built-in default: 60)
expect_success Default for expect_success (built-in default: true)
assert_no_echoes Default for assert_no_echoes (built-in default: true)
assert_no_warnings Default for assert_no_warnings (built-in default: true)
[config]
timeout = 120
expect_success = false
assert_no_echoes = false
assert_no_warnings = false

[[test]]
# inherits all config defaults above
name = "Expected Failure Test"
script = "this_function_does_not_exist();"

[[test]]
# per-test value overrides config
name = "Should Succeed"
script = "echo(1);"
expect_success = true
timeout = 30

Example

[[test]]
# A test that should succeed and produce a specific echo.
name = "Echo Integer Test"
script = "echo(42);"
expect_success = true
assert_echoes = ["ECHO: 42"]

[[test]]
# Pass variables into the script using set_vars.
name = "Set Vars Test"
script = "echo(w);"
set_vars = {w = 10}
expect_success = true
assert_echoes = ["ECHO: 10"]

[[test]]
# A test that expects OpenSCAD to report an error.
# Set assert_no_echoes/assert_no_warnings to false for expected-failure tests
# since OpenSCAD may emit warnings before failing.
name = "Expected Failure Test"
script = "this_function_does_not_exist();"
expect_success = false
assert_no_echoes = false
assert_no_warnings = false

[[test]]
# A test using an external .scad file with no echoes or warnings.
# assert_no_echoes and assert_no_warnings are true by default.
name = "No Warnings Test"
script_file = "my_module.scad"
expect_success = true

Python API

You can also use openscad_test programmatically:

from openscad_test import parse_scadtest_file, run_test

tests = parse_scadtest_file("mymodule.scadtest")
for test_case in tests:
    result = run_test(test_case)
    if result.passed:
        print(f"{test_case.name} PASSED")
    else:
        print(f"{test_case.name} FAILED")
        for msg in result.messages:
            print(f"  {msg}")

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

openscad_test-1.2.4.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

openscad_test-1.2.4-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file openscad_test-1.2.4.tar.gz.

File metadata

  • Download URL: openscad_test-1.2.4.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for openscad_test-1.2.4.tar.gz
Algorithm Hash digest
SHA256 7ec165d74f220e8a0dc4cb76adc156fb99b668965094fa423d11fa6186547a6c
MD5 057514aea4c052cdfef791d317abb5ee
BLAKE2b-256 d9efc49adb856ca36e7eeb9ed5abacc2bfd2561af606e9dcfe985cfeb1d5e04d

See more details on using hashes here.

Provenance

The following attestation bundles were made for openscad_test-1.2.4.tar.gz:

Publisher: publish.yml on BelfrySCAD/openscad_test

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file openscad_test-1.2.4-py3-none-any.whl.

File metadata

  • Download URL: openscad_test-1.2.4-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for openscad_test-1.2.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0554fa7b68c49b89348e5a00a12b05121cbeb02dd09938751846be9b9a152325
MD5 85c4e98ceb43db3e73d36e96c1b330c7
BLAKE2b-256 03e21fcb3c11eb7513634a13d0b719cb023f0c94bd52c07432b2ed9d162ec9a1

See more details on using hashes here.

Provenance

The following attestation bundles were made for openscad_test-1.2.4-py3-none-any.whl:

Publisher: publish.yml on BelfrySCAD/openscad_test

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page