Skip to main content

Pytest extension for scoring programming assignments.

Project description

pytest-grader

A pytest plugin for testing and scoring programming assignments.

Features

  • Assignment Scoring
    • Add point values to test functions using the @points(n) decorator
    • Show a score summary when running pytest --score
  • Test Locking as described in Basu et al., Automated Problem Clarification at Scale (abstract, pdf)
    • Lock doctests using the # LOCK comment before the function.
    • pytest-grader lock [src] [dst] will generate a copy of src with doctests locked.
    • pytest --unlock provides an interactive interface for unlocking locked doctests.
    • A doctest whose output is a function should give FUNCTION as the expected output, which matches any function value. When unlocking, type FUNCTION for such outputs.
  • Test Isolation
    • Modules listed under reload_modules in grader.yaml are reloaded before each test, so a test that mutates a module (e.g. by monkeypatching one of its functions) does not affect later tests.
    • Globals injected by pytest's assertion rewriting (@py_builtins, @pytest_ar) are removed from doctest namespaces.
  • Progress Logging
    • Snapshots of assignment files, test case results, and unlocking attempts are stored in a grader.sqlite.
    • This file is designed to be submitted along with the assignment as a record of how the assignment was completed.

Usage

Include a conftest.py file in the distribution of your assignment that contains pytest_plugins = ["pytest_grader"].

Describe the assignment in a grader.yaml file next to it:

included_files:   # Files snapshotted into grader.sqlite when tests run
  - hog.py
reload_modules:   # Modules reloaded before each test for isolation
  - hog

See the examples directory for more usage info.

License

MIT

Updating versions

  • Change version in pyproject.toml
  • uv build
  • uv publish If your pypi credentials are in ~/.pypirc, then instead run uvx uv-publish.

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

pytest_grader-0.1.6.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

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

pytest_grader-0.1.6-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file pytest_grader-0.1.6.tar.gz.

File metadata

  • Download URL: pytest_grader-0.1.6.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.7.13

File hashes

Hashes for pytest_grader-0.1.6.tar.gz
Algorithm Hash digest
SHA256 572f10db23c742322d1515db282a48de07585f324728f4a582f7fa6915dcd8ce
MD5 2d1c4651a4cc108ec11cc9b84c2aa25a
BLAKE2b-256 74398f6bc37678becef5b259c4b4bba24416c86489cf76ffbf3d17fe80a68b3b

See more details on using hashes here.

File details

Details for the file pytest_grader-0.1.6-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_grader-0.1.6-py3-none-any.whl
Algorithm Hash digest
SHA256 d3544ede7cbcaf3771ab34661294726880a9b79088b2ed52c34fd681e0e0dd7e
MD5 61227422747b18afa41e1d806e28e7c7
BLAKE2b-256 c1a3da993c23fe42dcd77547d86bed4cabb0081c760ab70f6cfc98a46af53563

See more details on using hashes here.

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