Key takeaway
- Integration testing in 2027: big-bang vs incremental, contract vs end-to-end, Testcontainers, REST Assured, Postman and Pact, test data and AI-test review.
Integration testing checks that separately built units, services and data stores work correctly together across their interfaces, after unit tests pass and before system and end-to-end tests. In 2026 the practical choices are how to sequence integration (big-bang or incremental), which checks belong at the contract level and which need real dependencies, and how to review AI-generated tests before they gate a release.
This guide is written for engineering leaders and architects. It compares approaches in tables, shows where Testcontainers, REST Assured, Postman and Pact fit according to their own documentation, and sets out entry and exit criteria you can audit. It builds on our guides to unit testing and API testing.
What is integration testing and why does it matter?
Integration testing exercises the interfaces between components: function calls between modules, HTTP calls between services, queries against a database, and messages on a broker. A unit test can pass for each side of an interface while the two disagree on a field name, a status code or a time zone. Integration tests find that class of defect, which is why they sit between unit testing and system testing.
Stubs stand in for lower-level modules that are not ready, and drivers stand in for callers that are not ready. Both are still useful, but a test that replaces every dependency with a mock only proves your mock is consistent with your assumptions.
How do big-bang and incremental integration testing compare?
Big-bang integration combines all units and tests them in one step. Incremental integration adds units in stages, using stubs or drivers where needed, so a failure points to the last unit added. Most teams now use incremental integration inside a continuous integration pipeline, because each merge adds a small change.
| Approach | How it works | When it fits | Main risk |
|---|---|---|---|
| Big-bang | All units combined, then tested together | Small systems, or a delivered bundle you did not build | Hard to locate the failing interface; testing starts late |
| Top-down | Top-level units first, stubs for lower levels | Top-down development, early user-flow feedback | Low-level logic is tested late; many stubs |
| Bottom-up | Lowest-level units first, drivers for callers | Bottom-up development, shared libraries and data layers | Workflow defects appear late |
| Sandwich (hybrid) | Top-down and bottom-up meet in the middle | Large systems with separate teams per layer | More planning and two sets of test doubles |
| Continuous incremental | Each merge triggers integration tests on the changed interfaces | Microservices and trunk-based delivery | Needs fast, stable environments and test data |
How is contract testing different from integration and end-to-end testing?
An integration test runs two or more real components together and checks their behaviour. A contract test checks each side in isolation against a shared, documented contract. An end-to-end test drives a complete user journey through the deployed system. They answer different questions, so a healthy suite uses all three in different proportions.
According to the Pact documentation, contract tests assert that inter-application messages conform to a shared understanding documented in a contract, and Pact positions itself as an alternative to integration tests it calls "expensive and brittle", letting teams confirm applications work together without deploying everything first. Pact is consumer-driven, so only the parts of the communication the consumer actually uses are tested. See our guide to contract testing for microservices for the workflow.
| Test type | What runs | Best at catching | Cost and speed |
|---|---|---|---|
| Contract | One service at a time against a recorded contract | Breaking changes to request and response shapes between teams | Fast; no shared environment needed |
| Integration | Real components, often with real databases or brokers | Wrong queries, serialisation, configuration, transaction and timeout behaviour | Medium; needs containers or a test environment |
| End-to-end | The deployed system through its user interface or public API | Broken journeys and environment wiring | Slowest and most prone to flakiness |
Smoke and regression suites are a different axis: they describe when a suite runs, not what it tests. See smoke testing vs regression testing for how integration tests slot into each stage of a pipeline.
Which integration testing tools should you use in 2027?
Choose by what you need to run against. The four tools below are described from their own documentation as read on 13 November 2026; confirm versions on each site before you standardise.
| Tool | What its docs say | Use it for | Check before adopting |
|---|---|---|---|
| Testcontainers | A library that bootstraps integration tests with real services wrapped in Docker containers, instead of mocks or in-memory services | Tests against real Postgres, Kafka or Redis that every developer and CI runner can start | Needs a container runtime on CI runners |
| REST Assured | A Java library for testing and validating REST services; its site announces a 7.0.0 release candidate that requires Java 17 | Readable HTTP assertions inside JUnit suites | Java toolchain version; release candidate status |
| Postman and Newman | Newman runs Postman Collections from the command line, but Postman states it will not receive updates or fixes and recommends the Postman CLI | API checks shared between testers and developers | Plan migration from Newman to the Postman CLI in CI scripts |
| Pact | Consumer-driven contract testing; each contract is a concrete request and response example | Service-to-service interfaces owned by different teams | Needs a broker process to share contracts |
Older lists often name Protractor, Rational Integration Tester or TESSY. Several of those suit specific stacks, so confirm that a tool is still maintained on its own site before building a suite on it.
How should you manage test data and environments?
Most flaky integration tests trace back to shared data or drifting environments rather than to the code under test. Give each test run its own data and its own dependencies, and make setup part of the test code.
| Choice | Strength | Weakness | Use when |
|---|---|---|---|
| Containers started by the test (for example Testcontainers) | Same dependency type as production; isolated per run | Slower start; needs Docker on CI | Database, broker and cache interactions |
| Shared long-lived test environment | Close to the whole system | Data collisions, drift, queueing for access | Pre-release checks across many teams |
| Mocks and stubs | Fast and deterministic | Can hide real interface mismatches | Third-party services you cannot run, and failure injection |
| Contract tests | No shared environment | Does not test real behaviour behind the interface | Cross-team API changes |
Create data per test, use unique identifiers, clean up after the run, and keep production personal data out of test environments. For wider guidance see test data management.
What entry and exit criteria should an integration test stage use?
Criteria turn "ready" into evidence a release owner can check. These are our recommended defaults, not a standard; adjust them to your risk.
| Gate | Criterion | Evidence |
|---|---|---|
| Entry | Unit tests for the changed components pass | CI run linked to the commit |
| Entry | Interface definitions (API schema, message format, database migration) are written down | Versioned spec in the repository |
| Entry | Environment and test data can be created from code | Pipeline step or container definition |
| Exit | All planned integration cases executed; failures triaged | Test report with defect links |
| Exit | No open high-priority interface defects | Defect tracker query |
| Exit | Contract verification results published for each provider | Broker status or CI artefact |
How do you adopt integration testing step by step?
Start with the interfaces that fail most often or cost most when they fail, and add coverage in this order.
- Map components, owners and the data that crosses each interface.
- Pick the integration approach per area: incremental in the pipeline, big-bang only for delivered bundles.
- Write one happy-path and one failure-path test per critical interface (timeouts, bad payloads, duplicate messages).
- Run dependencies in containers started by the test, and keep third-party services behind stubs.
- Add contract tests where different teams own each side.
- Run the fast subset on every merge and the full set before release; track flaky tests as defects.
How should you review AI-generated integration tests?
AI assistants can draft integration tests quickly, but a generated test is code that must be reviewed like any other. The main risk is a test that passes without proving anything. These checks are our own practice guidance.
- Assertions: does the test assert on business outcomes (stored record, emitted message) rather than only on a 200 status?
- Hidden mocks: has the generator mocked the very dependency the test exists to exercise?
- Data: are data and identifiers unique per run, with cleanup, and free of real personal data?
- Determinism: no fixed sleeps, no reliance on test order or wall-clock time.
- Traceability: each generated test maps to a named interface or requirement, and a person approves it before it joins a gating suite.
- Mutation check: break the code on purpose and confirm the test fails.
Where agents themselves are the system under test, they need evaluation as well as integration checks. ElixirData lists AgentEvaluation, which according to its site tests and benchmarks AI agents.
When is integration testing not the right tool?
Do not use integration tests to check pure logic (use unit tests), to guard a public API between many teams (use contract tests), or to verify a full user journey (use a small end-to-end set). Over-reliance on integration tests slows pipelines. Over-reliance on mocks gives false confidence.
To map one integration decision your agents or services make, and the context and policy it depends on, book a Context Workshop. See what happens in the workshop.
What should you plan for in 2027?
Planning for the year ahead is mostly about turning the guidance above into routine checks rather than adding new tools.
- Review your tool choices: confirm on each tool's own site that its version and support status still suit your stack before you standardise, and plan the move from Newman to the Postman CLI.
- Keep the test mix balanced: use contract tests for interfaces owned by different teams, integration tests with real dependencies for databases and brokers, and a small end to end set for key journeys.
- Hold AI generated tests to the same bar: review assertions, mocks, data and determinism, and have a person approve each test before it joins a gating suite.
Frequently asked questions
What is integration testing in simple terms?
It checks that components work correctly together across their interfaces, after each has passed its own unit tests.
What is the difference between big-bang and incremental integration testing?
Big-bang tests all units combined in one step. Incremental adds units in stages so each failure points to the last addition.
How is contract testing different from integration testing?
Contract tests check each side against a shared contract without running both together. Integration tests run real components together.
Is Newman still the right choice for Postman tests in CI?
According to Postman's documentation, Newman will not receive updates or fixes and the Postman CLI is recommended. Plan a migration.
Why use Testcontainers instead of mocks?
Its documentation says it lets tests use the same type of services as production, such as a real Postgres, without mocks or in-memory substitutes.
Can AI write integration tests?
It can draft them, but people should review assertions, mocks, data and determinism before the tests gate a release.
Related reading: exploratory testing and automated testing for microservices.
Ready to put AI agents to work? See an ElixirClaw demo: the agentic OS to build, orchestrate and govern AI agents across your enterprise systems.
Explore the XenonStack platform family: ElixirData · ElixirClaw · ElixirHub · NexaStack · MetaSecure · Neural AI · AgentGRC · AgentSRE · AgentAnalyst · AgentInstruct · AgentRAI · AgentScrum · AgentSearch · AgentForce · AI Aviator · SAIF Aviator · CohortIQ · XenonStack AI · XenonStack UAE