Connecting to Bloom
Send test case outcomes from Bud to Bloom PLM, and answer report requests from Bloom.
Bud and Bloom remain independently deployable. Bud does not require Bloom: connect the two when you want test case outcomes from Bud to reach Bloom.
Navigation links
Section titled “Navigation links”Deploy both apps and give each one the other’s public URL: set BUD_APP_URL and BLOOM_APP_URL in both .env files, so each app shows navigation links to the other. These URLs only add links. Result synchronization requires the separate credentials described under Secrets for the sync.
# Set in both .env filesBUD_APP_URL=https://bud.example.comBLOOM_APP_URL=https://bloom.example.comOn Cloudron, set the link with cloudron env set. See Install on Cloudron.
Secrets for the sync
Section titled “Secrets for the sync”Before the two can exchange credentials, each side needs one secret that is only required for the sync. Bud stores the Bloom token encrypted at rest under a Fernet key, and Bloom hashes the service tokens it issues with an independent pepper of at least 32 characters. For Docker Compose, set both, then restart. Cloudron generates these secrets automatically.
# Generate the Fernet key for Budpython -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
# Bud .env: encrypts the saved Bloom credentialsBUD_INTEGRATION_ENCRYPTION_KEY=<the generated key>
# Bloom .env: peppers the service tokens Bloom issues to BudSERVICE_TOKEN_PEPPER=<independent random value, 32+ characters>Authorize the result flow
Section titled “Authorize the result flow”- In Bloom, set
SERVICE_TOKEN_PEPPERand restart Bloom. - In Bloom, open Settings → PLM Integration Token Management, select Create Credential, and generate a service token with
test-results:writescope. - Copy the
blm_sync_…credential when it is shown. Bloom displays it only once. - In Bud, set
BUD_INTEGRATION_ENCRYPTION_KEYand restart Bud. - In Bud, open Settings → Bloom PLM Integration and paste Bloom’s reachable URL and that token.
The credential is scoped to test-results:write, revocable, and time-limited. Bud encrypts it at rest and never returns it through its settings API. Saving the Bloom URL and the credential enables result synchronization directly. Clearing the saved credential disables it.
Tag your test cases
Section titled “Tag your test cases”On the test side, give a test class BloomMetaData("PRJ", "001") so every uploaded result carries a Bloom tc_id.
from budtestlibrary import BudTestCase, BloomMetaData
class TraceableTest(BudTestCase): bloom_metadata = BloomMetaData("PRJ", "001")Check the IDs a suite claims before uploading results with budtestlibrary check. See Check Bloom metadata.
In Bloom, test cases are linked to the requirements they verify. See Typed links and Coverage.
What Bud sends
Section titled “What Bud sends”Bud then posts one aggregated execution outcome per tc_id to Bloom, which updates the matching test case and its campaign line items. Result sync carries execution status only: Bud never creates or synchronizes Bloom campaigns, suites, requirements, or documents.
When Bud syncs a run’s results, Bloom answers with the test suite that holds the synced test cases. Bud keeps that reference on the run and shows it on the dashboard, the run list, and the run detail page. With no Bloom configured, the reference is simply absent.
The Bloom sync event on a run says how many results had no Bloom tc_id and how many skipped results were not sent.
Publishing reports
Section titled “Publishing reports”Users with the Publish to Bloom permission publish a run’s report to Bloom. The run must be completed and identify one project through canonical Bloom test case IDs. A user without that permission finds Request access in its place. See Roles and access.
Report requests
Section titled “Report requests”Bloom readers can request a report beside a linked Bud run. Bud collects those requests through the configured Bloom connection once a minute.
- Report publishers see pending requests on the dashboard and run page. Configured SMTP also emails active publishers.
- Successful publication closes matching requests in that Bloom project.
- Publishers can refuse with a reason, which returns to the reader. A request whose run cannot be published can be refused the same way.
- Failed publication keeps the request open.
The configured integration credential exchanges report requests, including the reader’s name and email, as well as test outcomes and published reports. Collection resumes after a restart. Unsent email is retried and successful recipients are recorded. A connection failure leaves the request in Bloom for a later collection.
On the Bloom side
Section titled “On the Bloom side”Bloom’s half of this setup, the pepper and the service token, is described in Connecting to Bud.



