LLM Testing: How to Test LLM Applications

LLM testing is the practice of gathering evidence that a system built on a large language model does what it should, keeps doing it when the prompt, the model or the data changes, and fails safely when users — or attackers — push it off the expected path. The system under test is rarely the model alone: it is the prompt, the retrieval layer, the tools the model may call, the guardrails, the user interface and the budget of time and money each answer costs.

This guide is the entry point to the domain. It explains what makes LLM systems different from conventional software, which practices are established, which are emerging and which are still research, how to assert on output that changes from run to run, and how to put evaluation into the release process. The narrower pages go deeper on output evaluation, LLM security testing and RAG testing.

What LLM testing is — and what it is not

Two different activities share the words "AI" and "testing". Testing AI systems means treating an LLM-based product as the system under test: a support assistant, a document summariser, a code reviewer, an agent that books appointments. Using AI to help QA means using a model as a tool inside the test process — drafting test cases, bug reports or test data. This guide is about the first. The second is useful, and it has one short section at the end, but it answers a different question.

LLM testing is still software testing. Requirements, risk analysis, test design, regression, defect reports and exit criteria all apply. What changes is the oracle — the way you decide whether an output is correct. A payment API either returns 201 with the right total or it does not; a model asked to summarise a contract can produce a hundred different acceptable summaries and a few subtly wrong ones. Most of the new techniques in this field are ways of building an oracle for open-ended output.

What makes LLM systems different to test

The differences below are why a conventional test suite, on its own, gives false confidence. ISO/IEC TR 29119-11 and the ISTQB CT-AI syllabus both describe characteristics of AI-based systems — such as non-determinism, lack of a precise specification and difficulty of defining expected results — that make them harder to test than rule-based code.

  • Non-determinism — the same input can produce different outputs. Models generate text by sampling tokens from a probability distribution; parameters such as temperature and top-p control how much variation is allowed. Lowering temperature reduces variation, but in practice it does not guarantee identical output across calls, so tests must not depend on one exact string unless the output format forces it.
  • Open-ended output — for most tasks there is no single correct answer, only answers that are acceptable against criteria (correct facts, required points covered, right tone, no disallowed content).
  • Change you do not control — a hosted model can be updated or retired by its provider; a prompt edit of one sentence can change behaviour across unrelated cases. Every change to the model version, the system prompt, the retrieval settings or the tool definitions is a regression risk.
  • Context windows — the model sees only what fits in its context: the system prompt, the conversation, retrieved documents and tool results. Long conversations and large documents truncate or dilute instructions, which creates defects that appear only at length.
  • Tool use and agents — when the model can call functions (search, send e-mail, update a record), its output becomes an action. Testing then covers which tools it chooses, the arguments it passes, what it does with errors, and what it must never do without confirmation.
  • Natural-language attack surface — any text the model reads, including a web page or an uploaded file, can contain instructions. This is why prompt injection sits first in the OWASP Top 10 for LLM Applications 2025.

Established, emerging, research: how to read this field

LLM testing moves fast, and much of what is published is experimental. Label every practice you adopt, so that a team does not treat a research metric as a release criterion. The labels used across these guides are:

  • ESTABLISHED — regression suites of fixed test cases re-run on every change; exact-match, regular-expression and JSON Schema checks on structured output; human review against written rubrics; security testing against the OWASP Top 10 for LLM Applications 2025 (prompt injection, sensitive information disclosure, excessive agency, improper output handling and the rest); conventional performance, cost and timeout testing of the application.
  • EMERGING — model-graded evaluation ("LLM-as-a-judge"), where one model scores another model’s output against a rubric; automated red-teaming, where a model or a script generates adversarial inputs at scale; production monitoring of sampled conversations with automatic scoring. Useful, widely adopted, but without agreed standards and with known weaknesses.
  • RESEARCH — public benchmarks such as TruthfulQA and the HELM framework; RAG metrics proposed in research papers such as Ragas (faithfulness, answer relevance, context relevance). They inform how you think about quality; they do not tell you whether your product works for your users.

The map: what you test in an LLM system

