Spaces:
Sleeping
Sleeping
# How to run the UI | |
We set this up so it is hosted as a huggingface space. Each commit to `main` triggers a push and a rebuild on their servers. | |
For local testing, assuming you have all the required packages installed in a | |
conda env or virtualenv, and that env is activated: | |
```bash | |
cd src | |
streamlit run main.py | |
``` | |
Then use a web browser to view the site indiciated, by default: http://localhost:8501 | |
# How to build and view docs locally | |
We have a CI action to present the docs on github.io. | |
To validate locally, you need the deps listed in `requirements.txt` installed. | |
Run | |
```bash | |
mkdocs serve | |
``` | |
And navigate to the wish server running locally, by default: http://127.0.0.1:8888/ | |
This automatically watches for changes in the markdown files, but if you edit the | |
something else like the docstrings in py files, triggering a rebuild in another terminal | |
refreshes the site, without having to quit and restart the server. | |
```bash | |
mkdocs build -c | |
``` | |
# Set up a venv | |
(standard stuff) | |
# Set up a conda env | |
(Standard stuff) | |
# Testing | |
## use of markers | |
The CI runs with `--strict-markers` so any new marker must be registered in | |
`pytest.ini`. | |
- the basic CI action runs the fast tests only, skipping all tests marked | |
`visual` and `slow` | |
- the CI action on PR runs the `slow` tests, but still excluding `visual`. | |
- a second action for the visual tests runs on PR. | |
Check all tests are marked ok, and that they are filtered correctly by the | |
groupings used in CI: | |
```bash | |
pytest --collect-only -m "not slow and not visual" --strict-markers --ignore=tests/visual_selenium | |
pytest --collect-only -m "not visual" --strict-markers --ignore=tests/visual_selenium | |
pytest --collect-only -m "visual" --strict-markers tests/visual_selenium/ -s --demo | |
``` | |
## local testing | |
To run the tests locally, we have the standard dependencies of the project, plus the test runner dependencies. | |
```bash | |
pip install -r tests/requirements.txt | |
``` | |
(If we migrate to using toml config, the test reqs could be consolidated into an optional section) | |
**Running tests** | |
from the project root, simply run: | |
```bash | |
pytest | |
# or pick a specific test file to run | |
pytest tests/test_whale_viewer.py | |
``` | |
To generate a coverage report to screen (also run the tests): | |
```bash | |
pytest --cov=src | |
``` | |
To generate reports on pass rate and coverage, to files: | |
```bash | |
pytest --junit-xml=test-results.xml | |
pytest --cov-report=lcov --cov=src | |
``` | |
## local testing for visual tests | |
We use seleniumbase to test the visual appearance of the app, including the | |
presence of elements that appear through the workflow. This testing takes quite | |
a long time to execute. It is configured in a separate CI action | |
(`python-visualtests.yml`). | |
```bash | |
# install packages for app and for visual testing | |
pip install ./requirements.txt | |
pip install -r tests/visual_selenium/requirements_visual.txt | |
``` | |
**Running tests** | |
The execution of these tests requires that the site/app is running already, which | |
is handled by a fixture (that starts the app in another thread). | |
Alternatively, in one tab, run: | |
```bash | |
streamlit run src/main.py | |
``` | |
In another tab, run: | |
```bash | |
# run just the visual tests | |
pytest -m "visual" --strict-markers | |
# run in demo mode, using firefox (default is chrome) | |
pytest -m "visual" --strict-markers -s browser=firefox --demo | |
# the inverse set: | |
pytest -m "not slow and not visual" --strict-markers --ignore=tests/visual_selenium | |
``` | |
## CI testing | |
Initially we have an action setup that runs all tests in the `tests` directory, within the `test/tests` branch. | |
TODO: Add some test report & coverage badges to the README. | |
## Environment flags used in development | |
- `DEBUG_AUTOPOPULATE_METADATA=True` : Set this env variable to have the text | |
inputs autopopulated, to make stepping through the workflow faster during | |
development work. | |
Typical usage: | |
```bash | |
DEBUG_AUTOPOPULATE_METADATA=True streamlit run src/main.py | |
``` | |