Command line utility for using the Pytest testing framework in 3ds Max
Command line tool for a friendly testing workflow using the Pytest framework in 3ds Max
- Run tests with all 3ds Max Python APIs, including GUI/PySide2 libraries
- Source dependencies from a pipenv virtual environment
- Automate a new 3ds Max/python session for each tests invocation
Install with pip
Install with pip using Python 2.7:
pip install maxpytest
When run from a project root, modules installed to the project's associated pipenv virtual environment. To use a virtual environment associated with another directory (where Pipfile/Pipfile.lock are located) override the current working dir with
If you already have a pipenv virtual environment for your project, make sure it has pytest installed.
To install pipenv, run from your project root:
pip install pipenv
Then, setup a pipenv virtual environment:
pipenv --python 2.7 install
Add pytest to the virtual environment:
pipenv install pytest
Due to the caching mechanism of python's import system and Pytest's design, changes made to test files (and any modules they import) will not be reflected in subsequent Pytest invocations in the same python process. This means ensuring that your changes are reflected requires a restart of the 3ds Max/python session.
maxpytest how to run your tests. For maxpytest to handle closing and relaunching 3ds Max automatically, run your tests using MXSPyCOM. For a simple setup, or if targeting multiple 3ds Max versions, run your tests directly with 3ds Max. To use the first discovered method, run your tests using the default run method.
Run your tests using MXSPyCOM
When you run your tests with MXSPyCOM, the closing and relaunching 3ds Max is handled automatically. Any unsaved work will trigger a prompt to save it before closing. For more about MXSPyCOM see the wiki.
To invoke your tests, use
maxpytest -m [path to MXSPyCOM.exe] -py [pytest args], with Pytest args following
--pytest as the final command argument.
# Relaunch 3ds Max then invoke pytest from current working dir with verbose maxpytest -m "C:\\Program Files\\MXSPyCOM\\MXSPyCOM.exe" -py -v . # Relaunch 3ds Max then invoke pytest in directory ./tests maxpytest -m "C:\\Program Files\\MXSPyCOM\\MXSPyCOM.exe" -py tests/ # Skip relaunch and just invoke pytest in directory ./tests maxpytest -m "C:\\Program Files\\MXSPyCOM\\MXSPyCOM.exe" --no-restart -py tests/
Test results print to the 3ds Max Listener.
Run your tests directly with 3ds Max
To run tests in 3ds max without using MXSPyCOM, use
-m/--max with the version year of the 3ds Max you wish to target, or a full path to 3dsmax.exe.
# Invoke pytest from current working dir in a new instance of 3ds Max 2019 maxpytest -m "C:\\Program Files\\Autodesk\\3ds Max 2019\\3dsmax.exe" # Invoke pytest from current working dir in a new instance of 3ds Max 2019 maxpytest -m 2019 # Invoke pytest from current working dir and run tests in ./tests maxpytest -m 2016 -py tests/ -v
Test results will print to the 3ds Max Listener.
Run your tests using the default run method
maxtest is used without a
-m/--max argument, maxpytest will search for MXSPyCOM.exe at
C:\Program Files\MXSPyCOM\MXSPyCOM.exe. If not found, the most recent version of 3ds Max installed on the system will be used.
For questions, support, or feature requests, please open an issue or reach out at email@example.com .