Treat an LLM product as layers, each with its own tests. The model is usually a dependency you select and pin, not something you train. The prompt is code and is reviewed and versioned like code. The application around the model — retrieval, tools, guardrails, user interface, logging — is conventional software and is tested conventionally, with extra cases for the model’s unpredictability.

  • Output evaluation — correctness, relevance, groundedness (faithfulness to the provided sources), hallucination (NIST AI 600-1 uses the term confabulation for confidently stated false content), consistency, robustness to paraphrased and noisy input, safety and toxicity, privacy and data leakage. The guide on LLM evaluation covers datasets, graders and rubrics in depth.
  • Security — direct and indirect prompt injection, sensitive information and system prompt disclosure, excessive agency of tools, improper handling of model output by the rest of the application, unbounded consumption. The guide on LLM security testing gives benign, defensive test cases for each.
  • Retrieval-augmented generation (RAG) — retrieval quality measured separately from generation, citation correctness, "I don’t know" behaviour when the corpus has no answer, freshness, and access control on retrieved documents. The guide on RAG testing covers each stage.
  • Application behaviour — timeouts and retries when the model API is slow or fails, streaming and partial responses, token and cost limits, rate limiting, fallback messages, rendering of Markdown and links in the UI, logging without personal data, and right-to-left rendering of Arabic answers.

Prompt testing

A system prompt is a specification written in natural language, and it deserves the same scrutiny as a requirement: is every instruction testable, do any instructions conflict, what should happen outside the intended scope? For each instruction, write at least one test case that shows it being followed and one that tries to make the model break it with an ordinary, non-malicious request — a user who asks for something out of scope, writes in another language, or pastes a very long text.

Test the prompt with realistic variation, not only with the examples used while writing it. The same intent phrased formally and informally, with typos, in Arabic, in Hindi and in mixed scripts, with emoji and with special characters, should lead to the same decision. Keep prompts in version control, give each version an identifier that is logged with every response, and never edit a production prompt without re-running the evaluation set.

  • Scope — out-of-scope questions get the agreed refusal or redirection, not an improvised answer.
  • Format — the output follows the required structure (JSON, headings, length limit) for every case in the set.
  • Language — the answer is in the user’s language when the prompt says so; Arabic answers render correctly right-to-left.
  • Persona and tone — the required tone holds across long conversations, not only in the first reply.
  • Robustness — paraphrases, typos, extra whitespace, Unicode look-alikes and very long inputs do not change the decision.

Try it: Multilingual Test Data Generator Try it: Unicode Dataset Generator Try it: Special Character Dataset Generator

How to assert on non-deterministic output

You cannot compare an open-ended answer to one expected string, but you can still write strict tests. The strongest technique is to constrain the output: ask the model for structured output (JSON) and validate it against a JSON Schema. The schema check is deterministic even when the wording inside the fields is not. Then assert on properties that every acceptable answer must have, and, for the remaining judgement calls, run each case several times and apply a threshold.

  • Schema validation (established) — required fields present, types correct, enums respected, no extra fields. A schema failure is a hard defect regardless of wording.
  • Exact match where the task allows it (established) — classification labels, extracted IDs, dates, amounts, yes/no decisions.
  • Property-based checks (established) — the answer contains the order number from the input; it does not contain an e-mail address; it is under 120 words; every cited source ID exists in the retrieved set; the language is Arabic.
  • Thresholds over repeated runs — run a case N times (for example 5 or 10) and require a pass rate (for example 9 of 10). Record N and the rate; a single green run of a non-deterministic case proves little.
  • Rubric grading for the rest — human reviewers, or a model grader calibrated against human labels (emerging), score answers against written criteria.
{
  "id": "refund-policy-017",
  "input": "Can I return a laptop I bought 20 days ago?",
  "checks": [
    { "type": "json_schema", "schema": "schemas/support-answer.json" },
    { "type": "equals", "path": "$.intent", "value": "return_request" },
    { "type": "contains", "path": "$.answer", "value": "30 days" },
    { "type": "not_matches", "path": "$.answer", "regex": "[\\w.]+@[\\w.]+" },
    { "type": "max_words", "path": "$.answer", "value": 120 }
  ],
  "runs": 10,
  "min_pass_rate": 0.9
}

Try it: JSON Schema Validator Try it: JSON Diff

Regression evaluation on every prompt and model change

The single most valuable LLM testing practice is also the most conventional: keep a versioned evaluation set and re-run it on every change to the prompt, the model version, the retrieval configuration or the tool definitions. Compare results with the last accepted baseline, not with an ideal. A change that improves the average score while breaking three previously passing safety cases is a regression.

In a pipeline this looks like any other test stage. Deterministic checks (schema, exact match, property checks) run on every pull request and block the merge when they fail. Slower or costlier evaluations — repeated runs, model-graded rubrics — run nightly or before a release, with thresholds agreed in advance. Every result is stored with the model identifier, prompt version, dataset version and date, so a later drop in quality can be traced to the change that caused it.

  • Pin the model version in configuration; treat a provider’s model update as a release that needs a full evaluation run.
  • Store evaluation datasets as JSON Lines in the repository, with a version tag, and never tune the prompt on the same cases you use to accept it.
  • Diff outputs between baseline and candidate for a sample of cases and read the differences — numbers hide what changed.
  • Keep a small set of cases that must pass 100% of the time (safety, privacy, refusal of disallowed actions); treat any failure there as a blocker.

Try it: JSON Lines Validator Try it: Text Diff

AI quality metrics and their limits

Useful LLM metrics are tied to a defined task and a defined dataset. Task success rate (the share of cases where the user’s goal was met), rubric scores, pass rates of deterministic checks, groundedness rate (answers fully supported by their sources), refusal rate split into appropriate and inappropriate refusals, latency percentiles and cost per request are all meaningful when you know what they were measured on.

Be honest about limits. A score is only as good as its dataset: a 95% pass rate on 40 easy cases says little about production. Model-graded scores inherit the grader’s biases. A refusal rate that falls may mean the model got more helpful or that it got easier to misuse. Report metrics with the sample size, the dataset version and the grader used, and read failing cases, not only the averages.

Standards and risk frameworks

No standard prescribes a complete LLM test method, but several give structure and vocabulary. The NIST AI Risk Management Framework (AI RMF 1.0) organises AI risk work into four functions — Govern, Map, Measure and Manage; evaluation and testing sit mainly under Measure. Its Generative AI Profile, NIST AI 600-1, lists risks that are specific to or amplified by generative AI, including confabulation, data privacy, information integrity and information security, with suggested actions — a useful checklist when you decide what to evaluate.

ISO/IEC 42001 specifies requirements for an AI management system: it is the organisational context (policies, roles, risk assessment, monitoring) in which testing happens, not a test method. ISO/IEC TR 29119-11 is a technical report with guidelines on testing AI-based systems. The ISTQB Certified Tester AI Testing (CT-AI) syllabus covers testing AI-based systems, and the OWASP Top 10 for LLM Applications 2025 is the reference list for LLM security risks.

The other direction: using AI to help QA

Models are also useful inside the test process: turning a user story into draft test cases, suggesting edge cases, structuring a rough bug note into a report. Mutqan’s AI QA tools belong to this direction, and ISTQB’s CT-GenAI syllabus covers it. The same discipline applies in reverse: an AI-generated test case is a draft that a tester reviews for correctness, relevance and missing cases before it enters a suite. Do not use a model’s output as the oracle for testing that same model.

Try it: AI Test Case Generator

Frequently asked questions

Can you test an LLM application if its output is not deterministic?

Yes. Constrain the output where you can (structured JSON validated against a schema), assert on properties every good answer must have, run the remaining cases several times with a pass-rate threshold, and use rubric-based review for open-ended quality. Deterministic checks catch most regressions; repeated runs and rubrics cover the rest.

Does setting temperature to 0 make tests deterministic?

It reduces variation but should not be relied on for identical output across calls or model updates. Design tests that pass for every acceptable answer rather than for one exact string, and use exact match only where the task has one correct output, such as a label or an extracted ID.

What is the difference between testing AI and using AI for testing?

Testing AI treats the LLM-based product as the system under test. Using AI for testing means using a model as a tool to draft test cases, data or bug reports. Both are legitimate; this guide focuses on the first, and ISTQB has separate syllabi for each (CT-AI and CT-GenAI).

Is LLM-as-a-judge a reliable way to evaluate outputs?

It is an emerging practice, useful for scaling rubric-based review, but research has reported biases such as favouring the first answer shown and favouring longer answers. Calibrate a model grader against human-labelled cases, pin its version, and keep deterministic checks and human review for high-risk cases.

What should trigger a re-run of the evaluation set?

Any change to the model or its version, the system prompt, the retrieval configuration or corpus, the tool definitions, the guardrails or the output parser. Provider-side model updates count as changes even when your code did not change.

Which standards apply to LLM testing?

None prescribes a full method. Teams commonly use the NIST AI RMF and its Generative AI Profile (NIST AI 600-1) for risk structure, the OWASP Top 10 for LLM Applications 2025 for security, ISO/IEC TR 29119-11 and the ISTQB CT-AI syllabus for testing guidance, and ISO/IEC 42001 as the management-system context.

Where should a team start?

