{"id":3756,"date":"2020-09-07T07:00:00","date_gmt":"2020-09-07T06:00:00","guid":{"rendered":"https:\/\/www.diogonunes.com\/blog\/?p=3756"},"modified":"2020-09-19T13:42:36","modified_gmt":"2020-09-19T12:42:36","slug":"infrastructure-testing-inspec-azure-bash-ruby","status":"publish","type":"post","link":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/","title":{"rendered":"Infrastructure testing (Ruby): InSpec + Azure"},"content":{"rendered":"<p><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash.jpg?resize=580%2C387&#038;ssl=1\" alt=\"\" width=\"580\" height=\"387\" class=\"aligncenter size-large wp-image-3757\" srcset=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?resize=1024%2C683&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?resize=400%2C267&amp;ssl=1 400w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?resize=768%2C512&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?resize=1536%2C1024&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?resize=2048%2C1365&amp;ssl=1 2048w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?resize=1200%2C800&amp;ssl=1 1200w, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?w=1740&amp;ssl=1 1740w\" sizes=\"auto, (max-width: 580px) 100vw, 580px\" \/><\/p>\n<h3>Infra testing is mostly uncharted territory<\/h3>\n<p><!--more--><\/p>\n<p>I once worked in a project that was all about DevOps, pipelines and bash scripts. At the time we didn&#8217;t find many guides, so we developed our own test strategy.<\/p>\n<h3>Context<\/h3>\n<p>The project&#8217;s goal was to create a collection of bash scripts that would spin up and environment, configure it, and deploy some applications into that same environment. At the end of the project we introduced Kubernetes to streamline most of this behaviour.<\/p>\n<h3>Test strategy<\/h3>\n<h4>Unit level: Check scripts<\/h4>\n<p>We unit tested the <strong>contract<\/strong> of our bash functions. For example, if the number of arguments changed, either because we changed the function or because we forgot to pass them during the invocation, we would get a test failure or a runtime error, respectively.<\/p>\n<p>The <strong>behaviour<\/strong> of our functions was harder to test. Most of them, were just proxies to an external dependency (Azure) \u2013 e.g. they would receive some parameters, build an azure command, and execute it. To workaround it, we developed a way to mock calls to external dependencies (e.g. we would intercept the call to Azure, write the command that was being sent to Azure to a file, and then assert the syntax\/content of that command).<\/p>\n<p>We treated external dependencies as black boxes, so we coded\/tested under the assumption that if we sent the right command then the external dependency would behave as expected.<\/p>\n<p>At the time we used <strong><a href=\"https:\/\/github.com\/inspec\/inspec\">Chef&#8217;s InSpec<\/a> test framework<\/strong> and wrote all these tests in Ruby.<\/p>\n<h4>Acceptance level: Check infrastructure<\/h4>\n<p>The purpose of our pipeline was to use our bash functions to provision an environment (kubernetes, pods, resources).<\/p>\n<p>So at the end of our pipeline we had an extra step to ran our provisioning or acceptance tests. These checks simulated what a DevOps would do at the end of the pipeline, by confirming that the expected resources were all up and running.<\/p>\n<p>We also used InSpec and Ruby for coherence.<\/p>\n<h3>Final thoughts<\/h3>\n<p>The implementation of this test strategy was a collaboration between developers and testers. The team was very satisfied with the final result, specially with the acceptance tests. These tests acted like a health check, we could on demand target a specific resource group, run the acceptance tests, and get a health\/correctness test report. This improved our confidence and saved us debug time.<\/p>\n<p>If you want to read more about infrastructure testing, I recommend Katrina&#8217;s <a href=\"https:\/\/leanpub.com\/testingindevops\">&#8220;A Practical Guide to Testing in DevOps&#8221;<\/a> book.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Infra testing is mostly uncharted territory<\/p>\n","protected":false},"author":1,"featured_media":3757,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[2],"tags":[79,77,78,22,60,55],"class_list":["post-3756","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech","tag-azure","tag-ci-pipelines","tag-devops","tag-review","tag-ruby","tag-testing"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Infrastructure testing (Ruby): InSpec + Azure - The Geeky Gecko<\/title>\n<meta name=\"description\" content=\"My experience with infrastructure testing, using InSpec, tests written in Ruby, asserting bash scripts, and deployments to Azure.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Infrastructure testing (Ruby): InSpec + Azure - The Geeky Gecko\" \/>\n<meta property=\"og:description\" content=\"My experience with infrastructure testing, using InSpec, tests written in Ruby, asserting bash scripts, and deployments to Azure.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\" \/>\n<meta property=\"og:site_name\" content=\"The Geeky Gecko\" \/>\n<meta property=\"article:published_time\" content=\"2020-09-07T06:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-19T12:42:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Diogo Nunes\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@dialexnunes\" \/>\n<meta name=\"twitter:site\" content=\"@dialexnunes\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Diogo Nunes\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\"},\"author\":{\"name\":\"Diogo Nunes\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"headline\":\"Infrastructure testing (Ruby): InSpec + Azure\",\"datePublished\":\"2020-09-07T06:00:00+00:00\",\"dateModified\":\"2020-09-19T12:42:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\"},\"wordCount\":419,\"publisher\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"image\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1\",\"keywords\":[\"azure\",\"CI Pipelines\",\"devops\",\"review\",\"ruby\",\"testing\"],\"articleSection\":[\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\",\"url\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\",\"name\":\"Infrastructure testing (Ruby): InSpec + Azure - The Geeky Gecko\",\"isPartOf\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1\",\"datePublished\":\"2020-09-07T06:00:00+00:00\",\"dateModified\":\"2020-09-19T12:42:36+00:00\",\"description\":\"My experience with infrastructure testing, using InSpec, tests written in Ruby, asserting bash scripts, and deployments to Azure.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage\",\"url\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.diogonunes.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Infrastructure testing (Ruby): InSpec + Azure\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#website\",\"url\":\"https:\/\/www.diogonunes.com\/blog\/\",\"name\":\"The Geeky Gecko\",\"description\":\"The Geeky Gecko\",\"publisher\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.diogonunes.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c\",\"name\":\"Diogo Nunes\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1\",\"width\":799,\"height\":799,\"caption\":\"Diogo Nunes\"},\"logo\":{\"@id\":\"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/\"},\"sameAs\":[\"http:\/\/www.diogonunes.com\",\"https:\/\/x.com\/dialexnunes\"],\"url\":\"https:\/\/www.diogonunes.com\/blog\/author\/diogo-nunes\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Infrastructure testing (Ruby): InSpec + Azure - The Geeky Gecko","description":"My experience with infrastructure testing, using InSpec, tests written in Ruby, asserting bash scripts, and deployments to Azure.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/","og_locale":"en_US","og_type":"article","og_title":"Infrastructure testing (Ruby): InSpec + Azure - The Geeky Gecko","og_description":"My experience with infrastructure testing, using InSpec, tests written in Ruby, asserting bash scripts, and deployments to Azure.","og_url":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/","og_site_name":"The Geeky Gecko","article_published_time":"2020-09-07T06:00:00+00:00","article_modified_time":"2020-09-19T12:42:36+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1","type":"image\/jpeg"}],"author":"Diogo Nunes","twitter_card":"summary_large_image","twitter_creator":"@dialexnunes","twitter_site":"@dialexnunes","twitter_misc":{"Written by":"Diogo Nunes","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#article","isPartOf":{"@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/"},"author":{"name":"Diogo Nunes","@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"headline":"Infrastructure testing (Ruby): InSpec + Azure","datePublished":"2020-09-07T06:00:00+00:00","dateModified":"2020-09-19T12:42:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/"},"wordCount":419,"publisher":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"image":{"@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1","keywords":["azure","CI Pipelines","devops","review","ruby","testing"],"articleSection":["Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/","url":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/","name":"Infrastructure testing (Ruby): InSpec + Azure - The Geeky Gecko","isPartOf":{"@id":"https:\/\/www.diogonunes.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage"},"image":{"@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1","datePublished":"2020-09-07T06:00:00+00:00","dateModified":"2020-09-19T12:42:36+00:00","description":"My experience with infrastructure testing, using InSpec, tests written in Ruby, asserting bash scripts, and deployments to Azure.","breadcrumb":{"@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#primaryimage","url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/www.diogonunes.com\/blog\/infrastructure-testing-inspec-azure-bash-ruby\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.diogonunes.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Infrastructure testing (Ruby): InSpec + Azure"}]},{"@type":"WebSite","@id":"https:\/\/www.diogonunes.com\/blog\/#website","url":"https:\/\/www.diogonunes.com\/blog\/","name":"The Geeky Gecko","description":"The Geeky Gecko","publisher":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.diogonunes.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/a6fa79b293f22912664654fcfbd2da0c","name":"Diogo Nunes","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2026\/04\/Geeky-Gecko-2026-v2.png?fit=799%2C799&ssl=1","width":799,"height":799,"caption":"Diogo Nunes"},"logo":{"@id":"https:\/\/www.diogonunes.com\/blog\/#\/schema\/person\/image\/"},"sameAs":["http:\/\/www.diogonunes.com","https:\/\/x.com\/dialexnunes"],"url":"https:\/\/www.diogonunes.com\/blog\/author\/diogo-nunes\/"}]}},"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/04\/jakub-kriz-arOyDPUAJzc-unsplash-scaled.jpg?fit=2560%2C1707&ssl=1","jetpack-related-posts":[{"id":379,"url":"https:\/\/www.diogonunes.com\/blog\/set-up-your-rails-env\/","url_meta":{"origin":3756,"position":0},"title":"Setting up your Rails environment from scratch","author":"Diogo Nunes","date":"12 May, 2014","format":false,"excerpt":"This is a complete yet summarized guide to set up a Ruby on Rails development environment on Linux. Installing and configuring Sublime Text, Github, and Heroku are optional but we're included for the sake of completeness. Since these are the de facto tools for editing source code, managing code repositories\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"original photo: goo.gl\/QE43FV","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2014\/05\/rails-worker-assembly-construction.jpg?fit=620%2C230&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2014\/05\/rails-worker-assembly-construction.jpg?fit=620%2C230&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2014\/05\/rails-worker-assembly-construction.jpg?fit=620%2C230&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":4352,"url":"https:\/\/www.diogonunes.com\/blog\/testing-concepts-3\/","url_meta":{"origin":3756,"position":1},"title":"Testing is not just\u2026 (Concepts #3)","author":"Diogo Nunes","date":"25 October, 2021","format":false,"excerpt":"\ud83c\udfc6 This post was featured in Software Testing Weekly #95 and Coding JAG #60 This is part of my free testing course, focused on teaching you the fundamentals of testing \ud83d\ude09 \ud83e\udd16 Automation Much of what we find as testers comes off-script and high-value unknowns are found by letting humans\u2026","rel":"","context":"In &quot;Work&quot;","block_context":{"text":"Work","link":"https:\/\/www.diogonunes.com\/blog\/category\/work\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/lenny-kuhne-jHZ70nRk7Ns-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/lenny-kuhne-jHZ70nRk7Ns-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/lenny-kuhne-jHZ70nRk7Ns-unsplash.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/lenny-kuhne-jHZ70nRk7Ns-unsplash.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/lenny-kuhne-jHZ70nRk7Ns-unsplash.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":3867,"url":"https:\/\/www.diogonunes.com\/blog\/test-strategy-saddest-ppiratee-mnemonic\/","url_meta":{"origin":3756,"position":2},"title":"Creating a test strategy using questions","author":"Diogo Nunes","date":"7 December, 2020","format":false,"excerpt":"He doesn't have a test strategy \u261d\ufe0f \ud83c\udfc6 This post was featured in Software Testing Weekly, issue 49 The test strategy is defined at the start of the project and it can be revisited and reviewed during the duration of that project. The strategy is usually driven by the testers,\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/05\/SadPirate1.jpg?fit=640%2C360&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/05\/SadPirate1.jpg?fit=640%2C360&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2020\/05\/SadPirate1.jpg?fit=640%2C360&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":4756,"url":"https:\/\/www.diogonunes.com\/blog\/types-2-test-categories-approaches-types\/","url_meta":{"origin":3756,"position":3},"title":"Test categories and approaches (Types #2)","author":"Diogo Nunes","date":"16 October, 2023","format":false,"excerpt":"\ud83c\udfc6 This post was featured in Software Testing Weekly #191 This is a very long post. You don't have to read it all in one go. Use it as a reference, anytime you want to check the purpose of a particular test type. Categories Functional testing Non-functional testing Black box\u2026","rel":"","context":"In &quot;Work&quot;","block_context":{"text":"Work","link":"https:\/\/www.diogonunes.com\/blog\/category\/work\/"},"img":{"alt_text":"lego pieces","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2023\/08\/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2023\/08\/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg?fit=1200%2C800&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2023\/08\/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg?fit=1200%2C800&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2023\/08\/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg?fit=1200%2C800&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2023\/08\/xavi-cabrera-kn-UmDZQDjM-unsplash.jpg?fit=1200%2C800&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4380,"url":"https:\/\/www.diogonunes.com\/blog\/testing-concepts-6\/","url_meta":{"origin":3756,"position":4},"title":"Testability (Concepts #6)","author":"Diogo Nunes","date":"15 November, 2021","format":false,"excerpt":"tl;dr Testability measures the ability to test. When it's easy, you get deeper and faster info about the product. Theory Testability measures our human ability to test \u2014 how skilled we are, how easy it is to test, and how deep we can go. One of the responsibilities of a\u2026","rel":"","context":"In &quot;Work&quot;","block_context":{"text":"Work","link":"https:\/\/www.diogonunes.com\/blog\/category\/work\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/agence-olloweb-d9ILr-dbEdg-unsplash.jpg?fit=1200%2C797&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/agence-olloweb-d9ILr-dbEdg-unsplash.jpg?fit=1200%2C797&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/agence-olloweb-d9ILr-dbEdg-unsplash.jpg?fit=1200%2C797&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/agence-olloweb-d9ILr-dbEdg-unsplash.jpg?fit=1200%2C797&ssl=1&resize=700%2C400 2x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/10\/agence-olloweb-d9ILr-dbEdg-unsplash.jpg?fit=1200%2C797&ssl=1&resize=1050%2C600 3x"},"classes":[]},{"id":4307,"url":"https:\/\/www.diogonunes.com\/blog\/ama-e2e-tests\/","url_meta":{"origin":3756,"position":5},"title":"7 questions we all had about end-to-end tests","author":"Diogo Nunes","date":"4 October, 2021","format":false,"excerpt":"The summary of an Ask Me Anything session I hosted at my company \ud83c\udfc6 This post was featured in Software Testing Weekly, #92 and Software Testing Notes, #28 What\u2019s the definition of E2E in frontend? I don't think there's a definition specific to frontend (BE). An end-to-end test interacts with\u2026","rel":"","context":"In &quot;Technology&quot;","block_context":{"text":"Technology","link":"https:\/\/www.diogonunes.com\/blog\/category\/tech\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.diogonunes.com\/blog\/wp-content\/uploads\/2021\/09\/Knowledge-Sharing-E2E-tests-1.jpg?fit=960%2C540&ssl=1&resize=700%2C400 2x"},"classes":[]}],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/3756","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/comments?post=3756"}],"version-history":[{"count":3,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/3756\/revisions"}],"predecessor-version":[{"id":4005,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/posts\/3756\/revisions\/4005"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/media\/3757"}],"wp:attachment":[{"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/media?parent=3756"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/categories?post=3756"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.diogonunes.com\/blog\/wp-json\/wp\/v2\/tags?post=3756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}