How to Automate Manual Test Case Writing from Jira Acceptance Criteria
Turn the acceptance criteria already sitting in your Jira tickets into a reviewed, saved test suite: paste, pick a test type, generate, repeat per type.
For QA Leads who turn sprint tickets into test suites and want a repeatable team workflow for it.
The Ticket Already Holds Your Test Spec
By the time a story reaches Ready for QA, its acceptance criteria describe exactly what has to be true when the work is done. Writing test cases by hand from those criteria means re-typing the same rules as steps and expected results, ticket after ticket.
Evaficy Smart Test has a custom field built for this: Requirement. Text you paste there becomes a mandatory spec for generation. Every generated test case must respect it, and the full set must cover it. This guide maps a Jira ticket onto that field and the inputs around it, so your team gets the same quality of suite from every ticket.
Step 1: Clean the Ticket Before You Paste It
The generator reads everything you paste as part of the spec, so a focused Requirement produces focused cases. Spend a minute separating the testable content from the conversation around it.
Copy
- The ticket key and summary, for example PAY-412 Reuse a saved card at checkout.
- The user story line: As a ..., I want ..., so that ....
- Every acceptance criterion, whether written as Given/When/Then or as a bullet list.
- Business rules stated in the description: limits, formats, permissions, error messages.
Leave behind
- Comment threads, status updates, and @mentions.
- Implementation notes meant for developers (endpoints, table names, refactoring hints).
- References to attachments and screenshots the generator cannot see.
- Criteria marked out of scope or moved to another ticket.
If the criteria themselves are vague ("checkout should be fast"), fix them with the Product Owner before generating. The Acceptance Criteria guide covers how to make them testable.
Step 2: Map Jira Fields to Evaficy Inputs
Each part of the ticket has a natural home in the generator. Using the same mapping on every ticket is what makes the output consistent across your team.
| From the Jira ticket | Into Evaficy | What it does |
|---|---|---|
| Acceptance criteria + business rules (with the ticket key) | Requirement custom field | Treated as mandatory: every generated case must respect it, and the set must cover it. |
| Screen or page the story changes | Affected Page | Anchors the cases to a real place in the product. |
| Epic or feature name | Feature custom field | Narrows the scope to one capability. |
| Component field | Component custom field | Matches the way your team already slices the product. |
| Ticket key | Scenario Name | Keeps the suite findable and travels with every defect pushed back to Jira. |
Step 3: Pick the Test Type from the Ticket
The test type decides the angle of the cases. Functional checks that the ticket's criteria are met. Regression checks that existing behaviour around the change still holds. The ticket's issue type and workflow stage usually tell you which one you need.
| Jira ticket | Test type | Why |
|---|---|---|
| New Story moved to Ready for QA | Functional | Confirms the story does what its acceptance criteria say. |
| Bug ticket after the fix is merged | Regression | Confirms the fixed area and its neighbours still behave as before. |
| Story that changes an existing flow | Functional, then Regression | One pass for the new behaviour, one for the behaviour that must not change. |
| Story with input limits (lengths, ranges, dates) | Boundary Edge Case | Targets the values at and just past each limit. |
| Epic or release about to ship | Smoke, plus Regression | A short go/no-go check and a broader stability check. |
Step 4: Generate the Cases
With the cleaned ticket and the mapping in hand, the generation itself takes a few clicks in the Test Case Selector:
Choose the test type
Pick Functional or Regression (or another type from the table above) in the test type field. Generation needs a type before it starts.
Add the affected page
Click Add Affected Page and enter the screen the ticket changes, such as Checkout.
Paste the ticket into Requirement
Click the Requirement chip under custom fields. It opens a multi-line box; paste the ticket key, user story, and acceptance criteria there. Labelling a custom field Acceptance Criteria gets the same strict treatment.
Add Feature and Component
Use the Feature and Component chips for the epic and the Jira component. They narrow the scope further.
Click Generate
Each generation returns up to 10 test cases, usually around 7, with steps, preconditions, test data, expected results, and a priority. New cases appear above anything already in the editor, so nothing you have is replaced.
Review, edit, and select
Read every case against the ticket. Edit wording, delete what does not apply, and add a blank case for anything the team knows from experience that the criteria do not mention.
Save with the ticket key
Click Save, choose the project, and give the scenario a name that starts with the ticket key, such as PAY-412 Saved card checkout (Functional). The scenario keeps your type, affected page, and custom fields, including the Requirement text.
Custom fields, including Requirement, are available on every plan. For how each input shapes the output in general, see Writing Effective Inputs for AI Generation.
Step 5: Build the Full Suite in Passes
One generation focuses on one test type and returns up to 10 cases, which is a deliberate size for careful review. A full suite for a ticket comes from running one pass per type you need, with the same Requirement text each time.
The pass recipe
- Functional pass: generate, review, save as PAY-412 ... (Functional).
- Regression pass: switch the type to Regression, keep every other input, generate, review, save as PAY-412 ... (Regression).
- Optional passes: Boundary Edge Case for input limits, Smoke for a release check.
Saving one scenario per type keeps each suite labelled with the type it was generated for, which is how a scenario records it. Each pass uses one AI generation from your plan: the Basic plan includes 5 in total, Advanced 200 per month, and Enterprise 500 per month. A typical Functional plus Regression suite for one ticket uses two.
When the ticket's criteria change later, open the saved scenario: its Requirement field is restored, so you can update the text and generate the changed cases without rebuilding the inputs.
Worked Example: One Story, Two Passes
Here is a typical story as it appears in Jira, then the version that goes into the Requirement field.
PAY-412 Reuse a saved card at checkout Status: Ready for QA Component: Payments Epic: Checkout v2 As a returning customer, I want to pay with a card I saved earlier, so that I can complete checkout faster. Acceptance criteria - Saved cards are listed on the payment step, showing brand and last 4 digits. - Selecting a saved card asks only for the CVC. - Expired saved cards are shown as disabled with the label "Expired". - A customer can remove a saved card; it disappears from the list immediately. Dev notes: uses /api/v2/wallet, see PR #1881 Comments (6) @dana can we reuse the old modal? ...
PAY-412 Reuse a saved card at checkout. As a returning customer, I want to pay with a card I saved earlier, so that I can complete checkout faster. - Saved cards are listed on the payment step, showing brand and last 4 digits. - Selecting a saved card asks only for the CVC. - Expired saved cards are shown as disabled with the label "Expired". - A customer can remove a saved card; it disappears from the list immediately.
The status line, dev notes, and comments stayed in Jira. Epic and component went to their own fields. The two passes then use these inputs:
| Input | Pass 1 | Pass 2 |
|---|---|---|
| Test type | Functional | Regression |
| Affected Page | Checkout | Checkout |
| Requirement | Cleaned ticket above | Cleaned ticket above |
| Feature / Component | Checkout v2 / Payments | Checkout v2 / Payments |
| Scenario Name | PAY-412 Saved card checkout (Functional) | PAY-412 Saved card checkout (Regression) |
The Functional pass targets the four criteria directly: listing, CVC-only payment, the expired state, and removal. The Regression pass looks at what the story touches: paying with a new card, the payment step for a customer with no saved cards, and the rest of checkout around it.
Step 6: Close the Loop Back to Jira
Run the saved scenario as a test run (see the Test Run Execution guide). When a case fails, log a defect and set its Linked Scenario. If your project has the Jira integration configured, push the defect to Jira from the defect view.
The ticket key travels back with the bug
Team Conventions for QA Leads
- Generate when a ticket enters Ready for QA, so criteria are final and the suite is ready when the build lands.
- Name every scenario with the Jira key first, then a short description, then the type in brackets.
- Keep one shared cleaning checklist (copy / leave behind) so every tester pastes the same shape of Requirement.
- Have a second person review generated cases against the ticket before the scenario is used in a run.
- Treat a ticket that produces vague cases as a signal to sharpen its acceptance criteria, then regenerate.
Common Questions
Does Evaficy pull tickets from Jira automatically?
You paste the ticket text into the Requirement field yourself. The Jira integration sends defects from Evaficy to Jira.
Can I paste the whole ticket, comments included?
You can, but everything in Requirement is treated as part of the spec. Cleaned criteria give tighter, more relevant cases.
Can one generation produce both Functional and Regression cases?
Each generation uses one test type. Run one pass per type and save each as its own scenario.
How many cases does a ticket get?
Up to 10 per pass, usually around 7. Two passes typically give a story 12 to 16 cases to review, plus any you add by hand.
Does Requirement replace the test type and affected page?
It works alongside them. The cases follow the type, the page, and every custom field, with the Requirement as the rule they all must satisfy.
Key Takeaways
- Clean the ticket first: keep the key, story, criteria, and rules; leave comments and dev notes in Jira.
- Paste the cleaned text into the Requirement custom field, which generation treats as mandatory.
- Map the rest of the ticket consistently: page to Affected Page, epic to Feature, component to Component.
- Pick the type from the ticket: Functional for new stories, Regression for fixes and changed flows.
- Build the full suite in passes, one scenario per type, each named with the Jira key.
- Defects pushed back to Jira carry the linked scenario name, so the key leads straight back to the story.
Turn your next Jira ticket into a test suite
Create your free account, paste a ticket into the Requirement field, and generate your first suite. The Basic plan includes 5 AI generations.
Create your free account