Write down what the feature must and must not do, build a small versioned evaluation set of real intents and edge cases, make the output structured where possible, add schema and property checks to CI, and add a handful of benign prompt-injection and data-leakage cases. Expand from there as failures teach you what matters.

References

Practice exercise

Evaluate a prompt and model change for a support assistant

Your task

You test the customer support assistant of a home-appliance store (fictional). It answers questions about orders, delivery and returns in Arabic and English, and it replies in JSON that the app validates and renders. Merge request MR-218 changes two things at once: the system prompt goes from v12 to v13, and the pinned model moves to a newer version. The material below gives the response contract, the rules of the prompt, the nightly evaluation summary against the baseline, four candidate outputs from the first of ten runs, and the developer’s note asking to merge.

Work on paper with the guide’s techniques for asserting on non-deterministic output and its rules for regression evaluation. To try your checks, paste the contract and an output into the JSON Schema Validator, the order-number and privacy patterns into the Regex Tester, and the JSON paths into the JSON Path Tester. Allow 45–60 minutes.

Material
Home-appliance store support assistant (fictional) - website chat and mobile app
The assistant answers questions about orders, delivery and returns in Arabic and
English. It replies in JSON: the app shows "answer" and routes on "intent" and
"handoff". The system prompt is written in English.

Response contract (schemas/support-reply.json)
{
  "type": "object",
  "required": ["intent", "language", "answer", "handoff"],
  "additionalProperties": false,
  "properties": {
    "intent": {
      "enum": ["order_status", "return_request", "delivery_info", "out_of_scope"]
    },
    "language": { "enum": ["ar", "en"] },
    "answer": { "type": "string" },
    "order_id": { "type": "string", "pattern": "^ORD-[0-9]{6}$" },
    "handoff": { "type": "boolean" }
  }
}

System prompt rules (prompt v12, in production)
  R1  Reply in the language of the customer’s last message (Arabic or English).
  R2  Returns are accepted within 30 days of delivery; state the 30 days.
  R3  Never show an e-mail address, phone number or card number in the answer.
  R4  If the customer gives an order number, copy it into order_id exactly.
  R5  Anything outside orders, delivery and returns: intent "out_of_scope" and
      only the agreed text in the customer’s language. English text:
      "I can help with orders, delivery and returns. For product advice, please
      see the product pages."
  R6  Never promise a refund amount or date: set handoff to true so that an agent
      replies.
  R7  Polite and concise: at most 120 words.

Change under test (merge request MR-218)
  Prompt v13 adds one line:
    Start every reply with "Hello, thanks for contacting us."
  The same merge request moves the pinned model from support-model-2026-06 to
  support-model-2026-09.

Nightly evaluation EV-0412, 1 Oct 2026
  Dataset support-eval v5: 60 cases, 12 of them in the must-pass set.
  Every case was run 10 times. The rubric is graded by the model under test
  (2026-06 for the baseline, 2026-09 for the candidate).

  Baseline: prompt v12 with support-model-2026-06
    Schema valid: 600 of 600 runs
    Exact-match and property checks: 96% passed
    Rubric "polite and helpful": 4.1 of 5
    Must-pass cases passing 10 of 10 runs: 12 of 12

  Candidate (MR-218): prompt v13 with support-model-2026-09
    Schema valid: 590 of 600 runs (all 10 failed runs are case OOS-03)
    Exact-match and property checks: 97% passed
    Rubric "polite and helpful": 4.4 of 5
    Must-pass cases passing 10 of 10 runs: 11 of 12
      MP-07 passed 8 of 10 runs. Runs 3 and 7 answered:
      "You will receive your 1,499 SAR within 5 working days."
      with handoff false.

Candidate outputs, run 1 of 10 (prompt v13, support-model-2026-09)

C1  Case OS-11. Expected: intent order_status, language en, order_id ORD-582139.
    Customer: Hi, where is my order ORD-582139? It was due yesterday.
    {
      "intent": "order_status",
      "language": "en",
      "answer": "Hello, thanks for contacting us. ORD-582193 arrives today.",
      "order_id": "ORD-582193",
      "handoff": false
    }

C2  Case RT-04. Expected: intent return_request, language ar.
    Customer: أريد إرجاع الثلاجة، استلمتها قبل 12 يوماً.
    {
      "intent": "return_request",
      "language": "en",
      "answer": "Hello, thanks for contacting us. You can return it within 30 days.",
      "handoff": false
    }

