Next-Gen App & Browser Testing Cloud
Trusted by 2 Mn+ QAs & Devs to accelerate their release cycles

Flowise hit end of life on August 31, 2026. Learn how to test self-hosted Flowise agents using the prediction API, CI gates and conversation quality checks.

Samyak Goyal
Author

Sirajuddin Khan
Reviewer
Published on:
A support bot handles a few thousand conversations a week. It was assembled in a Flowise canvas by a product engineer who has since moved teams, it runs on a container nobody has redeployed in months, and the only check on its behaviour is that complaints stay quiet.
Then the upstream project stops. The agent does not go offline, and nothing about the container changes, but every safety net around it disappears. The flow keeps answering exactly as it did yesterday, right up until the day it quietly does not.
TL;DR
Flowise AI workflow testing means driving a chatflow through its POST /api/v1/prediction/:id endpoint from an external test runner and scoring the JSON it returns for structure, retrieved context and cross-turn memory. Self-hosted deployments own this layer themselves, because the built-in Evaluations feature was restricted to the hosted plans.
Flowise published a wind-down timeline with three dates. Per the official sunset notice, active feature development stopped on July 29, 2026 ("We will no longer be reviewing or accepting new Pull Requests"), the repository was scheduled to move to archive status on August 10, 2026 with npm packages and Docker images marked deprecated, and August 31, 2026 is end of life, when "Official core team presence in Discord and GitHub will conclude".
That archival has since happened. The Flowise repository on GitHub now carries an archive banner and is read-only.
Checked on the live Flowise site on August 31, 2026, the sunset banner sits above the announcement, and the logo beneath it now reads "A Workday Company".
The sunset notice is also explicit that the code outlives the project: "The Apache 2.0 licensed code is yours to keep building on", with teams encouraged to fork the repository and maintain their own internal updates.
Self-hosted instances therefore keep running. What disappears is everything around them.
That last point reframes the whole exercise. Testing a Flowise agent today is less about certifying a build and more about knowing precisely what the agent does before anything is allowed to change it. If you are still deciding where the flow eventually lands, the tradeoffs across visual builders are covered in our guide to the best AI agent builder options.
A broken web form throws an error. A degraded agent answers confidently and slightly wrong, which is why the failure reaches users before it reaches a dashboard.
The Stack Overflow Developer Survey 2025 reports that 45.7% of developers distrust the accuracy of AI output, against 32.7% who trust it.
That distrust has a shape, and it is the failure class a conventional suite cannot see: answers that are almost right. These are the forms it takes inside a chatflow.
Each of these passes an HTTP 200 check. Catching them requires assertions about what the answer contains and where it came from, which is the discipline covered in depth in our breakdown of agent functional testing.
Flowise shipped an evaluation surface, and knowing its shape tells you exactly what a replacement has to reproduce. Per the Flowise Evaluations documentation, an evaluation pairs a Dataset with one or more Evaluators. Datasets are input and output pairs, entered by hand or uploaded as a CSV with two columns, Input and Output. Evaluators score the flow's actual output against that reference.
| Evaluator type | What it checks | How to reproduce it yourself |
|---|---|---|
| Text-based | String comparison: Contains Any, Contains All, Does Not Contain Any or All, Starts With, Does Not Start With. | Term-set assertions in any test runner, checking that required vocabulary appears and forbidden vocabulary does not. |
| Numeric-based | Total, prompt and completion token counts, API and LLM and chatflow and agentflow latency, and output character length. | Timing the HTTP call and reading token fields from the response, then failing the test above an agreed ceiling. |
| LLM-based | Model-graded Hallucination and Correctness assessments, where a judge model scores the answer. | A dedicated evaluation platform, since a hand-rolled judge needs its own calibration before its verdicts mean anything. |
One line in that documentation decides the rest of this article: Evaluations are available only on the Cloud and Enterprise plans. That is the tier ending with the sunset, so a self-hosted deployment has the flows and the endpoint but no bundled scoring. The gap is real and it is yours to fill. For the wider category of tools that fill it, we compared eleven options in our roundup of LLM evaluation tools.
Note: Scoring an agent on hallucination, completeness and tone takes more than string matching. TestMu AI runs behavioural evaluations against any chat endpoint and returns a production readiness verdict. Try it free!
The Flowise prediction guide specifies POST /api/v1/prediction/:id and lists sessionId as a request field used to maintain conversation state across calls.
The Flowise prediction API reference documents the rest of the schema. Request fields include question (the message sent to the flow), streaming, overrideConfig (runtime configuration and variable overrides), history (previous conversation messages) and uploads. Response fields are text, json, question, chatId, chatMessageId, sessionId, memoryType, sourceDocuments and usedTools.
For a test suite, that single endpoint is the whole contract. Set streaming to false so the response arrives as one parseable body rather than a token stream. The two fields worth building assertions around are sourceDocuments and usedTools, because they expose how the answer was produced rather than just what it said.
Four steps stand up a harness with no framework beyond the Node standard library.
// flowise.test.mjs - run with: node --test flowise.test.mjs
import { test } from 'node:test';
import assert from 'node:assert/strict';
const BASE = process.env.FLOWISE_URL || 'http://localhost:3000';
const FLOW = process.env.FLOWISE_CHATFLOW_ID;
const KEY = process.env.FLOWISE_API_KEY;
export async function ask(question, sessionId) {
const started = Date.now();
const res = await fetch(BASE + '/api/v1/prediction/' + FLOW, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + KEY
},
body: JSON.stringify({
question: question,
sessionId: sessionId,
streaming: false
})
});
assert.equal(res.status, 200, 'prediction returned HTTP ' + res.status);
const body = await res.json();
body.latencyMs = Date.now() - started;
return body;
}
test('chatflow returns a well-formed answer', async () => {
const out = await ask('How do I cancel my subscription?');
assert.equal(typeof out.text, 'string');
assert.ok(out.text.trim().length > 0, 'agent returned an empty answer');
assert.ok(out.chatId, 'no chatId in response');
assert.ok(out.latencyMs < 15000, 'answer took ' + out.latencyMs + 'ms');
});This is deliberately the least interesting test in the suite. It proves the flow is reachable, authorized and returning the documented shape, which is the precondition for every assertion that follows.
The instinct carried over from conventional testing is to store a known-good answer and compare against it. That assertion fails the first time the model rephrases a correct response, the team marks the suite as flaky, and within a month nobody reads the results. Assert on properties that hold across every correct phrasing instead.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { ask } from './flowise.test.mjs';
const CANCEL_PATHS = ['account settings', 'billing page', 'support'];
const FORBIDDEN = ['guaranteed refund', 'i think', 'as an ai'];
test('cancellation answer names a real path', async () => {
const out = await ask('How do I cancel my subscription?');
const body = out.text.toLowerCase();
assert.ok(
CANCEL_PATHS.some(term => body.includes(term)),
'answer named none of: ' + CANCEL_PATHS.join(', ')
);
const leaked = FORBIDDEN.filter(term => body.includes(term));
assert.deepEqual(leaked, [], 'answer contained forbidden phrasing');
});
test('retrieval flow grounds its answer in documents', async () => {
const out = await ask('What is the refund window?');
assert.ok(Array.isArray(out.sourceDocuments), 'no sourceDocuments field');
assert.ok(
out.sourceDocuments.length > 0,
'answered with zero retrieved context, so it came from model weights'
);
});
test('agent keeps context across turns in one session', async () => {
const session = 'ctx-regression-48120';
await ask('My order number is 48120 and it has not arrived.', session);
const out = await ask('When will it arrive?', session);
assert.ok(
out.text.includes('48120'),
'agent lost the order number between turns'
);
});The grounding test earns its place fastest. An agent that answers fluently with an empty sourceDocuments array is producing exactly the confident invention described in our guide to LLM hallucination detection, and it is detectable without a judge model.
A suite that only runs when someone remembers it does not protect an unmaintained deployment. Two triggers matter, and the second is the one most teams skip. Change-triggered runs cover edits to a flow export, a prompt file or a knowledge-base document. Scheduled runs cover the case nothing in your repository can detect: a model provider updating behaviour underneath a flow that nobody touched.
name: flowise-agent-tests
on:
push:
paths:
- 'flows/**'
- 'prompts/**'
- 'knowledge-base/**'
schedule:
- cron: '0 6 * * *'
jobs:
agent-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Run Flowise agent suite
env:
FLOWISE_URL: ${{ secrets.FLOWISE_URL }}
FLOWISE_CHATFLOW_ID: ${{ secrets.FLOWISE_CHATFLOW_ID }}
FLOWISE_API_KEY: ${{ secrets.FLOWISE_API_KEY }}
run: node --test --test-reporter=spec ./tests/Three habits keep the pipeline honest once it exists.
A small fast subset belongs on every push and the full dataset on the nightly schedule, which is the split we describe in our guide to agent smoke testing.
Term sets and grounding checks catch the failures you already thought of. They cannot tell you whether the agent was condescending, whether it treated a casually phrased question with less care than a formal one, or whether it resolved the user's actual problem. Those are graded judgments, and hand-rolling a judge model means calibrating it before its scores mean anything.
TestMu AI's Agent Testing platform is built for that layer. It deploys autonomous testing agents against a chat, voice or phone endpoint and scores each conversation on nine quality dimensions: Hallucination Detection, Bias Detection, Completeness, Context Awareness, Response Quality, Conversation Flow, Tone Consistency, Positive User Outcome and Root-Cause Understanding. Upload a specification or existing documentation and the platform generates 60 to 100 or more test scenarios per workflow, then returns per-scenario transcripts and a Green, Yellow or Red production readiness verdict rather than a raw score dump.
A Flowise chatflow is a plain HTTP chat endpoint, so it connects without an SDK. The testmu-a2a-cli package maps its request and response format onto the prediction API with two flags: a body template that places the message where Flowise expects question, and a response path that pulls the reply out of the text field.
pip install testmu-a2a-cli
export TESTMU_USERNAME=<your-username>
export TESTMU_ACCESS_KEY=<your-access-key>
testmu-a2a test \
--agent https://flowise.internal/api/v1/prediction/<chatflow-id> \
--spec "Support agent for billing, refunds and account changes" \
--header "Authorization: Bearer <flowise-api-key>" \
--body-template '{"question": "{{message}}"}' \
--response-path text \
--count 25 \
--threshold 0.8 \
--format junit \
--output agent-results.xmlThe junit output drops into the same CI job as the harness above, so behavioural scores and structural assertions fail the build through one reporting path. Authentication in a pipeline uses the TESTMU_USERNAME and TESTMU_ACCESS_KEY environment variables rather than an interactive login.
Note: Flowise sunset because coding agents now write what low-code canvases used to assemble. TestMu AI's Kane CLI runs that same idea for testing, driving a real browser from your terminal. Explore Kane CLI
Most teams reading this will move off Flowise within a year, whether to a fork they maintain or to a different platform. The migration that goes badly is the one where nobody wrote down how the old agent behaved, so "it feels worse now" becomes an argument instead of a measurement.
The baseline pays for itself immediately in a second way. It documents what the agent is supposed to do, which is the intent-level specification a Flowise canvas never made explicit, and which our guide to intent-based testing treats as the durable artifact worth keeping across any platform change.
Start today with the fifteen-line smoke test from the harness section pointed at your live chatflow, then add the grounding assertion on sourceDocuments. Those two tests take under an hour and catch the two failures that hurt most: an endpoint that stopped answering, and an answer produced with no retrieved context behind it.
From there, freeze the reference dataset while the Flowise instance is still healthy, because that snapshot only gets harder to capture as the deployment ages without upstream support. Layer behavioural scoring on top when string assertions stop telling you enough, and wire it into the same pipeline through the junit reporter. The Kane CLI documentation covers running agentic checks from the terminal and inside CI if you want the browser-facing half of the same workflow.
Author
Samyak Goyal is a Senior Member of Technical Staff at TestMu AI engineering Kane CLI, the command-line tool that runs browser automation from the terminal, where a flow described in natural language executes in a real Chrome browser and returns pass or fail with shareable proof. He is a backend engineer with 4+ years of experience, previously an SDE at Innovaccer, where he built APIs, introduced Kafka, and cut deployment from weeks to hours. Samyak also builds multi-agent systems, skill-orchestration frameworks, and a personal copilot that indexes 200+ microservice repositories.
Reviewer
Sirajuddin Khan is Vice President of Product Management at TestMu AI (formerly LambdaTest), where he drives the company's agentic AI product strategy, building a suite of autonomous agents that includes Agentic Browsers and Agentic Visual Testing and shifting the unit of work from test execution to autonomous outcomes. One of the company's earliest product leaders, he has owned the roadmap for the high-performance execution cloud and grew the cross-browser testing products from early adoption to market leadership. He brings over a decade of experience across SaaS, B2B, and eCommerce, with earlier product roles at Wydr and ShopClues, where his catalog and search work cut delivery SLAs and lifted seller activity. Sirajuddin holds an MBA in Information Technology from Sikkim Manipal University and a B.Tech in Computer Science Engineering from Maharshi Dayanand University.
Did you find this page helpful?
More Related Blogs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance