Quick start
Install VIP, then point it at your server:
uv venv
source .venv/bin/activate
uv pip install posit-vip
playwright install chromium Using RStudio or Positron?
You can set up VIP as an RStudio project instead. Go to
File → New Project → Version Control → Git
and enter https://github.com/posit-dev/vip.git as
the Repository URL. Then install dependencies from the Terminal tab:
uv sync
uv run playwright install chromium See the Shiny app page for the full graphical workflow.
Run your first test against a Connect server:
vip verify --connect-url https://connect.example.com A browser window opens for you to log in. After authentication completes, VIP runs the test suite headlessly and cleans up the session automatically.
Test multiple products at once:
vip verify \
--connect-url https://connect.example.com \
--workbench-url https://workbench.example.com \
--pm-url https://packagemanager.example.com Authentication
Interactive auth (default)
VIP opens a Chromium window so you can log in through any identity provider (Okta, SAML, OIDC, password). After login, VIP mints a temporary API key, saves the session, and runs all tests headlessly. No credentials need to be configured.
# Interactive auth is the default — just run:
vip verify --connect-url https://connect.example.com Credential-based auth
If you have API keys or test user credentials, disable interactive auth and set environment variables instead:
export VIP_CONNECT_API_KEY="your-api-key"
export VIP_TEST_USERNAME="test-user"
export VIP_TEST_PASSWORD="test-password"
vip verify --connect-url https://connect.example.com --no-interactive-auth | Variable | Purpose |
|---|---|
VIP_CONNECT_API_KEY | Connect admin API key |
VIP_WORKBENCH_API_KEY | Workbench admin API key |
VIP_PM_TOKEN | Package Manager token |
VIP_TEST_USERNAME | Test user login name |
VIP_TEST_PASSWORD | Test user login password |
Running tests
Prefer a graphical interface? VIP includes a Shiny app that lets you select categories, run tests, and view the report from your browser or the Workbench Viewer pane.
Target specific products or test categories:
# Run all tests
vip verify --connect-url https://connect.example.com
# Run tests for a specific category
vip verify --connect-url https://connect.example.com --categories connect
vip verify --workbench-url https://workbench.example.com --categories workbench
vip verify --pm-url https://pm.example.com --categories package_manager
# Combine markers
vip verify --connect-url https://connect.example.com --categories "performance and connect"
# Pass extra flags to pytest
vip verify --connect-url https://connect.example.com -- -x --tb=long -k 'login' Test categories
| Category | Marker | Description |
|---|---|---|
| Prerequisites | prerequisites | Server reachability, auth, admin onboarding |
| Package Manager | package_manager | CRAN/PyPI mirrors, repos, private packages |
| Connect | connect | Login, deploy, data sources, packages, email |
| Workbench | workbench | Login, IDE launch, sessions, packages |
| Cross-product | cross_product | SSL, monitoring, system resources |
| Performance | performance | Load times, concurrency, resource usage |
| Security | security | HTTPS, auth policy, secrets storage |
Version gating
Tests can target specific product versions. Tests are skipped automatically if the deployment is older than required:
@pytest.mark.min_version(product="connect", version="2024.05.0")
def test_new_api_feature():
... Configuration file
For repeated testing or advanced configuration, use a
vip.toml file instead of URL flags:
cp vip.toml.example vip.toml
# Edit vip.toml with your deployment details Then run tests against it:
vip verify --config vip.toml --no-interactive-auth
If no --config is specified and no URL flags are given,
VIP looks for vip.toml in the current directory or the
path in the VIP_CONFIG environment variable.
Each product section (Connect, Workbench, Package Manager) can be
enabled or disabled individually. See vip.toml.example
for the full template.
Generating reports
After running tests, generate and optionally publish a Quarto report:
# Generate results JSON
vip verify --connect-url https://connect.example.com --report report/results.json
# Render the report
cd report && quarto render
# Publish to Connect (optional)
quarto publish connect --server https://connect.example.com Extending VIP
Add site-specific tests without modifying the VIP source tree. Create a directory with
.feature and .py files following the same conventions:
vip verify --connect-url https://connect.example.com \
--extensions /opt/vip-custom-tests Or configure extension directories in vip.toml:
# vip.toml
[general]
extension_dirs = ["/opt/vip-custom-tests"]
See examples/custom_tests/ in the repository for a working example.