{"id":5171,"date":"2021-09-06T21:05:00","date_gmt":"2021-09-06T19:05:00","guid":{"rendered":"https:\/\/wata.es\/?p=5171"},"modified":"2025-04-14T16:52:07","modified_gmt":"2025-04-14T14:52:07","slug":"introduction-to-automated-testing-with-codeception-in-php-projects","status":"publish","type":"post","link":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/","title":{"rendered":"Introduction to automated testing with Codeception in PHP projects"},"content":{"rendered":"\n<p>What is automated testing? How do we implement it at WATA Factory? What are the reasons that make automated testing so interesting?<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>In this article we will talk about <strong>Codeception<\/strong>, one of the tools we use for automated testing in our PHP implemented web projects.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>What is automated testing?<\/strong><\/h4>\n\n\n\n<p>When we talk about automated testing in the field of software testing, we want to achieve that manual tests can be executed unattended, with the help of a tool that automatically performs and improves the process, but without replacing 100% of the benefits of manual testing. We already reported on this in an <a href=\"https:\/\/wata.es\/automated-testing-features-advantages-and-disadvantages\/?lang=es\">earlier article<\/a>.<\/p>\n\n\n\n<p>If we can design the tests to be run by a computer, then we <strong>achieve continuity of testing while evolving<\/strong>the application.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Why is automated testing interesting for us?<\/strong><\/h4>\n\n\n\n<p>At WATA Factory, we saw the need to implement this type of testing as the development of our projects required new functionalities to be tested along with the already existing ones i<strong>n order to continue ensuring the quality of our products<\/strong>.<\/p>\n\n\n\n<p>Automating tests brings a number of advantages that help to increase the quality level of the product and reduce its cost, as the repetition of tests does not require a large time investment in the phases of improvement or development of the product. <\/p>\n\n\n\n<p>Some of the <strong>benefits<\/strong> we have achieved at WATA Factory through the implementation of automated testing are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Automatic verification of compliance with the defined specifications using <strong>BDD <\/strong>(<em>Behaviour Driven Development<\/em>). One of the big advantages of this is the use of a common language between the client and the development team to confirm that the behaviour of the code is correct from the user&#8217;s point of view.<\/li><li><strong>Reduction in the number of bugs<\/strong>, as we ensure that both new and old functionality continues to work correctly.<\/li><li>Saving time in testing, as we avoid repetitive tasks and ensure that <strong>changes in our programme do not affect other parts of the system<\/strong>.<\/li><li>Creating solid documentation.<\/li><li>Making teamwork easier and safer.<\/li><\/ul>\n\n\n\n<p>To start developing automated testing, we researched various testing frameworks and came across Codeception, which combined everything we needed into a single tool.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">What is Codeception and how can it be installed?<\/h4>\n\n\n\n<p>Codeception is a PHP test framework that aims to create readable tests and describe what is happening from the user&#8217;s point of view. It allows us to perform acceptance, functional and unit tests.<\/p>\n\n\n\n<p>The key to Codeception is its actors. Codeception understands tests as processes that are initiated by a person. In summary, a <strong>UnitTester<\/strong> initiates actions and tests the code, a <strong>FunctionalTester<\/strong> tests the application as a whole, and an <strong>AcceptanceTester<\/strong> interacts with the interface.<\/p>\n\n\n\n<p>Each actor executes so-called steps, which are individual instructions within a scenario. The instructions that an actor can generate are grouped into modules: PhpBrowser, WebDriver, DB, FileSystem, etc.<\/p>\n\n\n\n<p>For the installation we follow the steps described in the <a href=\"https:\/\/codeception.com\/install\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">official documentation<\/a>.<\/p>\n\n\n\n<p>During installation, a folder called tests is created and within this folder a basic structure for coding the different types of tests is created.<\/p>\n\n\n\n<p>As an example, we will test the classic login. Although there are more scenarios in this test, we will only show some of them in order not to go too far. <\/p>\n\n\n\n<p>To create the test, run the following command:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">php vendor\/bin\/codecept g:feature acceptance Login<\/pre>\n\n\n\n<p>This creates a &#8216;<strong>.feature<\/strong>&#8216; file where we write our user story in a formal language called <strong>Gherkin<\/strong>, with the special feature that we can run these scenarios as automated tests.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>Feature:<\/strong> Login page\nCheck that the user can access correctly with correct credentials, in other case a warning text is shown.\n \n<strong>Scenario:<\/strong> User inserts empty password and empty username\n   <strong>Given<\/strong> I am on login page\n   <strong>When<\/strong> I fill fields with empty value\n     <strong>And<\/strong> I click on login button\n   <strong>Then<\/strong> I see the entered user data are not correct\n \n<strong>Scenario:<\/strong> Successful access with valid credencials\n   <strong>Given<\/strong> I am on login page\n   <strong>When<\/strong> I fill the fields with correct credencials\n     <strong>And<\/strong> I click on login button\n   <strong>Then<\/strong> I see Welcome Dummy Name<\/pre>\n\n\n\n<p>Scenarios are written step by step using GIVEN-WHEN-THEN criteria. <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>The <strong>GIVEN<\/strong> part is the precondition for the test Where to start from.<\/li><li>The <strong>WHEN<\/strong> part is the specific behaviour, i.e. the actions we need.<\/li><li>And finally <strong>THEN<\/strong>, the part where we get the expected result.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Defining the tests<\/h4>\n\n\n\n<p>Our next step is to define and convert the feature file into a valid test. It is defined in the <strong>AcceptanceTester<\/strong> file.<\/p>\n\n\n\n<p>To\nget the necessary steps, the following command is executed: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">php vendor\/bin\/codecept gherkin:snippets acceptance<\/pre>\n\n\n\n<p>Since we are in the Acceptance Suite, we use <strong>WebDriver<\/strong> as a module to implement, which allows us to interact with the browser. This means that we can use its methods within the tester file, just as we can with the script tests, with <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$I-&gt;<\/pre>\n\n\n\n<p>One can use various methods that have already been developed (e.g. <strong>amOnPage<\/strong> or <strong>click<\/strong>). Each step of the Gherkin scenario is extended by the methods defined in Codeception.<\/p>\n\n\n\n<p>We now show how this can be implemented in our case:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><em>\/**\n * <strong>@Given <\/strong>I am on login page\n *\/\n<\/em>public function iAmOnLoginPage()\n{\n $I-&gt;amOnPage('\/login');\n}\n\n<em>\/**\n * <strong>@When <\/strong>I fill fields with empty value\n *\/\n<\/em>public function iFillFieldsWithEmptyValue()\n{\n $I-&gt;fillField('#username','');\n $I-&gt;fillField('#password','');\n}\n\n<em>\/**\n * <strong>@When <\/strong>I fill the fields with correct credencials\n *\/\n<\/em>public function iFillTheFieldsWithCorrectCredencials()\n{\n $I-&gt;fillField('#username','correctUsername');\n $I-&gt;fillField('#password','correctPassword');\n}\n\n<em>\/**\n * <strong>@When <\/strong>I click on login button\n *\/\n<\/em>public function iClickOnLoginButton()\n{\n $I-&gt;click('Login');\n}\n\n<em>\/**\n * <strong>@Then <\/strong>I see the entered user data are not correct\n *\/\n<\/em>public function iSeeTheEnteredUserDataAreNotCorrect()\n{\n $I-&gt;see('the entered user data are not correct');\n}\n\n<em>\/**\n * <strong>@Then <\/strong>I see Welcome Dummy Name\n *\/\n<\/em>public function iSeeWelcomeDummyName()\n{\n $I-&gt;see('Welcome Dummy Name,');\n}<\/pre>\n\n\n\n<p>Finally, we run our <strong>.feature<\/strong> file with the following command: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">php vendor\/bin\/codecept run acceptance Login.feature --steps <\/pre>\n\n\n\n<p>to see that Given\/When\/Then\nis expanded with substeps and shows the expected result when executed.<strong><\/strong><\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">Acceptance Tests (2)\n-------------------------------------------------------------\n<strong>Login page:<\/strong> User inserts empty password and empty username <strong>Signature:<\/strong> User inserts empty password and empty username\n<strong>Test:<\/strong> App\/Tests\/surveys\/Login.feature:User inserts empty password and empty username\n\n<strong>Scenario --<\/strong> \nCheck that the user can access correctly with correct credentials, in other case a warning text is shown.\n\n<strong>Given<\/strong> i am on login page\n I am on url \"https:\/\/###########\/login\"\n<strong>When<\/strong> i fill fields with empty value\n I fill field \"#username\",\" \"\n I fill field \"#password\",\" \"\n<strong>And<\/strong> i click on login button \n I click \"LOGIN\"\n I wait 5\n<strong>Then<\/strong> i see the entered user data are not correct \n I see \"the entered user data are not correct\" \n<strong>PASSED<\/strong> \n\n<strong>Login page:<\/strong> User inserts proper information - Successful access with valid credencials \n<strong>Signature:<\/strong> Successful access with valid credencials \n<strong>Test:<\/strong> App\/Tests\/surveys\/articulo_test.feature: Successful access with valid credencials\n\n<strong>Scenario --<\/strong>\nCheck that the user can access correctly with correct credentials, in other case a warning text is shown.\n\n<strong>Given<\/strong> i am on login page \n I am on url \"https:\/\/########\/login\"\n<strong>When<\/strong> i fill the fields with correct credencials \n I fill field \"#username\",\"correctUsername\"\n I fill field \"#password\",\"correctPassword\"\n<strong>And<\/strong> i click on login button \n I click \"LOGIN\"\n I wait 5\n<strong>Then<\/strong> i see welcome dummy name \n I see \"Welcome Dummy Name,\"\n<strong>PASSED<\/strong> \n-------------------------------------------------------------\nTime: 19.57 seconds, Memory: 18.00 MB OK (2 tests, 2 assertions)<\/pre>\n\n\n\n<p>This tool offers us many advantages, it also has an application known as <strong><a href=\"https:\/\/github.com\/jayhealey\/Webception\" target=\"_blank\" rel=\"noopener noreferrer nofollow\">Webception<\/a><\/strong> where the client can run all the tests from the browser and thus be able to track the status of the application.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>What is automated testing? How do we implement it at WATA Factory? What are the reasons that make automated testing so interesting?<\/p>\n","protected":false},"author":20,"featured_media":4754,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[2,180],"tags":[154],"class_list":["post-5171","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-technology","tag-testing-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.1.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introduction to automated testing with Codeception in PHP projects - WATA Factory<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduction to automated testing with Codeception in PHP projects - WATA Factory\" \/>\n<meta property=\"og:description\" content=\"What is automated testing? How do we implement it at WATA Factory? What are the reasons that make automated testing so interesting?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\" \/>\n<meta property=\"og:site_name\" content=\"WATA Factory\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/watafactory\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-06T19:05:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-14T14:52:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Isabel Do\u00f1a\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@watafactory\" \/>\n<meta name=\"twitter:site\" content=\"@watafactory\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Isabel Do\u00f1a\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\"},\"author\":{\"name\":\"Isabel Do\u00f1a\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/0253b3b311832e40e684669a8efad33d\"},\"headline\":\"Introduction to automated testing with Codeception in PHP projects\",\"datePublished\":\"2021-09-06T19:05:00+00:00\",\"dateModified\":\"2025-04-14T14:52:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\"},\"wordCount\":813,\"publisher\":{\"@id\":\"https:\/\/wata.es\/#organization\"},\"image\":{\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg\",\"keywords\":[\"testing\"],\"articleSection\":[\"News\",\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\",\"url\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\",\"name\":\"Introduction to automated testing with Codeception in PHP projects - WATA Factory\",\"isPartOf\":{\"@id\":\"https:\/\/wata.es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg\",\"datePublished\":\"2021-09-06T19:05:00+00:00\",\"dateModified\":\"2025-04-14T14:52:07+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage\",\"url\":\"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg\",\"contentUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg\",\"width\":1200,\"height\":800},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wata.es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction to automated testing with Codeception in PHP projects\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/wata.es\/#website\",\"url\":\"https:\/\/wata.es\/\",\"name\":\"WATA Factory\",\"description\":\"IT Consulting &amp; Outsourcing for your company\",\"publisher\":{\"@id\":\"https:\/\/wata.es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/wata.es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/wata.es\/#organization\",\"name\":\"WATA Factory\",\"url\":\"https:\/\/wata.es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png\",\"contentUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png\",\"width\":688,\"height\":176,\"caption\":\"WATA Factory\"},\"image\":{\"@id\":\"https:\/\/wata.es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/watafactory\/\",\"https:\/\/x.com\/watafactory\",\"https:\/\/www.linkedin.com\/company\/wata\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/0253b3b311832e40e684669a8efad33d\",\"name\":\"Isabel Do\u00f1a\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/841c93d4a2d0c7abc62bf333ac4ef26014ff545cdfb74954a66d26e741bc76f6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/841c93d4a2d0c7abc62bf333ac4ef26014ff545cdfb74954a66d26e741bc76f6?s=96&d=mm&r=g\",\"caption\":\"Isabel Do\u00f1a\"},\"url\":\"https:\/\/wata.es\/author\/igranados\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introduction to automated testing with Codeception in PHP projects - WATA Factory","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:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/","og_locale":"en_US","og_type":"article","og_title":"Introduction to automated testing with Codeception in PHP projects - WATA Factory","og_description":"What is automated testing? How do we implement it at WATA Factory? What are the reasons that make automated testing so interesting?","og_url":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/","og_site_name":"WATA Factory","article_publisher":"https:\/\/www.facebook.com\/watafactory\/","article_published_time":"2021-09-06T19:05:00+00:00","article_modified_time":"2025-04-14T14:52:07+00:00","og_image":[{"width":1200,"height":800,"url":"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg","type":"image\/jpeg"}],"author":"Isabel Do\u00f1a","twitter_card":"summary_large_image","twitter_creator":"@watafactory","twitter_site":"@watafactory","twitter_misc":{"Written by":"Isabel Do\u00f1a","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#article","isPartOf":{"@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/"},"author":{"name":"Isabel Do\u00f1a","@id":"https:\/\/wata.es\/#\/schema\/person\/0253b3b311832e40e684669a8efad33d"},"headline":"Introduction to automated testing with Codeception in PHP projects","datePublished":"2021-09-06T19:05:00+00:00","dateModified":"2025-04-14T14:52:07+00:00","mainEntityOfPage":{"@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/"},"wordCount":813,"publisher":{"@id":"https:\/\/wata.es\/#organization"},"image":{"@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg","keywords":["testing"],"articleSection":["News","Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/","url":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/","name":"Introduction to automated testing with Codeception in PHP projects - WATA Factory","isPartOf":{"@id":"https:\/\/wata.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage"},"image":{"@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg","datePublished":"2021-09-06T19:05:00+00:00","dateModified":"2025-04-14T14:52:07+00:00","breadcrumb":{"@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#primaryimage","url":"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2021\/04\/pruebas-automaticas-codeception-php-watafactory.jpg","width":1200,"height":800},{"@type":"BreadcrumbList","@id":"https:\/\/wata.es\/introduction-to-automated-testing-with-codeception-in-php-projects\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wata.es\/"},{"@type":"ListItem","position":2,"name":"Introduction to automated testing with Codeception in PHP projects"}]},{"@type":"WebSite","@id":"https:\/\/wata.es\/#website","url":"https:\/\/wata.es\/","name":"WATA Factory","description":"IT Consulting &amp; Outsourcing for your company","publisher":{"@id":"https:\/\/wata.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wata.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/wata.es\/#organization","name":"WATA Factory","url":"https:\/\/wata.es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/#\/schema\/logo\/image\/","url":"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png","width":688,"height":176,"caption":"WATA Factory"},"image":{"@id":"https:\/\/wata.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/watafactory\/","https:\/\/x.com\/watafactory","https:\/\/www.linkedin.com\/company\/wata\/"]},{"@type":"Person","@id":"https:\/\/wata.es\/#\/schema\/person\/0253b3b311832e40e684669a8efad33d","name":"Isabel Do\u00f1a","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/841c93d4a2d0c7abc62bf333ac4ef26014ff545cdfb74954a66d26e741bc76f6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/841c93d4a2d0c7abc62bf333ac4ef26014ff545cdfb74954a66d26e741bc76f6?s=96&d=mm&r=g","caption":"Isabel Do\u00f1a"},"url":"https:\/\/wata.es\/author\/igranados\/"}]}},"_links":{"self":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/5171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/comments?post=5171"}],"version-history":[{"count":2,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/5171\/revisions"}],"predecessor-version":[{"id":11939,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/5171\/revisions\/11939"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/media\/4754"}],"wp:attachment":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/media?parent=5171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/categories?post=5171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/tags?post=5171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}