{"id":1812,"date":"2024-03-23T09:47:28","date_gmt":"2024-03-23T08:47:28","guid":{"rendered":"https:\/\/ittester.sk\/sin-categorizar\/pruebas-de-dependencia\/"},"modified":"2024-07-11T09:43:39","modified_gmt":"2024-07-11T07:43:39","slug":"pruebas-de-dependencia","status":"publish","type":"post","link":"https:\/\/ittester.sk\/es\/sin-categorizar\/tutorial-testng\/pruebas-de-dependencia\/","title":{"rendered":"Dependencia en TestNG"},"content":{"rendered":"\n<p>La regla es que cada m\u00e9todo de ensayo debe ser independiente de los dem\u00e1s, es decir j. el resultado o rendimiento de un m\u00e9todo de ensayo no debe afectar a los dem\u00e1s m\u00e9todos de ensayo. Sin embargo, a veces en automatizaci\u00f3n podemos necesitar que un m\u00e9todo de prueba dependa de otros.<\/p>\n\n<p>Puede que queramos preservar las dependencias entre m\u00e9todos de prueba para ahorrar tiempo, o para escenarios en los que la llamada a ejecutar una prueba concreta dependa del resultado de alguna otra prueba.<\/p>\n\n<p>TestNG es un marco de pruebas que nos proporciona dos atributos &#8211; dependsOnMethod y dependsOnGroup dentro de la anotaci\u00f3n @Test para conseguir dependencias entre pruebas. Examinemos ahora estos atributos.<\/p>\n\n<h2 class=\"wp-block-heading\"><strong>\u00cdndice<\/strong><\/h2>\n<div class=\"wp-block-aioseo-table-of-contents\"><ul><li><a class=\"aioseo-toc-item\" href=\"#aioseo-dependsonmethod\">dependsOnMethod<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-uryvok-kodu\">\u00daryvok k\u00f3du<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-vystup\">V\u00fdstup<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-dependsongroup\">dependsOnGroup<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-uryvok-kodu\">\u00daryvok k\u00f3du<\/a><\/li><li><a class=\"aioseo-toc-item\" href=\"#aioseo-vysledok-testng\">V\u00fdsledok TestNG<\/a><\/li><\/ul><\/div>\n<h2 class=\"wp-block-heading\" id=\"aioseo-dependsonmethod\">DependeDeM\u00e9todo<\/h2>\n\n<p>Utilizando el atributo \u00abdependsOnMethod\u00bb dentro de la anotaci\u00f3n @Test, podemos especificar el nombre del m\u00e9todo de prueba padre del que debe depender la prueba.<\/p>\n\n<p>Algunos puntos que debes recordar sobre dependsOnMethod:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Al ejecutar una clase de prueba completa o un conjunto de pruebas, el m\u00e9todo parentTest se ejecuta antes que el m\u00e9todo dependentTest.<\/li>\n\n\n\n<li>Si ejecutamos dependienteTest por s\u00ed mismo, el m\u00e9todo padreTest tambi\u00e9n se ejecuta antes que dependienteTest.<\/li>\n\n\n\n<li>Si el m\u00e9todo PruebaPadre falla, el m\u00e9todo PruebaDependiente no se ejecutar\u00e1 y se marcar\u00e1 como omitido.<\/li>\n<\/ul>\n\n<p><strong>@Prueba(dependeDeM\u00e9todos={\u00abpruebaPadre\u00bb})<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-uryvok-kodu\">Fragmento de c\u00f3digo<\/h2>\n\n<p>En el siguiente fragmento de c\u00f3digo, tenemos dos m\u00e9todos de prueba: parentTest() y dependentTest(). El m\u00e9todo dependentTest depende del m\u00e9todo parentTest mediante el atributo dependsOnMethods.<\/p>\n\n<pre class=\"wp-block-code\"><code>public class TutorialExample {\n\n\u00a0\u00a0\u00a0\u00a0@Test\n\n\u00a0\u00a0\u00a0\u00a0public void parentTest() {\u00a0\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Running parent test.\");\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@Test(dependsOnMethods={\"parentTest\"})\u00a0\n\n\u00a0\u00a0\u00a0\u00a0public void dependentTest() {\u00a0\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Running dependent test.\");\n\n\u00a0\u00a0\u00a0\u00a0}\u00a0\n\n}<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-vystup\">Obtenido de<\/h2>\n\n<p>Cuando se ejecuta el propio m\u00e9todo dependentTest(), el m\u00e9todo parentTest() tambi\u00e9n se ejecuta antes que el m\u00e9todo dependentTest(). Esto se hace para mantener la dependencia.<\/p>\n\n<pre class=\"wp-block-code\"><code>Running parent test.\n\nRunning dependent test.\n\nPASSED: parentTest\n\nPASSED: dependentTest\n\n===============================================\n\n\u00a0\u00a0\u00a0\u00a0Default test\n\n\u00a0\u00a0\u00a0\u00a0Tests run: 2, Failures: 0, Skips: 0\n\n===============================================<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-dependsongroup\">DependeDelGrupo<\/h2>\n\n<p>El atributo dependsOnGroup se utiliza para hacer que un m\u00e9todo de prueba dependa de un conjunto de pruebas pertenecientes a un grupo concreto. Esto garantiza que la prueba dependiente se ejecute despu\u00e9s de que se hayan ejecutado todas las pruebas del grupo padre.<\/p>\n\n<p>Algunos puntos que debes recordar sobre DependsOnMethod:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>Cuando se ejecuta una clase de prueba o un conjunto de pruebas completo, las pruebas pertenecientes al grupo padre se ejecutan antes que las pruebas dependientes.<\/li>\n\n\n\n<li>Si ejecutamos la propia prueba dependiente, todas las pruebas pertenecientes al grupo padre se ejecutar\u00e1n antes que la prueba dependiente.<\/li>\n\n\n\n<li>Si alguna o todas las pruebas del m\u00e9todo del grupo padre fallan, el m\u00e9todo de la prueba dependiente no se ejecutar\u00e1 y se marcar\u00e1 como omitido.<\/li>\n<\/ul>\n\n<p><strong>@Prueba(dependeDeGrupos = \u00abgrupoA\u00bb)<\/strong><\/p>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-uryvok-kodu\">Fragmento de c\u00f3digo<\/h2>\n\n<p>En el siguiente fragmento de c\u00f3digo, tenemos dos m\u00e9todos de prueba &#8211; testMethod1ForGroupA() y testMethod2ForGroupA(), que pertenecen al grupo groupA. Entonces tenemos un m\u00e9todo dependentTest &#8211; dependentTestOnGroupA, que depende de los m\u00e9todos del grupoA mediante el atributo dependsOnGroups. En aras de la demostraci\u00f3n, fallamos deliberadamente el m\u00e9todo testMethod2ParaGrupoA.<\/p>\n\n<pre class=\"wp-block-code\"><code>public class TutorialExample {\n\n\u00a0\u00a0\u00a0\u00a0@Test(groups = \"groupA\")\n\n\u00a0\u00a0\u00a0\u00a0public void testMethod1ForGroupA() {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Running test method1 of groupA\");\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@Test(groups = \"groupA\")\n\n\u00a0\u00a0\u00a0\u00a0public void testMethod2ForGroupA() {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Running test method2 of groupA\");\n\n\u00a0\u00a0\u00a0\u00a0\u00a0Assert.fail();\n\n\u00a0\u00a0\u00a0\u00a0}\n\n\u00a0\u00a0\u00a0\u00a0@Test(dependsOnGroups = \"groupA\")\n\n\u00a0\u00a0\u00a0\u00a0public void dependentTestOnGroupA() {\n\n\u00a0\u00a0\u00a0\u00a0\u00a0System.out.println(\"Running the dependent test\");\n\n\u00a0\u00a0\u00a0\u00a0}\n\n}<\/code><\/pre>\n\n<h2 class=\"wp-block-heading\" id=\"aioseo-vysledok-testng\">Resultado de TestNG<\/h2>\n\n<p>Cuando se ejecuta la propia funci\u00f3n dependentTestOnGroupA() o se ejecuta toda la clase de prueba, podemos observar la siguiente salida.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"270\" src=\"https:\/\/ittester.sk\/wp-content\/uploads\/2024\/03\/vysledok-testng-800-270.webp\" alt=\"\" class=\"wp-image-1178\" srcset=\"https:\/\/ittester.sk\/wp-content\/uploads\/2024\/03\/vysledok-testng-800-270.webp 800w, https:\/\/ittester.sk\/wp-content\/uploads\/2024\/03\/vysledok-testng-800-270-300x101.webp 300w, https:\/\/ittester.sk\/wp-content\/uploads\/2024\/03\/vysledok-testng-800-270-768x259.webp 768w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/figure>\n<\/div>\n<p>Aqu\u00ed podemos observar que TestNG intenta ejecutar las 3 pruebas y, debido a la dependencia, ejecuta primero testMethod1FParaGrupoA y testMethod2ParaGrupoA. Como ha fallado la pruebaM\u00e9todo2ParaGrupoA, prueba dependiente, t. j. dependentTestOnGroupA, no se ejecuta y se marca como omitida.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TestNG proporciona dos atributos (dependsOnMethod y dependsOnGroup) para conseguir dependencias entre pruebas.<\/p>\n","protected":false},"author":8,"featured_media":1814,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[36],"tags":[],"class_list":["post-1812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorial-testng"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/posts\/1812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/comments?post=1812"}],"version-history":[{"count":2,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/posts\/1812\/revisions"}],"predecessor-version":[{"id":2247,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/posts\/1812\/revisions\/2247"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/media\/1814"}],"wp:attachment":[{"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/media?parent=1812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/categories?post=1812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ittester.sk\/es\/wp-json\/wp\/v2\/tags?post=1812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}