{"id":14369,"date":"2019-12-26T17:03:23","date_gmt":"2019-12-26T11:33:23","guid":{"rendered":"https:\/\/coforge.site\/cigniti\/blog\/?p=14369"},"modified":"2022-07-28T21:18:45","modified_gmt":"2022-07-28T15:48:45","slug":"microservices-testing-quality-gates-model","status":"publish","type":"post","link":"https:\/\/coforge.site\/cigniti\/blog\/microservices-testing-quality-gates-model\/","title":{"rendered":"How to establish quality gates in a Microservices architecture"},"content":{"rendered":"<p><i><span data-contrast=\"auto\">Note: This is in continuation to the blog &#8211;\u00a0<\/span><\/i><a href=\"https:\/\/coforge.site\/cigniti\/blog\/microservices-architecture-testing-strategies\/\"><i><span data-contrast=\"auto\">Best testing strategies in a Microservice architecture<\/span><\/i><\/a><i><span data-contrast=\"auto\">\u00a0&#8211; contributed by our SME, Chandra Kiran Mamidala.<\/span><\/i><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Let us a<\/span><span data-contrast=\"auto\">ssume that\u00a0<\/span><span data-contrast=\"auto\">you<\/span><span data-contrast=\"auto\">\u00a0have implemented the strategy\u00a0<\/span><span data-contrast=\"auto\">for\u00a0<\/span><a href=\"https:\/\/coforge.site\/cigniti\/blog\/category\/microservices-testing\/\"><span data-contrast=\"none\">testing\u00a0<\/span><span data-contrast=\"none\">microservices<\/span><\/a><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">as discussed\u00a0<\/span><span data-contrast=\"auto\">and written all the test suites<\/span><span data-contrast=\"auto\">\u00a0as suggested. Where do you run them?<\/span><span data-contrast=\"auto\">\u00a0How do you make sure all your test suites are executed at right time and at right place (environment)? When do you run your regression packs?\u00a0<\/span><span data-contrast=\"auto\">D<\/span><span data-contrast=\"auto\">o all these\u00a0<\/span><span data-contrast=\"auto\">test\u00a0<\/span><span data-contrast=\"auto\">suites fit in CI\/CD?<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">I<\/span><span data-contrast=\"auto\">\u00a0will try to address most of these<\/span><span data-contrast=\"auto\">\u00a0questions with an approach that we call<\/span><span data-contrast=\"auto\">\u00a0\u201cQuality Gates model as a<\/span><span data-contrast=\"auto\">\u00a0strategy to test<\/span><span data-contrast=\"auto\">\u00a0microservices\u201d.<\/span><span data-contrast=\"auto\">\u00a0This approach involves construction of<\/span><span data-contrast=\"auto\">\u00a0quality gates into the CI\/CD\u00a0<\/span><span data-contrast=\"auto\">pipeline\u00a0<\/span><span data-contrast=\"auto\">for which we take the<\/span><span data-contrast=\"auto\">\u00a0help of our development teams, build teams, deployment<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">and<\/span><span data-contrast=\"auto\">\u00a0infrastructure teams.<\/span><span data-contrast=\"auto\">\u00a0As the construction of quality gates is a test architecture activity that requires highly technical QA resources, it is essential that all the members across different teams work very closely. More importantly, you should first propose the Quality gates strategy to your stakeholders and obtain the required support from them.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">The following flow diagram offers a bird\u2019s eye view to the overall architecture with Quality gates established within the CI\/CD pipelines. I will explain each stage of\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">Quality gate<\/span><span data-contrast=\"auto\">\u00a0strategy<\/span><span data-contrast=\"auto\">\u00a0one by <\/span><\/p>\n<p><span data-contrast=\"auto\">one:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><img decoding=\"async\" class=\" wp-image-14371 aligncenter\" src=\"https:\/\/coforge.site\/cigniti\/blog\/wp-content\/uploads\/QualityGatesDetail-1-551x300.png\" alt=\"\" width=\"613\" height=\"334\" srcset=\"https:\/\/coforge.site\/cigniti\/blog\/wp-content\/uploads\/QualityGatesDetail-1-551x300.png 551w, https:\/\/coforge.site\/cigniti\/blog\/wp-content\/uploads\/QualityGatesDetail-1-768x418.png 768w, https:\/\/coforge.site\/cigniti\/blog\/wp-content\/uploads\/QualityGatesDetail-1-804x438.png 804w, https:\/\/coforge.site\/cigniti\/blog\/wp-content\/uploads\/QualityGatesDetail-1-600x327.png 600w, https:\/\/coforge.site\/cigniti\/blog\/wp-content\/uploads\/QualityGatesDetail-1.png 1986w\" sizes=\"(max-width: 613px) 100vw, 613px\" \/><\/p>\n<p><b><span data-contrast=\"auto\">Quality Gate 1:<\/span><\/b><b><span data-contrast=\"auto\">\u00a0<\/span><\/b><b><span data-contrast=\"auto\">Execute\u00a0<\/span><\/b><b><span data-contrast=\"auto\">Unit Tests<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">At this stage, developers\u00a0<\/span><span data-contrast=\"auto\">commit<\/span><span data-contrast=\"auto\">\u00a0and push<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the<\/span><span data-contrast=\"auto\">\u00a0code to their branch<\/span><span data-contrast=\"auto\">es<\/span><span data-contrast=\"auto\">\u00a0where it<\/span><span data-contrast=\"auto\">\u00a0undergoes reviews and merges. When the code is merged to a master copy<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0we ensure that a build pipeline is triggered to run all<\/span><span data-contrast=\"auto\">\u00a0the<\/span><span data-contrast=\"auto\">\u00a0unit tests against the master copy.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This must be\u00a0<\/span><span data-contrast=\"auto\">a<\/span><span data-contrast=\"auto\">\u00a0part of\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">CI process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A CI environment is the best place to execute<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Mock data is often used in building the tests<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Test component is microservice (scope is limited to a microservice)<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Junit and NUnit are\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">best examples\u00a0<\/span><span data-contrast=\"auto\">of\u00a0<\/span><span data-contrast=\"auto\">tools\/frameworks<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"5\" data-aria-level=\"1\"><span data-contrast=\"auto\">Recommended exit criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">\u00a0is 100% pass rate<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 2 (Optional): Static code analysis\/Code coverage<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is an optional quality gate that must be<\/span><span data-contrast=\"auto\">\u00a0a<\/span><span data-contrast=\"auto\">\u00a0part of your CI process<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0if you choose to introduce it.\u00a0<\/span><span data-contrast=\"auto\">The gate<\/span><span data-contrast=\"auto\">\u00a0is not enforced by QA<\/span><span data-contrast=\"auto\">. It is, in fact, a<\/span><span data-contrast=\"auto\">\u00a0collaborative decision from\u00a0<\/span><span data-contrast=\"auto\">the involved<\/span><span data-contrast=\"auto\">\u00a0team<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0(build, development, QA etc.).\u00a0<\/span><span data-contrast=\"auto\">People usually go for commerc<\/span><span data-contrast=\"auto\">ial solutions that\u00a0<\/span><span data-contrast=\"auto\">offer<\/span><span data-contrast=\"auto\">\u00a0great reporting on number of lines, blocks,<\/span><span data-contrast=\"auto\">\u00a0and<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">methods<\/span><span data-contrast=\"auto\">\u00a0covered and to\u00a0<\/span><span data-contrast=\"auto\">analyse<\/span><span data-contrast=\"auto\">\u00a0the code quality, unit test coverage<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0and violations.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This must be a part of\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">CI process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A CI environment is the best place to execute<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Test component is microservice (scope is limited to a microservice)<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">SonarQube and Kiuwan<\/span><span data-contrast=\"auto\">\u00a0are best examples tools\/frameworks<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit criteria is as per the tool or team recommendations but surely without blocker\/critical issues<\/span><span data-contrast=\"auto\">\u00a0and<\/span><span data-contrast=\"auto\">\u00a0with\u00a0<\/span><span data-contrast=\"auto\">fewer<\/span><span data-contrast=\"auto\">\u00a0violation<\/span><span data-contrast=\"auto\">s<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 3: Publish the Consumer Contracts<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is the first step of contract testing where you will generate the contract as a consumer and publish them to the provider.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This must be\u00a0<\/span><span data-contrast=\"auto\">a<\/span><span data-contrast=\"auto\">\u00a0part of\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">CI process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">A CI environment is the best place to execute<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">PACT is the best tool\/framework, it acts as a mock<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">:\u00a0<\/span><span data-contrast=\"auto\">I<\/span><span data-contrast=\"auto\">t must\u00a0<\/span><span data-contrast=\"auto\">undoubtedly achieve\u00a0<\/span><span data-contrast=\"auto\">100% pass\u00a0<\/span><span data-contrast=\"auto\">rate\u00a0<\/span><span data-contrast=\"auto\">as you cannot let the provider verifying the previous versions of contracts<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">Post this Quality Gate, the Docker images<\/span><span data-contrast=\"auto\">\u00a0or the build and artefacts<\/span><span data-contrast=\"auto\">\u00a0for the service<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0and its dependant modules are generated so that the\u00a0<\/span><span data-contrast=\"auto\">build\/<\/span><span data-contrast=\"auto\">image is used to deploy into various environments.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">CI can\u00a0<\/span><span data-contrast=\"auto\">be\u00a0<\/span><span data-contrast=\"auto\">automated such that the\u00a0<\/span><span data-contrast=\"auto\">Docker<\/span><span data-contrast=\"auto\">\u00a0image<\/span><span data-contrast=\"auto\">\/build<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">is\u00a0<\/span><span data-contrast=\"auto\">automatically deployed to the\u00a0<\/span><span data-contrast=\"auto\">other<\/span><span data-contrast=\"auto\">\u00a0environments.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Quality Gate 4: Execute Integration Tests<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Once\u00a0<\/span><span data-contrast=\"auto\">you<\/span><span data-contrast=\"auto\">\u00a0have the\u00a0<\/span><span data-contrast=\"auto\">build(s)<\/span><span data-contrast=\"auto\">\u00a0of a microservice and its dependencies<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0it is good to deploy all of them\u00a0<\/span><span data-contrast=\"auto\">for getting\u00a0<\/span><span data-contrast=\"auto\">integrated into a Dev environment or Integration Test Environment<\/span><span data-contrast=\"auto\">. Here<\/span><span data-contrast=\"auto\">\u00a0QA\u00a0<\/span><span data-contrast=\"auto\">teams must ensure th<\/span><span data-contrast=\"auto\">at the<\/span><span data-contrast=\"auto\">\u00a0infrastructure team helps\u00a0<\/span><span data-contrast=\"auto\">with the setup<\/span><span data-contrast=\"auto\">\u00a0to run Integration Test Suites.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This must be a part of CI\u00a0<\/span><span data-contrast=\"auto\">to CD transition\u00a0<\/span><span data-contrast=\"auto\">process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">A\u00a0<\/span><span data-contrast=\"auto\">Dev or Integration Test<\/span><span data-contrast=\"auto\">\u00a0environment is the best place to execute<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Any framework that allows testing these integrations can be used<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">:\u00a0<\/span><span data-contrast=\"auto\">If some of the integrations fail then a manual intervention is needed before pushing the build to other environments<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 5: Verify the Consumer Contracts as a Provider<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">As a provider, you will verify the\u00a0<\/span><span data-contrast=\"auto\">contracts<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">published<\/span><span data-contrast=\"auto\">\u00a0by all of your consumers. These contracts are certainly not the ones published by this microservice. They are published by the\u00a0<\/span><span data-contrast=\"auto\">consuming<\/span><span data-contrast=\"auto\">\u00a0microservices (internal or external).<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">For example<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0if this microservice is\u00a0<\/span><span data-contrast=\"auto\">a\u00a0<\/span><span data-contrast=\"auto\">consumer<\/span><span data-contrast=\"auto\">\u00a0for<\/span><span data-contrast=\"auto\">\u00a03 other services then they would have published and shared their\u00a0<\/span><span data-contrast=\"auto\">contract<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">with<\/span><span data-contrast=\"auto\">\u00a0your team by now and you ought to verify them.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This\u00a0<\/span><span data-contrast=\"auto\">is a<\/span><span data-contrast=\"auto\">\u00a0part of<\/span><span data-contrast=\"auto\">\u00a0the<\/span><span data-contrast=\"auto\">\u00a0CD process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">A Test or Component Test environment is the best place to execute<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">PACT framework allows\u00a0<\/span><span data-contrast=\"auto\">you<\/span><span data-contrast=\"auto\">\u00a0to verify the contracts<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit\u00a0<\/span><span data-contrast=\"auto\">criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">:<\/span><span data-contrast=\"auto\">\u00a0If some parts of the\u00a0<\/span><span data-contrast=\"auto\">contract<\/span><span data-contrast=\"auto\">\u00a0verification fail<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">you<\/span><span data-contrast=\"auto\">\u00a0do<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">n<\/span><span data-contrast=\"auto\">o<\/span><span data-contrast=\"auto\">t need to stop the deployments.\u00a0<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"auto\">There are<\/span><span data-contrast=\"auto\">\u00a0two\u00a0<\/span><span data-contrast=\"auto\">possible<\/span><span data-contrast=\"auto\">\u00a0reasons<\/span><span data-contrast=\"auto\">\u00a0for failures<\/span><span data-contrast=\"auto\">:<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:720,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"2\"><span data-contrast=\"auto\">Due to an expected change to the schema or API of the provider which was<\/span><span data-contrast=\"auto\">\u00a0no<\/span><span data-contrast=\"auto\">t communicated to its consumers properly<\/span><span data-contrast=\"auto\">:<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">T<\/span><span data-contrast=\"auto\">he consumers published old contract whose verification failed. In this\u00a0<\/span><span data-contrast=\"auto\">situation<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">you<\/span><span data-contrast=\"auto\">\u00a0can inform the consumers of the change and just continue\u00a0<\/span><span data-contrast=\"auto\">with<\/span><span data-contrast=\"auto\">\u00a0further deployments and propagation towards releases<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"o\" data-font=\"Courier New\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"2\"><span data-contrast=\"auto\">Due to an unexpected change introduced to API<\/span><span data-contrast=\"auto\">\u00a0(possibly developer<\/span><span data-contrast=\"auto\">\u2019s<\/span><span data-contrast=\"auto\">\u00a0mistake)<\/span><span data-contrast=\"auto\">:\u00a0<\/span><span data-contrast=\"auto\">In this case<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0it<\/span><span data-contrast=\"auto\">\u00a0i<\/span><span data-contrast=\"auto\">s a potential threat to its consumers as they\u00a0<\/span><span data-contrast=\"auto\">may\u00a0<\/span><span data-contrast=\"auto\">face unhandled exception<\/span><span data-contrast=\"auto\">s or\u00a0<\/span><span data-contrast=\"auto\">\u2018<\/span><span data-contrast=\"auto\">resource not found<\/span><span data-contrast=\"auto\">\u2019<\/span><span data-contrast=\"auto\">\u00a0errors<\/span><span data-contrast=\"auto\">\u00a0at their APIs and U<\/span><span data-contrast=\"auto\">I<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">, thereby<\/span><span data-contrast=\"auto\">\u00a0causing customer complaints and escalations<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 6<\/span><\/b><b><span data-contrast=\"auto\">: Execute Component Tests<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">With the above quality gates propagating into continuous delivery process, it is\u00a0<\/span><span data-contrast=\"auto\">your<\/span><span data-contrast=\"auto\">\u00a0best change to perform a full functional testing of a microservice.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Setup some automated jobs that executes all of your component test suites by hitting the public APIs provided by your microservice.<\/span><span data-contrast=\"auto\">\u00a0This is like a typical web service testing.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This\u00a0<\/span><span data-contrast=\"auto\">can<\/span><span data-contrast=\"auto\">\u00a0be a part of\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">CD process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">A Test or Component Test environment is the best place to execute<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Any\u00a0<\/span><span data-contrast=\"auto\">framework for API testing (SoapUI, ReadyAPI<\/span><span data-contrast=\"auto\">,\u00a0<\/span><span data-contrast=\"auto\">REST-assured<\/span><span data-contrast=\"auto\">\u00a0etc.) can be used<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">Mock services and mock data are the key factors for this execution<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit\u00a0<\/span><span data-contrast=\"auto\">criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">:<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">90<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">95% is enough without blockers and critical issues to propagate to other environments. This includes all the edge cases and failures<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0many expose very minor trivial defects.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 7:\u00a0<\/span><\/b><b><span data-contrast=\"auto\">Execute Component Performance Tests<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Component performance tests are nothing but the <a href=\"https:\/\/www.cigniti.com\/services\/performance-testing\/\" target=\"_blank\" rel=\"noopener\">performance tests<\/a> on a microservice. Remember that the components are microservices themselves. It is a good practice to quickly\u00a0<\/span><span data-contrast=\"auto\">analyse<\/span><span data-contrast=\"auto\">\u00a0the performance of your microservice<\/span><span data-contrast=\"auto\">\u00a0alone before you concentrate on the entire solution.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This can be a part of\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">CD process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">A Component\u00a0<\/span><span data-contrast=\"auto\">Performance<\/span><span data-contrast=\"auto\">\u00a0environment is the best place to execute<\/span><span data-contrast=\"auto\">. If you do not have resources<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0then just use your\u00a0<\/span><span data-contrast=\"auto\">Test<\/span><span data-contrast=\"auto\">\u00a0environment but\u00a0<\/span><span data-contrast=\"auto\">remember that the performance measurements where the mock services are involved are unrealistic<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">Tools such as\u00a0<\/span><span data-contrast=\"auto\">Meter, Locust, Load Runner<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0etc. are good example<\/span><span data-contrast=\"auto\">s<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">:\u00a0<\/span><span data-contrast=\"auto\">Just follow the usual standards of performance testing<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 8:\u00a0<\/span><\/b><b><span data-contrast=\"auto\">Execute\u00a0<\/span><\/b><b><span data-contrast=\"auto\">End to End Tests<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">With the results from all the above Quality Gates, it gives us a greater level of confidence that our microservice performs well when it is alone<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0but we are not\u00a0<\/span><span data-contrast=\"auto\">sure<\/span><span data-contrast=\"auto\">\u00a0how it works when integrated with all of the microservices to form a complete system. This is where we must setup a job to execute our e2e tests with either a manual trigger or an automated one. As the execution times are long<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">it<\/span><span data-contrast=\"auto\">\u00a0i<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0better to choose when you want to trigger this.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Things to consider:<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">This\u00a0<\/span><span data-contrast=\"auto\">is<\/span><span data-contrast=\"auto\">\u00a0a part of<\/span><span data-contrast=\"auto\">\u00a0the<\/span><span data-contrast=\"auto\">\u00a0CD process<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"auto\">A\u00a0<\/span><span data-contrast=\"auto\">staging environment<\/span><span data-contrast=\"auto\">\u00a0is the best place to execute. If you do not have resources<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0then just use your\u00a0<\/span><span data-contrast=\"auto\">UAT<\/span><span data-contrast=\"auto\">\u00a0but remember that the\u00a0<\/span><span data-contrast=\"auto\">other stakeholders may be working on this at the same time.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"auto\">This environment is production like and expects<\/span><span data-contrast=\"auto\">\u00a0that<\/span><span data-contrast=\"auto\">\u00a0all real dependencies are connected and integrated<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"auto\">UI framework in combination with API test libraries and\u00a0<\/span><span data-contrast=\"auto\">tools with\u00a0<\/span><span data-contrast=\"auto\">data base\u00a0<\/span><span data-contrast=\"auto\">verification capabilities are useful<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"5\" aria-setsize=\"-1\" data-aria-posinset=\"4\" data-aria-level=\"1\"><span data-contrast=\"auto\">Exit criteri<\/span><span data-contrast=\"auto\">on<\/span><span data-contrast=\"auto\">:\u00a0<\/span><span data-contrast=\"auto\">It is up to you to define a criteria. You expect many failures as it involves UI and you may want to manually do a test failure analysis before pushing to UAT or Production.<\/span><span data-ccp-props=\"{&quot;134233279&quot;:true,&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"auto\">Quality Gate 9<\/span><\/b><b><span data-contrast=\"auto\">\u00a0(Optional)<\/span><\/b><b><span data-contrast=\"auto\">:\u00a0<\/span><\/b><b><span data-contrast=\"auto\">UAT<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This is optional for few organizations<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">You\u00a0<\/span><span data-contrast=\"auto\">may give your customers a chance to try their hands on the completely integrated system. The stakeholders may come back to you with their observations, trivial issues<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0and sometimes with major issues<\/span><span data-contrast=\"auto\">. Just keep listening to them and try reproducing before you log them into your\u00a0<\/span><span data-contrast=\"auto\">defect management\u00a0<\/span><span data-contrast=\"auto\">system.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">This means as a QA team<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0you are still active at this quality gate ensuring the best quality\u00a0<\/span><span data-contrast=\"auto\">is\u00a0<\/span><span data-contrast=\"auto\">given to your users.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"auto\">Quality Gate 10:\u00a0<\/span><\/b><b><span data-contrast=\"auto\">System Performance<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Understanding<\/span><span data-contrast=\"auto\">\u00a0the performance of individual microservices is not sufficient<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">We\u00a0<\/span><span data-contrast=\"auto\">must understand the response times, latency, throughput etc. when the complete system is working together with all of its internal and external dependencies.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">It<\/span><span data-contrast=\"auto\">\u00a0i<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0a<\/span><span data-contrast=\"auto\">\u00a0good idea to approach specialized\u00a0<\/span><a href=\"https:\/\/www.cigniti.com\/services\/performance-testing\/?utm_source=blog&amp;utm_medium=hyperlink\" target=\"_blank\" rel=\"noopener\"><span data-contrast=\"none\">performance testing<\/span><\/a><span data-contrast=\"auto\">\u00a0teams for this activity.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><b><span data-contrast=\"auto\">Quality Gate 1<\/span><\/b><b><span data-contrast=\"auto\">1<\/span><\/b><b><span data-contrast=\"auto\">:\u00a0<\/span><\/b><b><span data-contrast=\"auto\">Production<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">What do we do here?\u00a0<\/span><span data-contrast=\"auto\">QA team\u2019s<\/span><span data-contrast=\"auto\">\u00a0involvement is still there\u00a0<\/span><span data-contrast=\"auto\">at<\/span><span data-contrast=\"auto\">\u00a0the production releases<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0but it<\/span><span data-contrast=\"auto\">\u00a0i<\/span><span data-contrast=\"auto\">s minimal. Just do a quick sanity check. A manual approach is recommended here before you hand it over to\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">real users.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><b><span data-contrast=\"auto\">To Conclude<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Note that the\u00a0<\/span><span data-contrast=\"auto\">Test First\u00a0<\/span><span data-contrast=\"auto\">Approach<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">and\/<\/span><span data-contrast=\"auto\">or the Test<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">Driven Development (TDD) approaches in combination with\u00a0<\/span><span data-contrast=\"auto\">Behavior<\/span><span data-contrast=\"auto\">&#8211;<\/span><span data-contrast=\"auto\">Driven Development (BDD)<\/span><span data-contrast=\"auto\">\u00a0gives\u00a0<\/span><span data-contrast=\"auto\">the best visibility and\u00a0<\/span><span data-contrast=\"auto\">the best\u00a0<\/span><span data-contrast=\"auto\">results in testing microservices<\/span><span data-contrast=\"auto\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"auto\">Microservices follow a different architecture and have a lot of integrations with other microservices within an enterprise as well as from the outside world<\/span><span data-contrast=\"auto\">. By implementing Quality gates, you can significantly increase the confidence in the quality of each of your microservices, thus, leading to a high performing overall application.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:160,&quot;335559740&quot;:360}\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Note: This is in continuation to the blog &#8211;\u00a0Best testing strategies in a Microservice architecture\u00a0&#8211; contributed by our SME, Chandra Kiran Mamidala.\u00a0 Let us assume that\u00a0you\u00a0have implemented the strategy\u00a0for\u00a0testing\u00a0microservices\u00a0as discussed\u00a0and written all the test suites\u00a0as suggested. Where do you run them?\u00a0How do you make sure all your test suites are executed at right time and [&hellip;]<\/p>\n","protected":false},"author":45,"featured_media":14370,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2337],"tags":[2065,2945,2950,2949,2946,413,1242,2951,2952,2064,1243,2067,2066,2953,2063,2948,435],"ppma_author":[3737],"class_list":["post-14369","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microservices-testing","tag-automated-testing-of-microservices","tag-component-testing","tag-continuous-delivery-for-microservices","tag-continuous-integration-for-microservices","tag-contract-testing","tag-integration-testing","tag-microservices-architecture","tag-microservices-best-practices","tag-microservices-performance-testing","tag-microservices-test-automation","tag-microservices-testing","tag-microservices-testing-approach","tag-microservices-testing-framework","tag-microservices-testing-strategies","tag-microservices-testing-strategy","tag-test-microservices","tag-unit-testing"],"authors":[{"term_id":3737,"user_id":45,"is_guest":0,"slug":"chandrakiran","display_name":"Chandra Kiran Mamidala","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/705ad8a6030f7832dfa9ec1d718b16b890152f8781356b3663202aeb9ac732ef?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Mamidala","first_name":"Chandra Kiran","job_title":"","description":"Chandra Kiran Mamidala is an Associate Architect at Cigniti Technologies. He is part of the Delivery Team. He has an overall experience of 11+ years. He lives in Chester, United Kingdom\u00a0with his wife and kids.\u00a0Off work, Chandra is an enthusiastic badminton player."}],"_links":{"self":[{"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/posts\/14369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/users\/45"}],"replies":[{"embeddable":true,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/comments?post=14369"}],"version-history":[{"count":0,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/posts\/14369\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/media\/14370"}],"wp:attachment":[{"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/media?parent=14369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/categories?post=14369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/tags?post=14369"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/coforge.site\/cigniti\/blog\/wp-json\/wp\/v2\/ppma_author?post=14369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}