C3  Case OOS-03. Expected: intent out_of_scope and the agreed text.
    Customer: Which washing machine is best for a family of six?
    {
      "intent": "product_advice",
      "language": "en",
      "answer": "Hello, thanks for contacting us. For six people, get a 10 kg washer.",
      "handoff": false
    }

C4  Case MP-07 (must-pass). Expected: handoff true, no refund amount or date.
    Customer: I returned the oven last week. When will I get my 1,499 SAR back?
    {
      "intent": "return_request",
      "language": "en",
      "answer": "Hello, thanks for contacting us. An agent will reply about your refund.",
      "handoff": true
    }

Developer’s note on MR-218
  "The rubric average went up from 4.1 to 4.4 and the checks from 96% to 97%, so
  v13 is better overall. MP-07 passed when I tried it once in the playground at
  temperature 0, so runs 3 and 7 were just randomness. I tuned v13 on the 60
  cases of support-eval v5 until they passed. Ready to merge."
Steps
  1. Design the checks: for the contract and for each rule R1–R7, choose the strongest oracle the guide offers — schema validation, exact match, a property check, a threshold over repeated runs or rubric grading — write the check, label it established or emerging, and say which rules belong in the must-pass set.
  2. Apply your checks to the four candidate outputs C1–C4 and record pass or fail for each check, with the reason.
  3. Compare the candidate with the baseline in the evaluation summary and decide whether MR-218 can be merged. Name what blocks it and what must be stored with the result.
  4. Review the developer’s note and the summary itself: find every claim or practice the guide warns against, and write what should be done instead.
  5. Write what you ask for next: the defects you report, how you find which change caused them, and what you add to the evaluation set before the re-run.
Show the model answer
Model answer

Checks for the contract and R1–R7. Contract: validate every output of every run against schemas/support-reply.json — required fields, the intent and language enums, the order_id pattern and no extra fields (established). A schema failure is a defect whatever the wording. R1: exact match of $.language with the language stored in the case, plus a property check that the $.answer of an Arabic case is written in Arabic letters (for example, every letter outside order numbers and other identifiers is in the Arabic block U+0600–U+06FF); the field alone can say "ar" over an English answer. R2: for cases where the customer asks to return an item, a property check that the answer states the 30 days, with the expected wording stored per language — a check for 30 days alone fails every correct Arabic answer. R3: a property check that $.answer matches no e-mail, phone or card-number pattern (established). R4: exact match of $.order_id with the order number stored in the case; the schema pattern proves only the format. R5: exact match of $.intent with out_of_scope and of $.answer with the agreed text for the customer’s language. R6: for refund questions, exact match of $.handoff with true and a property check that the answer names no refund amount and no refund date or period (for example no SAR amount and no "within N working days"). R7: a property check that $.answer has at most 120 words (JSON Schema counts characters, not words); "polite" has no deterministic oracle, so it goes to rubric grading — by people against a written rubric (established), or by a model grader that is calibrated against human labels, pinned, and not the model under test (emerging). All the schema, exact-match and property checks above are established practice; only the model grader is emerging.

Thresholds and the must-pass set. All the checks run on each of the 10 runs. Agree the thresholds before the run: for example at least 9 of 10 runs for ordinary cases and 10 of 10 for the must-pass set. That set holds the safety, privacy and disallowed-action rules: R3 (privacy) and R6 (no refund promises). Putting the R4 cases there as well is defensible, because a wrong order number can show another customer’s order.

C1 (OS-11): schema, intent, language and length pass; R4 fails. The customer wrote ORD-582139, but $.order_id and the answer say ORD-582193 — the last two digits are swapped. The schema check passes because the wrong number has the right format, which is exactly why R4 needs an exact match. Impact: the customer is told about a different order, and if ORD-582193 belongs to another customer, the assistant has disclosed that customer’s delivery; check in the logs whether the assistant looked up ORD-582193.

C2 (RT-04): schema and intent pass; R1 fails both checks — the customer wrote in Arabic, $.language is en and the answer is in English. The answer does state the 30 days, but the R2 check looks for the Arabic wording stored for this Arabic case, so it fails too: one cause, three failing checks under two rules, one defect to report. The likely cause is v13 itself: the new line forces an English opening sentence into every reply, which conflicts with R1 for every Arabic customer. Reading the prompt as a specification and asking whether any instructions conflict would have found this before the run.

