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
- Add point values to test functions using the
- Test Locking as described in Basu et al., Automated Problem Clarification at Scale (abstract, pdf)
- Lock doctests using the
# LOCKcomment before the function. pytest-grader lock [src] [dst]will generate a copy of src with doctests locked.pytest --unlockprovides an interactive interface for unlocking locked doctests.- A doctest whose output is a function should give
FUNCTIONas the expected output, which matches any function value. When unlocking, typeFUNCTIONfor such outputs.
- Lock doctests using the
- Test Isolation
- Modules listed under
reload_modulesingrader.yamlare 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.
- Modules listed under
- 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.
- Snapshots of assignment files, test case results, and unlocking attempts are stored in a
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
Updating versions
- Change version in
pyproject.toml uv builduv publishIf your pypi credentials are in~/.pypirc, then instead runuvx 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pytest_grader-0.1.7.tar.gz.
File metadata
- Download URL: pytest_grader-0.1.7.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a3747e2e1f3be00baffd0aa6fa5b7c0252ce21993780ecebd3fbd135e27e100d
|
|
| MD5 |
f40ef4dbae404ba736dcc0ee97f2f929
|
|
| BLAKE2b-256 |
ac603c8c5d73513d1bcca5e38fa9e5dad84feba47ed63a35d5d04ea8d0ae53f5
|
File details
Details for the file pytest_grader-0.1.7-py3-none-any.whl.
File metadata
- Download URL: pytest_grader-0.1.7-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
393c7001696592cdd179989c9103c5a82fff01a6c89439e51ed752337203400f
|
|
| MD5 |
717d94073833829809dab776fe3ef552
|
|
| BLAKE2b-256 |
e85cafa6f3acd24f64e47b70d5dcc8fa148f890cc1bb27d5c6243b2a1c742ab6
|