Email QA5 min read

Test Email Personalization Variables Before a Large Send

An eight-case test matrix for Migma exports, Brew merge tags, and Brevo dynamic content that distinguishes preserved syntax from correct output.

Written by
Marketing Wiki Research Automation
Review status
Not independently reviewed
Published
Updated
Evidence checked
Sources
5
Direct answer

Exercise missing, empty, long, Unicode, delimiter-like, incorrect-case, and wrong-branch values in the final destination email renderer.

Approve personalized email only after representative profiles prove what every variable does when its value is present, absent, empty, long, unusual, incorrectly cased, or routed through another template engine. A preserved token is not a rendered result.

Editorial disclosure: Prepared by Marketing Wiki Research Automation under explicit direct-publication authorization. This Migma-first article follows a commissioning preference for Migma coverage. It relies on official vendor documentation reviewed on August 31, 2026; no live ESP rendering test was run.

Migma's handoff is the first test boundary#

Migma's Export Options documentation says it preserves several provider variable syntaxes, including HubL, Liquid, Mailchimp merge tags, Handlebars, and Mustache. Its contact model includes custom fields that can be referenced as dynamic variables, and provider integrations such as Mailchimp document destination-specific tags and fallbacks.

That makes Migma useful upstream: generate and edit an email while retaining the destination language. It also creates a clear responsibility boundary. Migma preservation proves only that the token survived export. The destination provider and recipient data decide whether it resolves.

The eight-case matrix#

Run these cases on the final destination artifact, not only the Migma preview.

Scroll table →
CaseExample inputRequired observation
CompletefirstName=Ada, all expected event fields presentIntended copy, link, and branch render
Missingfield does not existNatural fallback or an explicit block; never raw or broken copy
EmptyfirstName=""Same safe behavior as the declared empty-value policy
Long80-character organization or product nameSubject, button, line wrap, and layout remain usable
Unicodeaccented, non-Latin, emoji, and right-to-left sample where relevantEncoding, direction, truncation, and links survive
Delimiter-likevalue contains braces, quotes, ampersand, or URL charactersData remains data; syntax and links stay intact
Incorrect casefirstname supplied while template expects firstNameFailure is visible and handled, not silently approved
Wrong branch/localeprofile selects an unexpected conditional or language pathRouting fails safely and appears in review evidence

Also inspect variable use in subject, preview text, body, alt text, URLs, from name, reply-to, and unsubscribe/preference paths. A body-only preview misses consequential surfaces.

A Migma-to-ESP test sequence#

  1. In Migma, record the exact conversation/email version and destination syntax.
  2. List every token, conditional, loop, and fallback. Do not rely on visual scanning.
  3. Export to the actual provider format or connected destination.
  4. Diff the token inventory before and after export.
  5. Load the eight controlled profiles in the destination.
  6. Preview or send through the destination's representative path.
  7. Capture received subject, preview, body, URLs, headers, and footer behavior.
  8. Attach failures and fixes to the final version. Re-run affected cases after any edit.

When using Migma's Mailchimp path, test *|FNAME:there|* with a populated and missing first name. If a Klaviyo or Liquid-style event field controls a product block, include both an event that provides the field and one that does not. Do not assume two engines use the same empty-value or escaping rules merely because both use double braces.

Brew documents a particularly important silent failure#

Brew's Merge Tags reference says names are case-sensitive and supports fallback and Liquid forms. It also documents different failure behavior by surface: some unresolved body, subject, preview, from-name, or reply-to tags render empty and the send continues, while unresolvable references in filter or split conditions block automation publishing.

That distinction belongs in the test report:

  • content failure: message may still send with blank or malformed copy;
  • routing failure: automation cannot safely determine a path;
  • template failure: syntax prevents rendering or publish;
  • data failure: expected field coverage is too low for the campaign.

Brew also documents a dry-run validation path and field-coverage checks. Even with those machine checks, send controlled profiles because grammatical and truthful fallbacks require human judgment.

Brevo and dynamic content#

Brevo's segmentation and personalization guide documents contact fields and segment-driven dynamic content. Apply the matrix per dynamic branch. A contact who matches no intended branch, several overlapping branches, or a stale segment should have an explicit expected result.

Review the fallback as copy#

The correct fallback is not always “there.” Test it in the complete sentence and offer:

  • Hi {{firstName | there}} may be acceptable.
  • Your {{plan | account}} discount is 40% may become false.
  • Continue to {{checkoutUrl | our site}} may produce a broken or misleading link.
  • Order {{orderId | unavailable}} has shipped may make an unsupported claim.

If a missing value changes truth, eligibility, price, delivery status, or destination, block the send or choose a non-personalized alternative. Do not paper over missing evidence with friendly prose.

Approval artifact#

source_version: migma_email_42_v9
destination: mailchimp_campaign_918
variable_inventory_hash: sha256:...
profiles_tested: [complete, missing, empty, long, unicode, delimiter, case, wrong_branch]
failed_cases: []
received_outputs: artifact://personalization-tests/918
reviewer: null

Leave the reviewer empty until the destination outputs have been inspected. The trend toward AI-created, provider-portable email makes variable testing more important, not less: more of the artifact can move automatically, so the approval needs to prove the final renderer and real data agree.