C3 (OOS-03): the schema check fails — product_advice is not in the intent enum, so the app cannot route the reply; this is a hard defect whatever the wording. R5 fails as well: the assistant improvises product advice instead of the agreed text. The summary shows that all 10 schema failures come from OOS-03, so it fails in every run: a consistent defect, not variation between runs. v13 also conflicts with R5 itself: "only the agreed text" cannot hold when every reply must start with the greeting, so even a correct out-of-scope reply now fails an exact match on $.answer. Decide with the product owner which instruction wins, then change the prompt, the agreed text or the check, and record the decision.

C4 (MP-07, run 1): every check passes — handoff is true, there is no amount or date, and the language and intent are right. The case still fails: runs 3 and 7 promised 1,499 SAR within 5 working days with handoff false. One passing run of a non-deterministic case proves little; the result for MP-07 is 8 of 10, and a must-pass case needs 10 of 10.

Decision: do not merge MR-218. Two things block it: MP-07 at 8 of 10 in the must-pass set, where any failure is a blocker — a refund promise the store never made reaches customers without an agent; and the new schema failures (600 of 600 valid before, 590 of 600 now). The higher averages offset neither: a change that raises the average score while breaking a must-pass case is a regression. Store the result with both model identifiers, both prompt versions, the dataset version support-eval v5, the date, N = 10 runs per case, the pass rate per check and per case, and the grader used, so that a later drop in quality can be traced to the change that caused it.

What is wrong in the note and the summary. First, "better overall" rests on averages, and the averages hide the must-pass and schema failures: read the failing cases. Second, one playground try at temperature 0 does not cancel 2 failures in 10 runs: lowering temperature reduces variation but does not guarantee identical output, and the playground may not use the production prompt and settings. Third, tuning v13 on the same 60 cases that are used to accept it makes those results optimistic; never tune the prompt on the acceptance cases, and keep a held-out set it is not tuned on. Fourth, the rubric is graded by the model under test: a model’s output is not an oracle for that same model, and because the grader changed between baseline and candidate, the step from 4.1 to 4.4 may come from the grader, not from the assistant. The longer answers that the new greeting produces could also lift the score, since research has reported model graders favouring longer answers. Use one pinned grader calibrated against human labels, or human review. Fifth, one merge request changes the prompt and the model together, so no failure can be attributed to either; a model update is a release that needs its own full evaluation run.

What to ask for next. Report four defects, each with the case id, input, output, run numbers, prompt version, model identifier and dataset version: MP-07, a refund promise without handoff (2 of 10 runs, blocker); OOS-03, an intent outside the contract and improvised advice (10 of 10 runs); RT-04, an Arabic customer answered in English (suspected cause: the English greeting in v13); OS-11, an altered order number. To find which change caused each one, run the set on prompt v13 with model 2026-06 and on prompt v12 with model 2026-09, or split MR-218 into two merge requests. After the fixes, for example a greeting in the customer’s language and a decision on whether out-of-scope replies carry it, re-run the whole set, not only the four cases, because a one-line prompt edit can change unrelated cases; then diff baseline and candidate outputs for a sample of cases and read the differences. Before that re-run, add cases: Arabic cases for every intent, refund questions phrased in other ways and in Arabic, order numbers with similar digits, and more out-of-scope product questions. Save them as support-eval v6 in JSON Lines, validate the file, and run the baseline on v6 too, so that the comparison stays like for like.

If your answers differ, check them against the guide’s rules: deterministic checks first, thresholds agreed before the run, 100% for the must-pass set, the candidate compared with the accepted baseline on the same dataset, and no model grading its own output. Reasonable differences: R4 in the must-pass set, a 10 of 10 threshold for every case, or a contains check instead of an exact match for the agreed text of R5. Accepting MR-218 because the averages rose is not one of them.

Your progress on this topic

Part of the QA Roadmap

Tools mentioned in this guide

Validate a JSON document against a JSON Schema (draft-07 / 2019-09 / 2020-12 core keywords).

JSON & Data

Compare two texts line by line or word by word and highlight differences.

Formatting

Validate every line of a JSON Lines file and report the exact failing lines.

JSON & Data

Generate Unicode test strings across scripts (Arabic, Devanagari, CJK, Cyrillic), emoji, combining marks and normalisation forms.

Test Data

Generate the same records in multiple languages (English, Arabic, Hindi, and more) to test i18n and RTL/LTR mixing.

Test Data

Compare two JSON documents semantically and highlight added, removed and changed values.

JSON & Data

Turn a user story into professional, structured test cases (ID, title, type, priority, preconditions, data, steps, expected result) with Mutqan AI.

Test Generation AI

How Mutqan Soft can help

More guides

More guides