Documentation
Using Testfolio
Testfolio turns a feature description, an issue or API definitions into test scenarios and manual test cases that you review, edit and export. This guide covers what each part of the app does today.
Contents
Quick start
- Open the app and paste what you want to test into the box: a feature description with its acceptance criteria, an issue, API documentation or cURL commands. To add OpenAPI, Swagger or Postman files, choose Add files or drop them on the box.
- Optionally set the scope under Options (Auto, Web, Mobile or API) and the Output language the tests should be written in.
- Choose Generate tests (or press ⌘ Enter / Ctrl Enter). Testfolio drafts scenarios, each with its test cases, plus any open questions it found. The results appear on the same page, directly below your input, and the page scrolls down to them.
- Review the tests: select a row to expand it, choose Edit to change it, and answer open questions.
- Choose Download and pick Excel, Markdown or CSV.
No account is needed. To see how results look without generating anything, choose View sample results (or Sample results in the ⋯ menu). Sample results are bundled with the app, labelled Sample, and are never presented as tests generated from your input.
What you can provide
You can combine text and files in one request. Testfolio uses everything you provide together.
Text
- Feature descriptions, user stories and acceptance criteria.
- Issue or bug text, including reproduction steps and expected behaviour.
- API documentation pasted as text.
- cURL commands pasted into the text. They are detected and read as API requests; the rest of the text is kept as description.
The text box takes up to 60,000 characters. A counter appears as you get close to the limit.
API files
- OpenAPI 3.x and Swagger 2.0, as .json, .yaml or .yml.
- Postman Collection v2.0 and v2.1 (.json). Collection v1 isn't supported; export it from Postman as v2.1.
- Up to 5 files per request, each up to 2 MB.
Files are read in your browser. References inside a file are followed; references to other files or URLs are reported and never fetched. Very large definitions can exceed what one request accepts; if that happens, attach only the parts you want to test.
Getting useful results
- State the rules. Limits, formats, permissions, error messages and what should happen in each case lead to precise expected results.
- Say what is out of scope, and set the scope (Web, Mobile or API) when it matters. Auto follows what your input describes.
- Name real values where you know them, such as field lengths or time limits, so boundary tests use them.
When information is missing
Testfolio doesn't silently fill gaps. Where your input is unclear it adds an open question, marks affected tests as Needs clarification, and labels tests that rely on a guess with the basis Assumption rather than Documented. If the input is too thin to test at all, it asks for more detail instead of generating tests.
Example input
Example: contacts search
Feature: Contacts search
Users can search their contacts by name from the search box above the contact list.
Rules
- Matching ignores upper and lower case.
- Partial names match from the start of the first or last name ("Sar" finds "Sara Ahmadi").
- Results update after the user stops typing for 300 ms.
- Users only see contacts they have access to.
- If the contacts service fails, show "Couldn't load contacts" with a Retry button and keep the query.
Out of scope: search by phone number.
Scope: web app.Reviewing and editing
Results sit below the input on the same page. At the top you see the test set's title (select it to rename the set), how many scenarios and test cases it has, and Download. Two tabs organise the results:
- Test cases (shown first) lists every test with its ID, title and priority. Select a row to expand it in place; select it again to collapse it. Several rows can be open at once, and the first test starts expanded.
- Scenarios gives an overview: each scenario's title, objective, number of test cases, priority and how many tests need an answer. View tests switches to Test cases filtered to that scenario. A scenario's ⋯ menu adds a test to it, edits it, improves it with AI or deletes it.
An expanded test shows:
- its objective, when it says more than the title;
- preconditions: what must be true before you start;
- test data: the specific values to use, if any;
- steps: each step has an action and the expected result you check (on a phone, they stack);
- and, under References, category and assumptions, its scenario, source references, category, basis (Documented, Assumption or Exploratory) and readiness.
Finding tests
On the Test cases tab, All scenarios filters the list to one scenario and Find a test searches titles and IDs. When a filter is on, the list says how many of the total it shows, with Clear filters. Expanded rows stay expanded while you filter. Filters only change what you see; they never change what is downloaded.
Editing
Choose Edit in an expanded test to change any field, add, reorder or remove steps, then Done. The test's ⋯ menu duplicates or deletes it. Add test case below the list creates a new test; Testfolio asks which scenario it belongs to only when that isn't clear from the filter. Deleting can be undone.
Copy puts the test on the clipboard as plain text with numbered steps. Edits are saved automatically in this browser; under the input box it says Saved on this device, or Not saved in red if saving fails.
Changing the input
Your input stays in the box above the results, so you can read or change it at any time. Changing it doesn't change the results: under the box, Input changed since these results were generated tells you they no longer match. Restore that input puts the input the results came from back into the box (you can undo that).
- Choose Generate tests again to create a new set from the current input. If the current set has changes, such as edits, answers or applied AI changes, Testfolio asks before replacing it.
- The replaced set is kept. Choose Restore in the confirmation, or ⋯ → Restore previous set, to bring it back.
- While new tests are generating, the current results stay on screen. If generation fails or you cancel it, your results and your input are left exactly as they were.
Open questions
An open question is something your input didn't settle that affects how a test should be written or judged. Needs clarification means a test depends on such a question, so its expected result may change once it is answered. You can also set a test's readiness yourself while editing it.
Questions appear on the tests they affect, in a box headed Needs an answer before this test can run. All questions and assumptions are also listed under ⋯ → Questions & assumptions.
Answering
- Save answer only records your answer and marks the question answered. The tests stay as they are; update them yourself if needed.
- Update affected tests sends your answer to the AI, which proposes changes to the related tests. Nothing changes until you review and apply the proposal. This needs live generation.
AI refinement and undo
Improve tests, next to the result tabs, opens a small panel where you pick a scenario and describe the change, for example “add negative cases” or “check boundaries”. The AI revises that scenario's tests. Refinement works on one scenario at a time; improving the whole set or a single test in one request isn't supported.
Reviewing proposed changes
Proposals are listed as additions, edits and removals. Each has a checkbox and a Show changes view. Choose Apply selected to apply the ones you keep, or Discard.
- If a proposal would replace a test you edited by hand, it is marked “You edited this” so you can leave it unticked.
- If a test changed or was deleted after the proposal was made, that change is skipped rather than overwriting your newer version.
Undo
After applying AI changes, a translation or a deletion, choose Undo in the confirmation, or use the history button in the⋯ menu at the top of the page. The last 10 of these changes can be undone. Manual edits to fields aren't part of this history.
Languages
- Interface language (English, Persian or Arabic) changes the app's menus and labels. Persian and Arabic use a right-to-left layout. It doesn't change your tests.
- Output language, next to Generate tests, is the language new tests are written in.
To translate an existing set, use the ⋯ button next to Improve tests and choose a language under Translate test set. The whole set is translated, including your edits; IDs, structure and your selection stay the same, and you can undo it. Translation needs live generation. Review translated wording, especially domain terms and exact UI text, which may need to stay in the original language.
This documentation is available in English only.
Export
Download exports all tests by default, always including your latest edits. The menu states the scope before you pick a format.
- To export some tests, choose Download → Choose tests…. Checkboxes appear in the list, with a bar showing how many are selected, Select all and Clear selection. Choose Done choosing to hide the checkboxes; the selection stays, and Download shows its count.
- Search and filters are separate from the selection. Selected tests stay selected when a filter hides them, and the bar tells you how many are hidden. A search never limits a download on its own.
- To go back to exporting everything, choose Clear selection in the Download menu.
Formats:
- Excel (.xlsx): a Test Cases sheet with one row per test, plus Scenarios and Open Questions sheets. The header row is frozen, filters are on, and an Execution Status column has a Not Run / Pass / Fail / Blocked list, with an empty Actual Result column for your test run. Persian and Arabic sets use right-to-left sheets.
- Markdown (.md): a readable document with the summary, assumptions, open questions and every test grouped by scenario, with steps as numbered actions and expected results.
- CSV (.csv): the same columns as the Test Cases sheet, in UTF-8 so Persian and Arabic text opens correctly in spreadsheet apps.
Test case columns are: ID, Scenario ID, Scenario, Title, Objective, Preconditions, Test Data, Steps, Expected Results, Priority, Category, Basis, Readiness, Clarification, Linked Questions, Source References, Execution Status and Actual Result. Cells that begin with characters a spreadsheet would treat as a formula are exported as plain text.
Exports are general-purpose files. Testfolio doesn't provide a direct import format for any specific test management tool, so check the column mapping when importing them elsewhere.
Saving and privacy
Saved on this device
Your draft, test sets, undo history and settings are saved in this browser's local storage. They aren't synced to other browsers or devices, and they are lost if you clear site data, use a private window that you then close, or the browser removes them. Export anything you need to keep.
- Restore previous set (in the ⋯ menu) brings back the test set you had before your latest new one.
- If saved data can't be read, Testfolio sets it aside as a backup instead of discarding it, and tells you.
- Clear local data permanently removes everything Testfolio stored in this browser. It can't be undone.
What is sent to the AI provider
When you generate tests, improve a scenario, update tests from an answer or translate, Testfolio sends your text, the API details read from your files and, where relevant, the current test set to its server, which passes them to the AI provider configured for this installation. The provider's own terms govern how it handles that data. Testfolio's server doesn't log your input or the generated tests; it records only usage metadata such as token counts and an estimated cost. Browsing sample results and editing tests send nothing.
Credential redaction
Before anything is saved or sent, Testfolio replaces credential values with [REDACTED]: authorization, API-key and cookie headers, password- and token-like fields, tokens in URLs, cURL user passwords and well-known key formats. Authentication requirements such as the scheme and header names are kept so they can still be tested. Placeholders such as {{token}} are left alone.
Troubleshooting
- “AI generation isn't connected on this server”
- This installation has no AI provider configured, so Generate tests, Improve tests, Update affected tests and translation are unavailable. You can still explore sample results, edit and export. Ask whoever runs Testfolio to set up a provider.
- Sample or live output?
- Sample results show a Sample label next to the title, and their Markdown export says they are bundled sample data. Generated sets have no such label; their Markdown export notes that they are an AI-generated draft and haven't been executed.
- An API file is rejected
- The message says why: the format isn't supported (use OpenAPI 3.x, Swagger 2.0 or Postman v2.x), the file is over 2 MB, it couldn't be read as JSON or YAML, or it is empty. Fix or re-export the file and attach it again.
- Generation or refinement fails
- Provider errors, timeouts, rate limits (“Too many AI requests”) and incomplete answers show a message with Retry. Your input and the results already on the page are kept, so you can retry or shorten the input. Nothing is applied from a failed or cancelled request.
- “Not saved”
- The browser's storage is unavailable or full, for example in some private modes. Your work stays on screen but won't survive a reload. Download an export now, then free up storage or use a normal window.