{
    "componentChunkName": "component---src-templates-module-js",
    "path": "/courses/devops/continuous-testing/",
    "result": {"data":{"module":{"frontmatter":{"duration":"3 hours","slug":"/courses/devops/continuous-testing/","title":"Continuous testing"},"course":{"frontmatter":{"title":"DevOps","slug":"/courses/devops/"}},"slides":[{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/0/","title":"Benefits"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/1/","title":"Types of tests"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/2/","title":"Example"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/3/","title":"Test coverage"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/4/","title":"Test-driven development (TDD)"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/5/","title":"TDD benefits"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/6/","title":"Test automation"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/7/","title":"Test writing best practices"}},{"frontmatter":{"slug":"/courses/devops/continuous-testing/slides/8/","title":"References"}}],"parent":{"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"duration\": \"3 hours\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Continuous Testing is the process of executing automated tests as part of the software delivery pipeline to obtain feedback on the business risks associated with a software release candidate as rapidly as possible.\"), mdx(\"h2\", null, \"Benefits\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Better efficiency and higher-quality deployments\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Rapid error discovery and remediation for distributed projects\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Improved user experience\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Minimization or elimination of business disruption and its costs\")), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://www.ibm.com/cloud/learn/continuous-testing\"\n  }, \"Read more\")), mdx(\"h2\", null, \"Types of tests\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Unit tests:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The lowest level of testing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test an individual unit (or function) of a software\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tests are run in very controlled environments\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"90-100% test coverage\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Functional:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Higher-level function testing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test outside dependencies\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Example: get a specific value from a database, API\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Integration:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Assemble project modules\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test how microservices work together\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Example: database connection\")), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"End-To-End:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Test the application in a real environment\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Use a production-like database\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"UI testing\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Acceptance testing\")), mdx(\"h2\", null, \"Example\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"650px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/1b92a/testing.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"62.576687116564415%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAGQAAAgMBAAAAAAAAAAAAAAAAAAMBAgQF/8QAFgEBAQEAAAAAAAAAAAAAAAAAAQAC/9oADAMBAAIQAxAAAAHupmyLNJi//8QAGRABAQEAAwAAAAAAAAAAAAAAAQACERIh/9oACAEBAAEFAl4uwrGLJ5f/xAAVEQEBAAAAAAAAAAAAAAAAAAABEP/aAAgBAwEBPwFn/8QAFhEBAQEAAAAAAAAAAAAAAAAAABEh/9oACAECAQE/AcR//8QAGRAAAwADAAAAAAAAAAAAAAAAAAEhECIx/9oACAEBAAY/AimvCtvP/8QAGhABAAMBAQEAAAAAAAAAAAAAAQARMSFBcf/aAAgBAQABPyE9+xo8VjLXv4nVaCErnWBRP//aAAwDAQACAAMAAAAQ9z//xAAXEQADAQAAAAAAAAAAAAAAAAAAAREh/9oACAEDAQE/EEdwh//EABcRAQADAAAAAAAAAAAAAAAAAAAxYXH/2gAIAQIBAT8QhbT/xAAbEAEAAgMBAQAAAAAAAAAAAAABABEhMUFRcf/aAAgBAQABPxAYu3gAZY/uDoVm46uL4uAcCLe+xo0Mq3dwADRP/9k=')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Testing example\",\n    \"title\": \"Testing example\",\n    \"src\": \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/6aca1/testing.jpg\",\n    \"srcSet\": [\"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/d2f63/testing.jpg 163w\", \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/c989d/testing.jpg 325w\", \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/6aca1/testing.jpg 650w\", \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/7c09c/testing.jpg 975w\", \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/01ab0/testing.jpg 1300w\", \"/static/1bc2ba4a5c53086d1c880c86b6be1a5f/1b92a/testing.jpg 3360w\"],\n    \"sizes\": \"(max-width: 650px) 100vw, 650px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"h2\", null, \"Test coverage\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"650px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/54f4e27254b7c7f06f4ae7e0d65c002f/a9e43/test-pyramid.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"52.14723926380368%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAKABQDASIAAhEBAxEB/8QAGAAAAwEBAAAAAAAAAAAAAAAAAAIDAQX/xAAWAQEBAQAAAAAAAAAAAAAAAAAAAgP/2gAMAwEAAhADEAAAAdn0FZOXF//EABwQAQACAQUAAAAAAAAAAAAAAAEAAjIDBBESIf/aAAgBAQABBQK2R7NvghyVJpB1/8QAFREBAQAAAAAAAAAAAAAAAAAAAAH/2gAIAQMBAT8BR//EABQRAQAAAAAAAAAAAAAAAAAAABD/2gAIAQIBAT8BP//EABkQAAIDAQAAAAAAAAAAAAAAAAABEDFxIf/aAAgBAQAGPwJ6WPR8KUf/xAAbEAEAAgMBAQAAAAAAAAAAAAABABEhMUFx4f/aAAgBAQABPyHfVsXYHpXstkY1xt5PhoRUBmf/2gAMAwEAAgADAAAAEC//AP/EABcRAQADAAAAAAAAAAAAAAAAAAARITH/2gAIAQMBAT8Qi2H/xAAUEQEAAAAAAAAAAAAAAAAAAAAQ/9oACAECAQE/ED//xAAbEAEAAgMBAQAAAAAAAAAAAAABABEhMVFBYf/aAAgBAQABPxBD1EPWAoiHYpUSKPb8J1fdh2AcBjwQHEvorwn/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"Test coverage\",\n    \"title\": \"Test coverage\",\n    \"src\": \"/static/54f4e27254b7c7f06f4ae7e0d65c002f/6aca1/test-pyramid.jpg\",\n    \"srcSet\": [\"/static/54f4e27254b7c7f06f4ae7e0d65c002f/d2f63/test-pyramid.jpg 163w\", \"/static/54f4e27254b7c7f06f4ae7e0d65c002f/c989d/test-pyramid.jpg 325w\", \"/static/54f4e27254b7c7f06f4ae7e0d65c002f/6aca1/test-pyramid.jpg 650w\", \"/static/54f4e27254b7c7f06f4ae7e0d65c002f/a9e43/test-pyramid.jpg 964w\"],\n    \"sizes\": \"(max-width: 650px) 100vw, 650px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"h2\", null, \"Test-driven development (TDD)\"), mdx(\"p\", null, mdx(\"span\", {\n    parentName: \"p\",\n    \"className\": \"gatsby-resp-image-wrapper\",\n    \"style\": {\n      \"position\": \"relative\",\n      \"display\": \"block\",\n      \"marginLeft\": \"auto\",\n      \"marginRight\": \"auto\",\n      \"maxWidth\": \"384px\"\n    }\n  }, \"\\n      \", mdx(\"a\", {\n    parentName: \"span\",\n    \"className\": \"gatsby-resp-image-link\",\n    \"href\": \"/static/d0ef1488d7bd015476a5239337e159c5/4ecad/tdd.jpg\",\n    \"style\": {\n      \"display\": \"block\"\n    },\n    \"target\": \"_blank\",\n    \"rel\": \"noopener\"\n  }, \"\\n    \", mdx(\"span\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-background-image\",\n    \"style\": {\n      \"paddingBottom\": \"91.41104294478527%\",\n      \"position\": \"relative\",\n      \"bottom\": \"0\",\n      \"left\": \"0\",\n      \"backgroundImage\": \"url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAASABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAEDBAX/xAAXAQADAQAAAAAAAAAAAAAAAAABAgMA/9oADAMBAAIQAxAAAAHs5tVaGVgsoI7WLp//xAAaEAACAwEBAAAAAAAAAAAAAAAAAgEDEhEx/9oACAEBAAEFAtaKa2qIuU4sGUrFVeMP4f/EABoRAAICAwAAAAAAAAAAAAAAAAACATEQESL/2gAIAQMBAT8BXdHItxj/xAAaEQABBQEAAAAAAAAAAAAAAAAAARARIUJR/9oACAECAQE/AZ6WLpv/xAAZEAACAwEAAAAAAAAAAAAAAAABIQACEDH/2gAIAQEABj8CIClja0ahXc5gz//EABsQAAMBAQEBAQAAAAAAAAAAAAABETEhYUFR/9oACAEBAAE/IUth8aQEkxO30YWm/ByH6DYsbvwS4WPptHYLEf/aAAwDAQACAAMAAAAQxCDD/8QAGREBAAIDAAAAAAAAAAAAAAAAAQAxEBFh/9oACAEDAQE/EETqLvTiNz//xAAaEQACAgMAAAAAAAAAAAAAAAAAASExQWHB/9oACAECAQE/EEmUoWxyFR//xAAfEAEBAAEDBQEAAAAAAAAAAAABEQAxQWEQIVFxobH/2gAIAQEAAT8QUUak/cNaKqKGvdlZyAubQlI8OBWopuJhV0opf3pUoWvPrCBBADP/2Q==')\",\n      \"backgroundSize\": \"cover\",\n      \"display\": \"block\"\n    }\n  }), \"\\n  \", mdx(\"img\", {\n    parentName: \"a\",\n    \"className\": \"gatsby-resp-image-image\",\n    \"alt\": \"TDD process\",\n    \"title\": \"TDD process\",\n    \"src\": \"/static/d0ef1488d7bd015476a5239337e159c5/4ecad/tdd.jpg\",\n    \"srcSet\": [\"/static/d0ef1488d7bd015476a5239337e159c5/d2f63/tdd.jpg 163w\", \"/static/d0ef1488d7bd015476a5239337e159c5/c989d/tdd.jpg 325w\", \"/static/d0ef1488d7bd015476a5239337e159c5/4ecad/tdd.jpg 384w\"],\n    \"sizes\": \"(max-width: 384px) 100vw, 384px\",\n    \"style\": {\n      \"width\": \"100%\",\n      \"height\": \"100%\",\n      \"margin\": \"0\",\n      \"verticalAlign\": \"middle\",\n      \"position\": \"absolute\",\n      \"top\": \"0\",\n      \"left\": \"0\"\n    },\n    \"loading\": \"lazy\",\n    \"decoding\": \"async\"\n  }), \"\\n  \"), \"\\n    \")), mdx(\"h2\", null, \"TDD benefits\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Better program design and higher code quality\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Detailed project documentation\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Reduces the time required for project development\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Code flexibility and easier maintenance\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"End up with a reliable solution\")), mdx(\"h2\", null, \"Test automation\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Run tests on a server with the specific configuration specified in your tests\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Run the tests on different versions of the code\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Condition for Pull Request merge\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"On each commit\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Run on your own server\")), mdx(\"h2\", null, \"Test writing best practices\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Unit test structure:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Setup\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Execution\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Validation\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Cleanup\")), mdx(\"ol\", {\n    \"start\": 2\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Avoid anti-patterns:\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"test case depending on the system state from the previous test\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"dependencies between test cases\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"don't inspect more than necessary\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"slow running tests\")), mdx(\"h2\", null, \"References\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://www.ibm.com/cloud/learn/continuous-testing\"\n  }, \"What is continuous testing?\"))));\n}\n;\nMDXContent.isMDXComponent = true;"}}},"pageContext":{}},
    "staticQueryHashes": []}