{"data":{"article":{"id":"458b814a-9266-529b-a538-b64d05af8cc6","frontmatter":{"category":"QA","title":"How to O(1) your test preparation","date":"2019-01-29","summary":"Are you sure your tests are fast enough?","thumbnail":null,"authorName":"Alexander Gyulai","authorDescription":"Head of Quality Assurance at AUTO1 Group","authorAvatar":{"relativePath":"pages/faster-automation-tests/avatar.png","childImageSharp":{"resolutions":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsSAAALEgHS3X78AAACyElEQVQ4y4VUO2gUURR9mZmN8YcItoKVjeXuzsxu9jOzm92NkBBTqDEmjZAEgtqIpSgI1gp+uhS6kEI7wc7GQsFCLERiISGCaGHhF02yu+M5s/cujyC4cJY379573r3n3XdNvV51xsYiJ4rKbqlUyBj8wjAYyWazp4BVYB3YAraBDeAhMBcE/l76lkrFTLVachuNyCGXEbJMrVbx6ADnaWAtn88nvu8nWBMdQcJ9Auv3wCxjWq2aC9IMSF3DzCyyG1YAs9pSYkL2melmLpfT71tKGkUlz2iZJAuCgA5dEjGAwPoV0AbuAy+tfR7YkZjb5CiXR1OutEw5jWQdCfgCnEiSxNg/7LWAj+KTSiHSzBvrAtascrriPCmnDkP4AYQ0Em3TGPHf8P38ARpP/4PsHQ7aU69Hqdi4OJeI47JXLg9IX1tVbUuWCzSsygcJO+L0goGNRpySoB1colarerhEvcCn4tuxCB/TsC5ZdS3Ct2Ho75uZmRoigWbIbgCxt7Q0O8TLsgg17o2R2+JHzzJcV/1IoBlybel42SLsCcc3I6UqoaZ+lUHFYjjCzJSQa+4J4UVLKiX8ScOGVXJXDN+xd7SfZXFYS65U+n2Wz+cOw+ezHadSkfCRdVJiZdlmMG9ZtHMpgWR3Z0eMSvWExjmrbXoCbZ951dIim7Yk6u1IYtlwavChW51Pp01tXOwf01eC9RHs/Rbbnx2Hf4IUh/Q5zdol8H3KG22Pj9edOK54LF1876pd37TELhqdZ+J4MwxDHUvXgDOFQrB7YqLpjI4WdhG8GLYNbCeBK/1+TWNWRG+Pfy5Hj5Dek3IXzX9+8DkL/AIeLC/PDU1NHXdSQk5altNsDkjPAT+ArzKyFnK5bB2IxbYik4hanmfM5GTL6Q/Y2DUc25y0HLToubR8TI39cL4APJOxr/35AXgOXEJnHKQvepP6eiQj119kDrZjqLo8HAAAAABJRU5ErkJggg==","width":50,"height":50,"src":"/static/26a7a327ccc4b335712e5a7086f2b26d/45876/avatar.png","srcSet":"/static/26a7a327ccc4b335712e5a7086f2b26d/45876/avatar.png 1x,\n/static/26a7a327ccc4b335712e5a7086f2b26d/eb85b/avatar.png 1.5x,\n/static/26a7a327ccc4b335712e5a7086f2b26d/4f71c/avatar.png 2x,\n/static/26a7a327ccc4b335712e5a7086f2b26d/9ec3e/avatar.png 3x"}}},"headerImage":{"relativePath":"pages/faster-automation-tests/header.png","childImageSharp":{"resolutions":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAIAAACHqfpvAAAACXBIWXMAAAsSAAALEgHS3X78AAABtklEQVQY0wGrAVT+AAACBAAEBwAECAQECA0ECRoECCwFCEEFCVYECGsECHkECYYECZUGDKIKEKEMEaMLEqcQHK4aJKo5PjghPwBTAwdiAgRvAQOBAQONAAORAQWOAweFBAmCCA18Cw9zDhFlEhRMEhI4ERdGHC5XOlZyXHx9hqiGosqfkLcAXQEEUwIFSgkNNgsQJA0SHxMWGBMVERUVCBMSARAPAA8SAQ0VAAsjHy1Rd36i0NTk9Pv//f3+/8zj14CnAAcSFgUTFgcQEAoQDgsODAYICAUGCQUFCwQIEwQIGwIJLBAbRz9Md5CevNje7f/q8PvT4c6Yu21CexENPgAIBQEHAwMBAAUAAAgABBQCCRkDDB0CDB8LEy8tN1xub465qb/uwdb3r8zdi7i4cKZ5VYsgJlkABSkBAhYAAAIQAAUTAwobBxAgBA4ZCBAfISY4WFtznZau0rTI76rD5YGoxlaSkzyAVS9xGiRcABM+AQklBQkXAQQLAAYOGAsVHw4ZIBUaJ0dDWJGOoM3Azty0xtGIqbZXiaA7fY0qdUwkZREbUgAQPQAGJAMEFQMGEgACBwAAAMagbU9WOO54AAAAAElFTkSuQmCC","width":1280,"height":445,"src":"/static/34ed0cae6856ac71c7fea1ac46b6a5a9/26421/header.png","srcSet":"/static/34ed0cae6856ac71c7fea1ac46b6a5a9/26421/header.png 1x"}}}},"html":"<p><em>(*) If your career as a QA - like the author’s - started without a computer science degree, you will hopefully love\nto hear and learn about the different theories and notations of runtime analysis.\nCheck wikipedia’s page about O-notation</em> <a href=\"https://en.wikipedia.org/wiki/Big_O_notation\">here</a></p>\n<p>Speed… Did you ever think how you can make your tests faster and more reliable? If you're anything like me or my colleagues at AUTO1,\nyou face this challenge all the time. Here at AUTO1 we are constantly looking for new ways to improve our tools and\nto make testing fast and efficient. In this article, I’m going to take test suite that takes ~70 min and reduce the execution time to 1 min!!!\nInteresting, right? :)</p>\n<h2>Intro</h2>\n<p>Let’s imagine we are testing some Web Shop Scenario. We need to test that users can do some actions with items they purchased\n(submit feedback, return, submit claim, etc.). And imagine that in this case we have exactly 20 scenarios that go like this:</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">Steps:\n- Create item, put item in certain state\n- Create user\n- Create user delivery address\n- Create user billing address\n- Create user payment details\n- Sell item to user\n- User does something with an item</code></pre></div>\n<h2>Back in times…</h2>\n<p>Let’s look at the timeline of our test</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/53febc88a158cff2aeae3979e1d5f8c6/dfeb3/scenario-v1.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 28.77164056059357%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAABDUlEQVQY04WQWU/CQBSF+6/d8AG3P+ECcemLPrglmvgAsS7RB5cIWIwJUKzGmCiVYkvbmc8ZsAkYiZPcnHPuPXcycww/SEgSicb3doyUEq+TqIoRQvLmxYSR6PHXVkQUC9rK2/L7c72jtd7TZfDPkSP4qGNM5qpk8g/Mmo8Kq2g9bypcLjGdrzC3cc/4Uonsmk12tcKE4jPrNplcmamVMgumzdjindqxCboJxlaxzt6pQ+HK7eHR5ROHF002CzWOr122rQY7Vh3rxkV7D84disq7e9JQPof9s6bq17BuX/pffv4QdLrDzw5j8AJQcal8wP+Zfyr+FQ17/RDEQBaGvlWnk4aa6t812P/Lm+pvrbW8il8UgXMAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"ScenarioV1\"\n        title=\"ScenarioV1\"\n        src=\"/static/53febc88a158cff2aeae3979e1d5f8c6/40fad/scenario-v1.png\"\n        srcset=\"/static/53febc88a158cff2aeae3979e1d5f8c6/707e9/scenario-v1.png 148w,\n/static/53febc88a158cff2aeae3979e1d5f8c6/649e0/scenario-v1.png 295w,\n/static/53febc88a158cff2aeae3979e1d5f8c6/40fad/scenario-v1.png 590w,\n/static/53febc88a158cff2aeae3979e1d5f8c6/b3fef/scenario-v1.png 885w,\n/static/53febc88a158cff2aeae3979e1d5f8c6/301c0/scenario-v1.png 1180w,\n/static/53febc88a158cff2aeae3979e1d5f8c6/dfeb3/scenario-v1.png 1213w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p>In this case, if you have twenty tests and you run them sequentially, it will take ~73 min.</p>\n<h2>Time to Improve!</h2>\n<p>What we can improve here? Of course everybody will say “Pffff, let’s run in parallel!”.\nThis is everyone’s first call, but for parallel execution you must always consider multiple aspects:</p>\n<ul>\n<li>Your test should neither rely nor be affected by tests running in parallel. It should be completely isolated.</li>\n<li>You must consider the application under tests. Is it capable of handling parallel execution? Do you have any external\ndependencies that can prevent you from this? Will your application behave in the same way if you run 20 tests concurrently?\nYou can run 20, 50 or 1000 parallel tests on your application, nevertheless under some circumstances you might want to\nreduce number of parallel threads.</li>\n</ul>\n<p>Let’s imagine we would like to keep ten threads for start. </p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/d2f1d79c60cd7407462532ce51d3d964/df03a/suite-v1.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 62.589928057553955%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABHklEQVQ4y61U20rDQBDNXyso+C9F9Au0+u5zqiiCFQULNsYHY7Dd7sxejrOXYDF9SrNwmJPsZDhnZkhhrYVzDt47QBD4UHjvUQQilUDGYaUTDxdDUQjiea4Y17cqcuvyywGnYDZR1dO7xmW5ipyN3cdyUjNfMqazdVJo97Dssudg+Wo2hmUzsuXtoYyi0Mgeph4SpmXqobG7FVjbx7a6qDAV9KlgHoox/WJh6UNeH/8sd1LnS4OLMlne5XjDwMOCcZ9x95aior+cWJBIMj3jtVK4efwRTlirDbTWICKJBG8Zi1rh5PwTR6c1DicVDiYfOD6r8SLfecfQRLmHMuUAK3Biv21bNE0TY3fXQSpLHqH9/oJhnZ8NwqaEf0IQ8Qu8S/jkKbPmpwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"SuiteV1\"\n        title=\"SuiteV1\"\n        src=\"/static/d2f1d79c60cd7407462532ce51d3d964/40fad/suite-v1.png\"\n        srcset=\"/static/d2f1d79c60cd7407462532ce51d3d964/707e9/suite-v1.png 148w,\n/static/d2f1d79c60cd7407462532ce51d3d964/649e0/suite-v1.png 295w,\n/static/d2f1d79c60cd7407462532ce51d3d964/40fad/suite-v1.png 590w,\n/static/d2f1d79c60cd7407462532ce51d3d964/b3fef/suite-v1.png 885w,\n/static/d2f1d79c60cd7407462532ce51d3d964/df03a/suite-v1.png 1112w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p>We significantly increased the speed. From ~73 to ~8 minutes. This already looks like a game changer! But can we do more? Spoiler: Yes we can!</p>\n<h2>Removing dependencies</h2>\n<p>If we check our test scenario again, we can clearly see that the actual validation of our test scenario happens only\nafter the third minute! And everything we have up until then it’s just creating preconditions.\nWhat we actually want to test is: <em><strong>“User can do certain action with item purchased on our platform”</strong>.</em>\nWe should not care <strong>HOW</strong> we got this item, we should have another test, testing that user should be able to purchase.\nThis just creates dependency for us that makes our tests:</p>\n<ol>\n<li>Slower</li>\n<li>Less stable. It becomes less stable because we have to go through multiple steps (in some cases maybe through multiple\napplications) with creating item, creating user, adding user info and so on. If something will fail in the middle (which can happen easily)\nit doesn’t really mean that user couldn't leave a feedback on the item.</li>\n</ol>\n<p>   <em>P.S. While writing this article I tried to re-create all these conditions and I didn’t have any successful build.\nAnd it was always something related to other dependencies.</em> </p>\n<p><strong>Solution?</strong> There are many possible answers, the one I chose for this example is to move all logic with test data preparation to the API layer.\nLet’s try this and review our timeline again</p>\n<p> <a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/df680a4cadba8a015fb5727b6e47a554/68371/scenario-v2.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 31.275385865150284%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAGCAYAAADDl76dAAAACXBIWXMAAAsSAAALEgHS3X78AAAA9ElEQVQY061QTU/CQBDtX8cU9UDgR2gR5CN4UtBAkAtcvNOybYFoNJ6Mabttd/c5uysETlzY5GXevHkz2RlHKYU0lyiERF5IZMSFtFpeSpSkJ1xACAV+UM+IF6XNU10nTc9ycObnhJ8pLluhQa0bw20yVDXvrHBxuzTxquXD9XzDXW9JeYDrdoAK1Rt9Znz1HjMbOB/fCZrPDP1pjOFii940wuN8g84kwv04xBPxmyGjuMbgNcbdC8NosTH8YRZhMFvDG60weXu3Kydc4etHIRfHX+clkBEU8V9uNToZ0uLYp/vk4cp6qm2zR91hp+1xwif/8z8Hu78KDjTTEgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"ScenarioV2\"\n        title=\"ScenarioV2\"\n        src=\"/static/df680a4cadba8a015fb5727b6e47a554/40fad/scenario-v2.png\"\n        srcset=\"/static/df680a4cadba8a015fb5727b6e47a554/707e9/scenario-v2.png 148w,\n/static/df680a4cadba8a015fb5727b6e47a554/649e0/scenario-v2.png 295w,\n/static/df680a4cadba8a015fb5727b6e47a554/40fad/scenario-v2.png 590w,\n/static/df680a4cadba8a015fb5727b6e47a554/b3fef/scenario-v2.png 885w,\n/static/df680a4cadba8a015fb5727b6e47a554/301c0/scenario-v2.png 1180w,\n/static/df680a4cadba8a015fb5727b6e47a554/68371/scenario-v2.png 1231w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p> Amazing, this is how our test looks now! two minutes just gone.</p>\n<p> And this is how our suite looks now comparing to other runs.\n<a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/85c2500e17e9f80939393028938cff4d/a7e37/suite-v2.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 54.833040421792624%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABB0lEQVQoz62TTU7DMBCFe3WQuAtCHINuaBddsaFlU7Gomjauyzi2Y8/DM+4fC4qUMtJL4rH15nM8HuWcEWNEZgaQwZwhuSHi4jGShwwkNvuEmMSYdXKI1DClavj67mFd/R5sKHQhRDWZzrtimJTwxi1zNVx47P+D0IegJhMhpBsJKw3OhF0lvAyZP+qvuCBkJdxRr+1zqqodcNaxreQgT/rtH07mHl/+J4Y0gKGMnWN9p3wdUw37Pmn12YdDaz36GA4nn7FcB9w/Nbh7XOHhudExOJW1hPGbxUvRZ+M1J5SHPkx6W0LZujFGRUSlUMmVvOs8NtsW5DpdJzKWsFq3aFqr83rbiuE3AelfXfVuxx0AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"SuiteV2\"\n        title=\"SuiteV2\"\n        src=\"/static/85c2500e17e9f80939393028938cff4d/40fad/suite-v2.png\"\n        srcset=\"/static/85c2500e17e9f80939393028938cff4d/707e9/suite-v2.png 148w,\n/static/85c2500e17e9f80939393028938cff4d/649e0/suite-v2.png 295w,\n/static/85c2500e17e9f80939393028938cff4d/40fad/suite-v2.png 590w,\n/static/85c2500e17e9f80939393028938cff4d/b3fef/suite-v2.png 885w,\n/static/85c2500e17e9f80939393028938cff4d/a7e37/suite-v2.png 1138w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p> Again we manage to halve the test execution time! Considering that it was already pretty fast, it's a great improvement.\nSo at this point you might think we are done here, it’s time to go to bar, grab a beer and celebrate.\nBut then you come back the next day and think \"there must be more\"...</p>\n<p>Having test preparation using API is a great step here, but does it scale from 20 tests to 1000 without having side-effects?\nAt the end, your test data preparation might look like this:</p>\n<p><img src=\"/static/machingun-f6e9bbc355090a0e8c6db2e891dfb64a.gif\" alt=\"machingun\" title=\"Suitemachingun\"></p>\n<p>Assuming you have around 40 calls with a reasonable fan-out for every scenario and you usually run tests in multiple threads,\nyou might involuntary start a load test there. Aaaaand it’s time to look for a solution again!</p>\n<h2>Introducing Q-Service</h2>\n<p>What if we have our test data waiting for us somewhere? Wouldn’t be amazing?!\nOur solution for this problem was to create a Web Service that would keep the data in a queue for us.\nIt provides couple of huge benefits for us:</p>\n<ol>\n<li>Instead of doing all these calls in runtime, we do 1 single call to our API to get test data. And instead of 1 min in test preparation we got &#x3C;1 sec!</li>\n<li>We don’t overload the system while executing tests. Which also means for us we can run more tests in parallel!</li>\n<li>Tests are way more stable. Now we just need to take our test data and check that user can do certain action with that item.</li>\n</ol>\n<p>Let’s look at our timeline again. This is how our test scenario changed:</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/7756153b5c3b401f4d48add89a0b22f0/e1bf1/scenario-v3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 44.48160535117057%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA/klEQVQoz61STUvDQBDNn7OgHnvqyZ+hNKdePPQPVPyoF6GXtpoexJ8QQTdFz/4BD2LFNDHZ2efOLkm2aQgU+uCx82aGt8zOetBQSqEAx4V28y7qebffK0SaEZI/2jBtoySF34RATo5RGrLZTyyRGlPFrrapRtvPhoTvOMc6ldVFbGiL1QhSk7AbpKpG9zhY6ZtOhkt0zkIc9p/RHbygdy6MPtKac3we+/r0rS7I+uA0xPJjZUc246YZ7h7fMJq+4nIuMHl6N7y+FxgHkeGVjrl+MRO4eYjK/DgQuF1E+PyKN99wHyhHNluTZJg3Mbc1Isumnq0tq9r623TbP/0H4QWmFav5swkAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"ScenarioV3\"\n        title=\"ScenarioV3\"\n        src=\"/static/7756153b5c3b401f4d48add89a0b22f0/40fad/scenario-v3.png\"\n        srcset=\"/static/7756153b5c3b401f4d48add89a0b22f0/707e9/scenario-v3.png 148w,\n/static/7756153b5c3b401f4d48add89a0b22f0/649e0/scenario-v3.png 295w,\n/static/7756153b5c3b401f4d48add89a0b22f0/40fad/scenario-v3.png 590w,\n/static/7756153b5c3b401f4d48add89a0b22f0/b3fef/scenario-v3.png 885w,\n/static/7756153b5c3b401f4d48add89a0b22f0/301c0/scenario-v3.png 1180w,\n/static/7756153b5c3b401f4d48add89a0b22f0/e1bf1/scenario-v3.png 1196w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p> And our test suite looks like this right now:</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/74d130f14924155f9097ed923d184939/6f904/suite-v3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 55.95854922279793%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAABYlAAAWJQFJUiTwAAABAElEQVQoz62SUU7DMBBEc3KuwDE4AP8coh8IUSpUELSB2I7jxIntXQ+2MfCDhEhraSTvrjR6O9qGmeGcA2JMYuR6rWLyaGIxinAhwsyMVJTBWjWcDcEQhrA9eOTHfIphRuUAmQwfDq4QEp20coGCHBm7Yyj/r96a1xQa8mXlMxF+4uSVd8eaYTxDhsKEPwlzPxB/z6nqV0KVM2xrhjWPelH4T6T1Dgnv/YLti020HhQ8Ou1wed3h4uoNNxuDkHq3+wmbxwmvYkbwHr1ZoJIm69I8/BASEZxPp6M0tNaw1sIHwnM74v5JQo8ei/Plf7dXaMWIYRjQySRlIGSPZZkL4QfC8mBOKQFpMgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"SuiteV3\"\n        title=\"SuiteV3\"\n        src=\"/static/74d130f14924155f9097ed923d184939/40fad/suite-v3.png\"\n        srcset=\"/static/74d130f14924155f9097ed923d184939/707e9/suite-v3.png 148w,\n/static/74d130f14924155f9097ed923d184939/649e0/suite-v3.png 295w,\n/static/74d130f14924155f9097ed923d184939/40fad/suite-v3.png 590w,\n/static/74d130f14924155f9097ed923d184939/b3fef/suite-v3.png 885w,\n/static/74d130f14924155f9097ed923d184939/6f904/suite-v3.png 1158w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p>We barely can see it on our timeline :)</p>\n<ul>\n<li>1 test now takes ~30s to run (instead of 3m 40s). And it’s “slow” and “unstable”(as it’s usually called) UI end-to-end test. </li>\n<li>Entire suite takes ~1m</li>\n<li>We can easily double the number, if we need, since these tests are producing a very little amount of our resources</li>\n</ul>\n<h2>How does it work?</h2>\n<p>Stay tuned! We will open-source it soon!</p>\n<h2>Summary</h2>\n<p>In AUTO1 Group, every day we are looking for smarter ways to do software development and testing.\nAnd the main point in this article is that you should never stop innovating and looking for new solutions to existing problems.\nSomething that works for us, is not necessarily going to work for you,\nbut maybe you will ask yourself: <em><strong>“Where is our next level? Can we do something better?”</strong></em></p>","fields":{"slug":"/faster-automation-tests/","tags":["testing","automation"]}},"categoryArticles":{"edges":[{"node":{"id":"a26825f5-bab1-5ad6-bc95-41f8c672ba4c","frontmatter":{"category":"QA","title":"Efficient Testing - Automate Early","date":"2022-06-01","summary":"Early bird gets the worm - or how preparing in time can reduce the effort needed in manual testing.","thumbnail":null,"authorName":"Joanna Tyka","authorDescription":"Joana is a QA Automation Engineer in our Katowice office.","authorAvatar":{"relativePath":"pages/efficient-testing-2/JoannaT.jpeg","childImageSharp":{"resolutions":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAATABQDASIAAhEBAxEB/8QAGAABAQEBAQAAAAAAAAAAAAAAAAUCBAH/xAAVAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAABqc+OOWqwSV4DXFH/xAAcEAEAAQQDAAAAAAAAAAAAAAACAwABBCEQETH/2gAIAQEAAQUCSsDHJd8ZS6gie6yaWk/f/8QAFREBAQAAAAAAAAAAAAAAAAAAASD/2gAIAQMBAT8BI//EABQRAQAAAAAAAAAAAAAAAAAAACD/2gAIAQIBAT8BH//EAB0QAAEEAgMAAAAAAAAAAAAAAAEAAhARAyFBUXH/2gAIAQEABj8CLjwtgC4I7TGwPVjqP//EABsQAQEBAAIDAAAAAAAAAAAAAAERABAxIVFx/9oACAEBAAE/IeogXCDAUjcuKkWDGQR7X7rlS/fEZ4Kl4P/aAAwDAQACAAMAAAAQ9AjA/8QAFxEBAQEBAAAAAAAAAAAAAAAAARARMf/aAAgBAwEBPxACOw5P/8QAFxEBAQEBAAAAAAAAAAAAAAAAAAERMf/aAAgBAgEBPxC9Yqv/xAAdEAEAAwADAAMAAAAAAAAAAAABABEhMUFhgaHB/9oACAEBAAE/ELDbyryGiEG8eM0myDEXXZjO3Q44B9sdxnK12+IIWkHfEAGuz9Z//9k=","width":50,"height":50,"src":"/static/d453ba1bcdc86e2db725a048eefd13a6/d2d31/JoannaT.jpeg","srcSet":"/static/d453ba1bcdc86e2db725a048eefd13a6/d2d31/JoannaT.jpeg 1x,\n/static/d453ba1bcdc86e2db725a048eefd13a6/0b804/JoannaT.jpeg 1.5x,\n/static/d453ba1bcdc86e2db725a048eefd13a6/753c3/JoannaT.jpeg 2x,\n/static/d453ba1bcdc86e2db725a048eefd13a6/31ca8/JoannaT.jpeg 3x"}}},"headerImage":null},"html":"<h1>Efficient Testing - Automate Early</h1>\n<p>I don't have time for automation - how often do you say that? I said that once and now I feel a bit ashamed thinking about it. To never repeat this mistake I had to find some solution, to not only have enough time for automation but also to be much faster using it. I realized that when I was repeating the same test case manually for the 5th time, it was incredibly boring and each try was taking 15 minutes of my time. Today I would like to share my experience with you on how to make it faster and more pleasant. In the big picture, it is all about being agile, splitting the job between small pieces, done as fast as possible. Before the feature is fully ready for tests we have so many different opportunities to start working on automation.</p>\n<h2>Planning and reconnaissance</h2>\n<p><em>An hour of planning can save you 10 hours of doing - Dale Carnegie</em></p>\n<p>As soon as test scenarios are prepared, you can select candidates for automation and choose which ones should be executed on API level and which on UI. It should be a part of a well-prepared automation strategy (more about test automation strategy here <a href=\"https://auto1.tech/efficient-testing-1/\">https://auto1.tech/efficient-testing-1/</a> ). Check whether all necessary API calls are available for you (maybe you need to ask developers to create new endpoints?), what will be the steps to prepare the environment for the test, explore existing automation infrastructure and recognize how many new methods and classes you will need to prepare. Sometimes our features are settled on some other pages or we need to go through other features or applications to do our tests. As these parts already exist, it is a great time to cover it with automation if nobody hasn't done that before. It is also a great time to consider which tools will be needed and find new libraries that will be more effective.</p>\n<h2>Test data preparation</h2>\n<p>Test data means all that needs to be prepared before your real test will start. When you are sure that you know all the preconditions and steps required to arrange the system before beginning the testing, you can recognize how to prepare it just when the first version of the specification is written. For example, let's take an order in the shop. When developers write their code you can write your own which will prepare test data via API, so following our example the order in specified state. To make it more efficient you can store example of the order in the queue (read more about it here <a href=\"https://auto1.tech/faster-automation-tests/\">https://auto1.tech/faster-automation-tests/</a>). It will be so helpful when you will need to execute the first most basic test and speeds up the whole process significantly. Developers in your team will be also very grateful for the created test data that they can take and quickly test their changes on.</p>\n<h2>Page Object skeletons</h2>\n<p>If you use Page Object Pattern you can create a page objects skeleton just now based on the design. Prepare all classes storing variables with empty locators, write all methods which will use these locators to interact on the page and prepare bigger steps that will do your manual work. When the front end part of the feature will be implemented you can just fill in locators one by one look at the DOM and adjust steps easily. With unique locators added by developers, it will be almost a pure pleasure.</p>\n<p><img src=\"https://i.postimg.cc/tXm79NqD/image.png\"></p>\n<p>Let's take this design of the saved searches page as an example and imagine a test scenario that verifies that saved searches are displayed on the proper page and the user can use a saved search to view the current results of searching. We know that to be able to execute this scenario we need the signed-in user so we can prepare this user just now. Looking at this picture we already know that we have an upper menu that should be already covered with automation (if it isn't covered, the time to do it is just now) and we need to use it to open my account view. We have also a side menu to open the saved searches page from my account context. We know how the saved search will look and which button we will need to click to open search results. Having all this information we can prepare the saved search page class, empty locators for all elements and methods that will interact with the page.</p>\n<h2>Doubts?</h2>\n<p>Many times I saw this approach to automation. I will do everything manually and leave the automation creation at the end or it doesn't make any sense to create automation now, because I will have to change it. Have you seen something similar? But how much time will be needed then to write all automated tests? Two weeks, or more? Who will give this time, when a new urgent feature is upcoming? From my perspective, it is really hard to find that person and it is well-argued. That's why in my humble opinion it is much better to split your time into small sessions before the feature is ready for tests and then have all automation components already done, then just write tests on demand. Isn't it beautiful having valuable tests from the start and be able to use them as regression tests at any time?</p>\n<h2>In real life</h2>\n<p>I will give you my example: I was testing integration between two systems. Requirements were very agile, five teams were engaged in this feature and multiple layers of integration were created, so we had many bugs by the way. I had to repeat every test scenario 10 times on average. Manually test data preparation for each took 10 minutes, the real testing part between 5 and 10 minutes. After the third attempt, I was tired and frustrated. The more tired and frustrated I was - the more mistakes I made. It was a critical point for me to start writing automated tests. Of course, I had to spend a few hours to have it ready, but what a relief I felt when the 15 minutes scenario was done by my automation in 3 minutes. The other big benefit was that automation doesn't make mistakes and I could run my tests how many times I needed so I've stopped caring about the number of repetitions. I was able to share these tests with my colleague that needed them for testing the other part of this integration. My rough calculations show that I saved a few days and so many hairs which I would have ripped out of my head if I had to do all these tests manually to the end. When I was asked about regression I needed only a few minutes of my effort.</p>\n<h2>Conclusion</h2>\n<p>We have so many opportunities to be well prepared for upcoming features and to reduce the effort needed in manual testing. Creating smart automation will develop our coding skills and help to save time and frustration. I am sure that there are many other ways to receive significant benefits by automating early, we just need to use them.</p>","fields":{"slug":"/efficient-testing-2/","tags":["auto1","engineering","qa","testing"]}}},{"node":{"id":"43a222cd-fe2c-5cb5-af76-53e7d4ad29ec","frontmatter":{"category":"QA","title":"The journey of a QA engineer in AUTO1 Tech","date":"2022-03-31","summary":"Check out Dhivya's journey in our QA department & how our stack and team contributed.","thumbnail":null,"authorName":"Dhivya Venugopal","authorDescription":"Dhivya is a Junior QA Engineer in the AUTO1 Berlin office.","authorAvatar":{"relativePath":"pages/qa-engineer-journey/dhivya.jpg","childImageSharp":{"resolutions":{"base64":"data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAAUABQDASIAAhEBAxEB/8QAGAABAAMBAAAAAAAAAAAAAAAAAAEEBQP/xAAWAQEBAQAAAAAAAAAAAAAAAAABAAL/2gAMAwEAAhADEAAAAXWvULaZ6pqGyQn/xAAcEAACAQUBAAAAAAAAAAAAAAABAgADBBESIRP/2gAIAQEAAQUCpnisScxMquzerXOJXGkTon//xAAVEQEBAAAAAAAAAAAAAAAAAAARIP/aAAgBAwEBPwFj/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAECECH/2gAIAQIBAT8BUTb/AP/EABwQAAEEAwEAAAAAAAAAAAAAAAAQESFBARIxMv/aAAgBAQAGPwIy/KSTY8EDUn//xAAbEAACAwEBAQAAAAAAAAAAAAABEQAxQSFRgf/aAAgBAQABPyHykFbsz0UKMJmkC9nELAfyNrrluBBEa2WJpCJ//9oADAMBAAIAAwAAABCHMMH/xAAZEQEAAgMAAAAAAAAAAAAAAAABABEQITH/2gAIAQMBAT8QBVM1Hrj/xAAXEQEBAQEAAAAAAAAAAAAAAAABEDFB/9oACAECAQE/EE07BhP/xAAcEAEBAAMAAwEAAAAAAAAAAAABEQAhMVFhcaH/2gAIAQEAAT8QUhkEVKfHjA10KQp0jMUp9wY6EihV16w0n7o+2sU+sPC/mXadbXuBNStjW5gkDgZ//9k=","width":50,"height":50,"src":"/static/d37e68c1bb8fcdb464c251c9a15e7dbe/d2d31/dhivya.jpg","srcSet":"/static/d37e68c1bb8fcdb464c251c9a15e7dbe/d2d31/dhivya.jpg 1x,\n/static/d37e68c1bb8fcdb464c251c9a15e7dbe/0b804/dhivya.jpg 1.5x,\n/static/d37e68c1bb8fcdb464c251c9a15e7dbe/753c3/dhivya.jpg 2x,\n/static/d37e68c1bb8fcdb464c251c9a15e7dbe/31ca8/dhivya.jpg 3x"}}},"headerImage":null},"html":"<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/5403ba9bebd07a50595eb7001d9728b7/a402e/1.jpg\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 66.8%; position: relative; bottom: 0; left: 0; background-image: url('data:image/jpeg;base64,/9j/2wBDABALDA4MChAODQ4SERATGCgaGBYWGDEjJR0oOjM9PDkzODdASFxOQERXRTc4UG1RV19iZ2hnPk1xeXBkeFxlZ2P/2wBDARESEhgVGC8aGi9jQjhCY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2P/wgARCAANABQDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAAUE/8QAFQEBAQAAAAAAAAAAAAAAAAAAAAH/2gAMAwEAAhADEAAAAce+QSqjk//EABoQAAMAAwEAAAAAAAAAAAAAAAACAwEQERP/2gAIAQEAAQUCmy5FnJjxmd13J//EABcRAAMBAAAAAAAAAAAAAAAAAAABEgL/2gAIAQMBAT8BlE5P/8QAFxEAAwEAAAAAAAAAAAAAAAAAAAERAv/aAAgBAgEBPwGsuj//xAAbEAACAQUAAAAAAAAAAAAAAAAAAQIgISIykf/aAAgBAQAGPwLNcLSRvR//xAAaEAEBAQEAAwAAAAAAAAAAAAABABFhMYGR/9oACAEBAAE/IS8x7BH0tnXwhSoXZ+3/2gAMAwEAAgADAAAAENj/AP/EABcRAQADAAAAAAAAAAAAAAAAAAABUWH/2gAIAQMBAT8Qitg//8QAFxEAAwEAAAAAAAAAAAAAAAAAAAFBYf/aAAgBAgEBPxBzZof/xAAcEAEAAgIDAQAAAAAAAAAAAAABABEhQVGBoeH/2gAIAQEAAT8QNXWifSOykLvR9hsrN5nKlpHqP0k//9k='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"1\"\n        title=\"\"\n        src=\"/static/5403ba9bebd07a50595eb7001d9728b7/f8fb9/1.jpg\"\n        srcset=\"/static/5403ba9bebd07a50595eb7001d9728b7/e8976/1.jpg 148w,\n/static/5403ba9bebd07a50595eb7001d9728b7/63df2/1.jpg 295w,\n/static/5403ba9bebd07a50595eb7001d9728b7/f8fb9/1.jpg 590w,\n/static/5403ba9bebd07a50595eb7001d9728b7/85e3d/1.jpg 885w,\n/static/5403ba9bebd07a50595eb7001d9728b7/a402e/1.jpg 1000w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p>Hi there! My name is Dhivya and I started my career as a Software Engineer in Tech Support and Testing. After a brief sabbatical, in the mid of 2021, I decided to get back into the workforce. I was searching for the right opportunity to kickstart my career and I was very excited to land a job at AUTO1 as a Junior QA Engineer.</p>\n<p><strong>Onboarding experience</strong></p>\n<p>Having previous experience in manual testing, I was greatly looking forward to this opportunity to deep dive into the world of automation testing. Onboarding happened seamlessly thanks to the onboarding handbooks and Confluence resources specially curated for a new joiner in the AUTO1 QA team. It briefed the step-by-step process on how to set up and get ready for the automation testing at AUTO1.</p>\n<p>The CAT (Core Automation Team) people were readily available to guide me in each step, right from setting up the environment, software, and configurations. This was a first-time experience for me, seeing such a dedicated team exclusively being there to support the entire QA team.</p>\n<p><img src=\"/static/2-06a454814194fbad5f8c98269b9fb867.gif\"></p>\n<p><strong>CAT</strong> (Core Automation Team)</p>\n<p>I found myself doing extensive testing of SHIFT, our internal test case management software developed and used by AUTO1. This gave me some in-depth knowledge of the software itself and also the processes and automation structure set in the company.</p>\n<p>In the months that followed, I was excited to take up some solid training from my amazing mentor, who introduced me to the project and the automation tests we had in place. He was very resourceful and immensely patient and carefully introduced me to each element of the role, gradually allowing me to explore the various tasks I would eventually take up. This gave me ample opportunity to get a deep understanding of the project and build a good rapport with my team members and also established a clear goal for me. I was soon writing my first automation test and found the experience thoroughly organic and gratifying.</p>\n<p><strong>Automation Testing at AUTO1</strong></p>\n<p>Firstly, I understood why Automation Testing has become a quintessential part of current testing standards and how it helped our teams achieve great speed, efficiency, and quality. The automation tests and resources were brilliantly abstracted in several repositories and accessed by the various QA teams.</p>\n<p>With 600+ microservices, automation testing is the best way to ensure that the entire platform works efficiently. We use a variety of test automation tools including Selenium and Playwright to drive the automation. The entire framework has been abstracted into a common module in repositories that has helper methods pertaining to our domain. Each team has their dedicated repositories that carry out regular automation test runs, generating regular test reports and this structure helped us keep track of the health and sanity of the systems we worked with.</p>\n<p>The Automation Testing process at AUTO1 looks just like this:</p>\n<p><a\n    class=\"gatsby-resp-image-link\"\n    href=\"/static/55fa7b0fddafca9ed49b6c26a2be6326/81d54/3.png\"\n    style=\"display: block\"\n    target=\"_blank\"\n    rel=\"noopener\"\n  >\n    <span\n    class=\"gatsby-resp-image-wrapper\"\n    style=\"position: relative; display: block;  max-width: 590px; margin-left: auto; margin-right: auto;\"\n  >\n    <span\n      class=\"gatsby-resp-image-background-image\"\n      style=\"padding-bottom: 56.25%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAALCAYAAAB/Ca1DAAAACXBIWXMAAAsTAAALEwEAmpwYAAABP0lEQVQoz61Ry0rEQBCMv+SX+Ame1IMHr7oX/Q1/RLxqEMWFVRQWPIkgPmaTbCabZJ5d9oSJuyysi2iFojrdPTXdTEJECYBT5pDjS9aUNQ26in09KPOC4xFzKwngYIOTd1iBxpd4FCmm9gNrsP9tyLyKScPmjtVprZ0QwlW1dLWWTpnWlaV03vuu3vcxdTy7u2h4HTKxCdZb3IhbEH/LGL1INLprC/0BNpb2VhqWRmKYj2CVRZZlyPMceVHw2C0eXhsUzdww3L/WsFUtpmwAT6hmFSZiAm0MjFLIhICU1a8mJPJEsq2pMDV1/+h2p5m1lNU1eee63E+GaUwqbjDhcZS35uz93jzJNxPGe64qc/4pzMx5Ex+v07BQPLuzaDjG33HQGwZuM4+ZR3zzgHXgoy6zz9O8fsg8YW4m/42w7Rfe9dEFZoPW0AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n    ></span>\n    <img\n        class=\"gatsby-resp-image-image\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;box-shadow:inset 0px 0px 0px 400px white;\"\n        alt=\"3\"\n        title=\"\"\n        src=\"/static/55fa7b0fddafca9ed49b6c26a2be6326/40fad/3.png\"\n        srcset=\"/static/55fa7b0fddafca9ed49b6c26a2be6326/707e9/3.png 148w,\n/static/55fa7b0fddafca9ed49b6c26a2be6326/649e0/3.png 295w,\n/static/55fa7b0fddafca9ed49b6c26a2be6326/40fad/3.png 590w,\n/static/55fa7b0fddafca9ed49b6c26a2be6326/b3fef/3.png 885w,\n/static/55fa7b0fddafca9ed49b6c26a2be6326/301c0/3.png 1180w,\n/static/55fa7b0fddafca9ed49b6c26a2be6326/81d54/3.png 1280w\"\n        sizes=\"(max-width: 590px) 100vw, 590px\"\n      />\n  </span>\n  </a></p>\n<p><strong>Test data management using SHIFT</strong></p>\n<p>The test cases, scenarios, and strategies are maintained in SHIFT, our internal (and soon to be open-sourced) test case management system. Our QAs make use of a test data tool which is integrated to SHIFT. The 100+ types of test data required by the teams are generated using automation suites that run in Jenkins. This test data is then queued in SHIFT and as a result increased the productivity of our QA team by reducing the effort for manual test data creation. Our director of QA has briefed this here <a href=\"https://auto1.tech/faster-automation-tests/\">https://auto1.tech/faster-automation-tests/</a>.</p>\n<p><strong>Seamless Integrations</strong></p>\n<p>Our CI system, Jenkins, is wired to run these tests against our various QA environments. The integration of SHIFT with Slack, Jenkins, and Jira has helped the teams immensely. The status of Jenkins jobs/sanity suites is notified in Slack. The time taken to debug the issue is hugely reduced since SHIFT displays a precise list of failed tests including the screenshot reference, which helps me to quickly understand the exact point of failure. Once I have identified the issue, I fix it and test it locally, then push the branch to our repository. The process is set in such a way that merge can be done only after review, which gives me more confidence and validation for the proposed solution. This helps me address the issues faster and get the system up and running. This is indeed why the QA team at AUTO1 is one of the key pillars of the Engineering team.</p>\n<p>My automation testing journey at AUTO1 could not have been this impactful if not for this perfect blend of the best tech stacks and resources, and most importantly, my amazing team. My learning on the job has been very effective and hands-on, and it makes each day filled with new challenges and new learning opportunities that help my work create a real impact.</p>\n<p>From the very many opportunities that came my way and the deep learning curve it has presented me with, I now realize that - <strong>the journey has just begun!</strong></p>","fields":{"slug":"/qa-engineer-journey/","tags":["auto1","engineering","testing","QA","social"]}}},{"node":{"id":"0e79f71e-bac7-5c18-b5ae-ae1cec933364","frontmatter":{"category":"QA","title":"Efficient testing - Test Strategy","date":"2021-10-08","summary":"The first article in a series of articles focusing on efficient testing.","thumbnail":null,"authorName":"Michal Chytroszek","authorDescription":"Michal is the QA lead of the Car Journey associated teams.","authorAvatar":{"relativePath":"pages/efficient-testing-1/Michal.png","childImageSharp":{"resolutions":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAIAAAAC64paAAAACXBIWXMAACE4AAAhOAFFljFgAAAEyklEQVQ4yx2Qe0xTdxzFr9Dee3/30dpCRQqsQofyEEQpT8v6ABwgUPoASpUiMigKHeVReZTy0BYEh6TVtohKsbCNqAiFKPhgY3GYqAPMhkaWzEyXbG5z2ZZliX8sY5clJ998//mcnHMgg83Tah28e+2k7Uxb36Uxy/B4w1mP4bSr8WRvtjQ5I57X47R3uYY1avkxfZX+hL5CKXbUZpbLJVVHiiDLN/+euvfDl4/mHj24dnXh4f1Xv0y/+Htw6fehlbfywxWi2OCx5VfO1bfuJ3/VWFy9o580G/WL5ysHLnpu3ZyFWj//o8O7dnv5q/kHS947M3efPn/8+rfTX/w0+PXG8c7+tChu0+BQdfegXG/pu70+v/6yratjskfjmrhxzjUCGRfedCz8emlqbuaze8vfrV9f+VZfU5knTTZYBuptngOJkbWGWm1pcUpyYk2T0dRmqNOVTnRrHOesDVUlkME+1uC62ugY7xy91uWezN2/dxcORTKgZC5Q5OWLBRFFMmleekJq3E5VrrDq6OHGD6tnzpW2dylOlL4HWV9unH650ff9P2d+3miafiiPZjsVPLcywFPo156zI3k3L1McJ0qKEQkiNIdy7cPOZrNJeZinqhRrVRlQ48Wp5pFZ08h0z/iMuX/AKg/3loXNargLWn/PIX62MFp+MEEiTk3dHaKV729oNqoz99QXBLVo4oqyEqDe8VvOqzfdc/cvTM17LjsvHxEURm01p3F0e4haEV99ME2pSpfnC3X52ztNOaOrb0ZbBet96NDxhPJDBdDd1bVnKzf+fHZlbu3FWH+HVxM2URQ6VcQbzd3mLQmpFocnJsY0lPMrlL4HFUzPpOO6VeIyZelbzCp9N9Qy/Wzx4eKPT9w3nzx3zy/OdmtsGQH6ff7mRMZIQYBKEiMWhEglHJmCa+zQdtts5o/sirreYrNDVtsBtc6s9dx5ar+zapl9fGrp9YBzyKMK7s0MtmWSLYWJkXsTynRHjfYLdYOjdbbrOqu73GwvrOss6XTJDFZI//GDdu9y/8K62btSc35SmJ5dKeTqkvzUsUQEf0dQME+Up9G2n6/q81RYhss6HdqWM7Jqk6p9KFdvgeo/Xapz3pDK1Pxd0SwCp/v44BgRzsEJBN6yxRem03GaDxOGRPkardlR3NhXXG/NLm/KMpyVVrRBxomlhP1SGIIQmi8GAIskEASFaHQUhnGAogBlEgSB+PBC+craroJjZpnOlK4+Li5rFhbqoIr+KwH+fjiG4BhKAJRFYAwcENRPXRzdFEBJgHJYzKwSXf7RxpxSvViuFRYcScophuLfVwZu8wOIL0BpBEZn4YBNiYExCUASgEGgGIqQGMLAkLSMvJziDyT56tQDBXHvZUclSaFIsYIbGECgvghCwwHMJgCbRCmxCJRFUjCgYCaOMgEtIipGmJEnSJVEx6cEvhO2LZgHCVJEASyCxGAEoQMU3mQIqie6dfMBJE61RthMwMThwO3bY+NTouME/KgYNjeY5HCg0CD/QDZB4hRJg2E65bIZEv9f1BBg05RNYiwCYbMZEbH7dkbH8sIjWIFBwI8NZWuqOAyEScIYSqPBvgigAwBjGExNCFA6RdLoNCoIi4EyGei7UbFhuyJDQncw/P0o+/8A3meRLxNk0Z4AAAAASUVORK5CYII=","width":50,"height":50,"src":"/static/52659ecfce9ed71e567bddef5d9c1b15/45876/Michal.png","srcSet":"/static/52659ecfce9ed71e567bddef5d9c1b15/45876/Michal.png 1x,\n/static/52659ecfce9ed71e567bddef5d9c1b15/eb85b/Michal.png 1.5x,\n/static/52659ecfce9ed71e567bddef5d9c1b15/4f71c/Michal.png 2x,\n/static/52659ecfce9ed71e567bddef5d9c1b15/9ec3e/Michal.png 3x"}}},"headerImage":null},"html":"<p>Hi everyone! This article is the first in a series of AUTO1 testing-related posts, I hope you’ll find the content interesting enough to return for the rest in the series :) To start off, let’s ask one of the most important questions:</p>\n<h2>What is a Test Strategy?</h2>\n<p>In AUTO1 the test strategy is a high level, short and concise document which defines:</p>\n<ul>\n<li>\n<p>Scope of the testing</p>\n</li>\n<li>\n<p>Risks - areas that potentially can be broken</p>\n</li>\n<li>\n<p>Automation strategy</p>\n</li>\n<li>\n<p>Required test data</p>\n</li>\n<li>\n<p>Security</p>\n</li>\n</ul>\n<h2>Why do we create a Test Strategy?</h2>\n<p>In agile and fast changing environments we usually do not spend that much time on test documentation as in waterfall. However, even in such cases we cannot underestimate the importance of a test strategy. When you are creating a strategy it becomes your guide, a channel for your thoughts - you have a space to stop for a moment to try to understand what should be verified and do it at a very early stage. It is much easier to go back to the feature if you already wrote down your thoughts and you have some kind of summary.</p>\n<h2>How do we create a Test Strategy?</h2>\n<p>Let’s go through our thinking process, step by step.</p>\n<h4>Scope of the testing</h4>\n<p>Start with defining what exactly has to be tested. You can ask yourself a few questions:</p>\n<ul>\n<li>\n<p>Who is going to use the feature?</p>\n</li>\n<li>\n<p>What apps will be changed/created?</p>\n</li>\n<li>\n<p>On what devices will it be used?</p>\n</li>\n<li>\n<p>What types of testing will be needed?</p>\n</li>\n</ul>\n<p>It allows you to better understand the product you are going to test and the environment setup you’ll need.</p>\n<h4>Risks</h4>\n<p>Now think about all the things that can go wrong. Here the questions will be:</p>\n<ul>\n<li>\n<p>What apps/areas can be impacted by our change?</p>\n</li>\n<li>\n<p>Are we modifying dependencies of another system?</p>\n</li>\n<li>\n<p>Is my domain knowledge enough to understand a feature?</p>\n</li>\n<li>\n<p>Are there any missing prerequisites which can block testing?</p>\n</li>\n<li>\n<p>Are changes going to be compatible with existing solutions?</p>\n</li>\n</ul>\n<p>Answering these questions will help us create a plan in order to mitigate all risks. It can be planning an onboarding session with someone who has knowledge we need, investigating regression testing possibilities for apps or areas in danger or setting up a plan on how to get blockers done.</p>\n<h4>Automation strategy</h4>\n<p>Automation is an important part of our testing process. We think about the approach on the test strategy stage. We create our tests on an UI and API level. When we’ll have the technical specifications, which include details of implementation, then it is time to plan what and when will be automated. We ask questions such as:</p>\n<ul>\n<li>\n<p>Where is the specific logic placed? Is it frontend or backend?</p>\n</li>\n<li>\n<p>Do we have existing automation in this area? If yes, do we have to adjust it?</p>\n</li>\n<li>\n<p>Do we have all prerequisites needed to start writing automation?</p>\n</li>\n</ul>\n<h4>Required test data</h4>\n<p>At AUTO1 we have a lot of connections between several areas. It created dependencies which have to be covered in test data preparation. We have to be sure we know the preconditions and steps required to arrange the system before starting testing. Here we can specify if we need additional onboarding or support from other teams.</p>\n<p>Having answers to the above questions means we are prepared to plan more detailed test cases and we can use our strategy as some kind of a cheatsheet. However, do not blindly follow what you’ve planned - requirements can change. Review your strategy from time to time, to ensure that it is not outdated.</p>\n<h2>Summary</h2>\n<p>Test strategy shouldn’t take much time but it is important for the next step - creating a test plan. It can be a great guide which will help you to structure your initial ideas and be prepared for upcoming changes faster.</p>","fields":{"slug":"/efficient-testing-1/","tags":["auto1","engineering","testing","QA"]}}}]},"authorArticles":null},"pageContext":{"slug":"/faster-automation-tests/","tags":["testing","automation"],"category":"QA","author":"Alexander Gyulai","date":"2019-01-29"}}