{"id":294,"date":"2026-10-13T10:01:08","date_gmt":"2026-10-13T10:01:08","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2011\/01\/12\/what-is-hybrid-testing\/"},"modified":"2026-10-13T10:01:08","modified_gmt":"2026-10-13T10:01:08","slug":"what-is-hybrid-testing","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/what-is-hybrid-testing\/","title":{"rendered":"Hybrid Testing in Integration Testing: Combining Top-Down and Bottom-Up Approaches"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Hybrid testing in software projects usually means a <strong>combined integration testing strategy<\/strong>: part top-down and part bottom-up. This approach helps QA engineers, developers, and DevOps teams validate critical interfaces earlier while modules are still being completed. In this guide, you will learn how hybrid testing works, when to use it, and how to structure it in a CI pipeline.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2011-01-12; fully revised and updated.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2011\/01\/hybrid-testing.png\" alt=\"Hybrid testing concept diagram\" width=\"600\" height=\"400\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What hybrid testing means<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In integration testing, <strong>hybrid testing<\/strong> is the practice of using both:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Top-down integration testing<\/strong>: start from higher-level modules and use stubs for lower-level dependencies.<\/li><li><strong>Bottom-up integration testing<\/strong>: start from lower-level modules and use drivers to simulate higher-level callers.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The hybrid model lets teams test whichever components are available first, then progressively replace stubs and drivers with real modules until full integration coverage is achieved.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How a hybrid integration workflow runs<\/h2>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Identify modules and interfaces] --> B[Prioritize critical flows]\n    B --> C[Top-down tests with stubs]\n    B --> D[Bottom-up tests with drivers]\n    C --> E[Replace stubs with real modules]\n    D --> F[Replace drivers with real callers]\n    E --> G[Run merged integration suite]\n    F --> G\n    G --> H{Defects found?}\n    H -- yes --> I[Fix and rerun targeted suites]\n    I --> G\n    H -- no --> J[Promote build to next test stage]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Top-down vs bottom-up vs hybrid<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Approach<\/th><th>Strengths<\/th><th>Limitations<\/th><th>Best fit<\/th><\/tr><\/thead><tbody><tr><td>Top-down<\/td><td>Early validation of business flows and orchestration logic<\/td><td>Needs stubs for lower layers; low-level behavior may be delayed<\/td><td>UI\/API-led systems where user journeys are high priority<\/td><\/tr><tr><td>Bottom-up<\/td><td>Strong validation of utilities, data, and service foundations<\/td><td>Needs drivers; end-user flow confidence comes later<\/td><td>Backend-heavy systems with complex core services<\/td><\/tr><tr><td>Hybrid<\/td><td>Parallel progress across layers; earlier interface risk discovery<\/td><td>Higher planning and coordination effort<\/td><td>Large or evolving systems with staggered component readiness<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Example: lightweight hybrid test plan for CI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The example below shows one way to split integration suites, then merge them as dependencies become available.<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-yaml\">integration_test_plan:\n  top_down:\n    - web_to_api_with_stubbed_payments\n    - api_to_notification_with_stubbed_email\n  bottom_up:\n    - database_repository_service_chain\n    - queue_consumer_with_driver_events\n  merged_suite:\n    - web_api_payments_notifications_real_dependencies\n\nquality_gates:\n  - no_open_critical_defects\n  - core_checkout_flow_passes\n  - integration_suite_pass_rate_required<\/code><\/span><\/pre>\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs language-bash\">.\/run-tests.sh --suite top_down\n.\/run-tests.sh --suite bottom_up\n.\/run-tests.sh --suite merged_suite\n.\/publish-test-report.sh --format junit --output reports\/integration.xml<\/code><\/span><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Where hybrid testing is most useful<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Projects where upper and lower layers are delivered at different times.<\/li><li>Microservice ecosystems with many interface dependencies.<\/li><li>Teams that need early business-flow confidence and early low-level reliability checks.<\/li><li>Programs migrating from monoliths to distributed services.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">References from the original post<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Original referenced sources:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Hybrid_testing\" target=\"_blank\" rel=\"noopener\">https:\/\/en.wikipedia.org\/wiki\/Hybrid_testing<\/a><\/li><li><a href=\"https:\/\/www.tutorialspoint.com\/software_testing_dictionary\/hybrid_integration_testing.htm\" target=\"_blank\" rel=\"noopener\">https:\/\/www.tutorialspoint.com\/software_testing_dictionary\/hybrid_integration_testing.htm<\/a><\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Best practices and common pitfalls<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Define merge criteria early:<\/strong> decide when stubbed and driver-based tests must be replaced by full integrations.<\/li><li><strong>Version interfaces explicitly:<\/strong> contract drift between parallel streams is a common failure point.<\/li><li><strong>Keep suites layered:<\/strong> top-down, bottom-up, and merged suites should be independently runnable in CI.<\/li><li><strong>Avoid over-mocking:<\/strong> too many stubs can hide real integration defects until late stages.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hybrid testing combines top-down and bottom-up integration testing so teams can validate critical interfaces earlier and reduce integration risk. This guide explains the model, shows a practical workflow, and includes a CI-friendly test plan example.<\/p>\n","protected":false},"author":1,"featured_media":3900,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[2751,2745,2752,2746,2750,2749,2753,2748,1127,779,2747],"class_list":["post-294","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised","tag-about-hybrid-testing","tag-hybrid","tag-hybrid-test","tag-hybrid-testing","tag-hybrid-testing-definition","tag-hybrid-testing-introduction","tag-hybrid-testing-meaning","tag-hybrid-testing-overview","tag-introduction","tag-testing","tag-what-is-hybrid-testing"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/294","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=294"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/294\/revisions"}],"predecessor-version":[{"id":79132,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/294\/revisions\/79132"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3900"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=294"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=294"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=294"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}