{"id":1234,"date":"2024-03-19T09:23:54","date_gmt":"2024-03-19T08:23:54","guid":{"rendered":"https:\/\/ittester.sk\/automatisiertes-testen\/parallel-laufende-tests-testng\/"},"modified":"2024-07-11T09:43:35","modified_gmt":"2024-07-11T07:43:35","slug":"parallel-laufende-tests-testng","status":"publish","type":"post","link":"https:\/\/ittester.sk\/de\/automatisiertes-testen\/testng-anleitung\/parallel-laufende-tests-testng\/","title":{"rendered":"Parallele Testausf\u00fchrung in TestNG"},"content":{"rendered":"\n<p>Bei automatisierten Tests wollen wir oft die Testausf\u00fchrungszeit reduzieren, um so schnell wie m\u00f6glich Testergebnisse zu erhalten. Wenn wir Selenium-Tests mit dem testNG-Paket ausf\u00fchren, werden die Tests standardm\u00e4\u00dfig seriell ausgef\u00fchrt. Aber testNG bietet inh\u00e4rente Unterst\u00fctzung f\u00fcr die parallele Ausf\u00fchrung von Tests. Mit Hilfe dieses Tutorials werden wir in der Lage sein, eine parallele Testausf\u00fchrung in Selenium oder einem anderen Java-f\u00e4higen Testautomatisierungswerkzeug durchzuf\u00fchren.<\/p>\n\n<p>Bevor wir mit der parallelen Ausf\u00fchrung beginnen, lassen Sie uns kurz die Datei testNG.xml betrachten (diejenigen, die mit der Datei testng.xml vertraut sind, k\u00f6nnen diesen Abschnitt \u00fcberspringen und zum n\u00e4chsten Abschnitt &#8211; &#8222;Parallele Testausf\u00fchrung&#8220; &#8211; gehen).<\/p>\n\n<p>Die Datei testng.xml erleichtert die Ausf\u00fchrung von Tests und die Gruppierung mehrerer verschiedener Tests aus denselben oder unterschiedlichen Klassen. Diese XML-Datei hat verschiedene Tags f\u00fcr Suite, Tests, Klassen und\/oder Pakete, wobei der Root-Tag Suite ist.<\/p>\n\n<p>Beispieldatei testNG.xml :<\/p>\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE suite SYSTEM \"http:\/\/testng.org\/testng-1.0.dtd\">\n\n&lt;suite name=\"ITtesterTestSuite\" verbose=\"1\" >\n\n\u00a0\u00a0&lt;test name=\"parallelExecutionTests\" >\n\n\u00a0\u00a0\u00a0\u00a0&lt;classes>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;class name=\"testsInParallel\" \/>\n\n\u00a0\u00a0\u00a0\u00a0&lt;class name=\"testsInParallel\" \/>\n\n\u00a0\u00a0\u00a0\u00a0&lt;\/classes>\n\n\u00a0\u00a0&lt;\/test>\n\n&lt;\/suite><\/code><\/pre>\n\n<p>Wenn Sie mit der rechten Maustaste auf die Datei testng.xml klicken und sie als TestNG-Set ausf\u00fchren, findet testNG die Tests mit der Annotation @Test in der Klasse testsInParallel.java und beginnt mit der Ausf\u00fchrung der Tests.<\/p>\n\n<h2 class=\"wp-block-heading\">Parallele Tests durchf\u00fchren<\/h2>\n\n<p>Um die Tests parallel laufen zu lassen, f\u00fcgen Sie einfach diese beiden Schl\u00fcssel-Wert-Paare in die Suite ein:<\/p>\n\n<ul class=\"wp-block-list\">\n<li>parallel=&#8220;{methods\/tests\/classes}&#8220;<\/li>\n\n\n\n<li>thread-count=&#8220;{Anzahl der Threads, die gleichzeitig laufen sollen}&#8220;.<\/li>\n<\/ul>\n\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE suite SYSTEM \"http:\/\/testng.org\/testng-1.0.dtd\">\n\n&lt;suite name=\"ITtesterTestSuite\" verbose=\"1\" parallel=\"methods\" thread-count=\"5\">\n\n\u00a0\u00a0&lt;test name=\"parallelExecutionTestsA\" >\n\n\u00a0\u00a0\u00a0\u00a0&lt;classes>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;class name=\"testsInParallelA1\" \/>\n\n\u00a0\u00a0\u00a0\u00a0&lt;class name=\"testsInParallelA2\" \/>\n\n\u00a0\u00a0\u00a0\u00a0&lt;\/classes>\n\n\u00a0\u00a0&lt;\/test>\n\n\u00a0\u00a0&lt;test name=\"parallelExecutionTestsB\" >\n\n\u00a0\u00a0\u00a0\u00a0&lt;classes>\n\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;class name=\"testsInParallelB1\" \/>\n\n\u00a0\u00a0\u00a0\u00a0&lt;class name=\"testsInParallelB2\" \/>\n\n\u00a0\u00a0\u00a0\u00a0&lt;\/classes>\n\n\u00a0\u00a0&lt;\/test>\n\n&lt;\/suite><\/code><\/pre>\n\n<p>Sehen wir uns den Zweck der drei Optionen an, die als Wert f\u00fcr den Parameter &#8222;parallel&#8220; festgelegt werden k\u00f6nnen &#8211;<\/p>\n\n<p><strong>methods<\/strong> &#8211; der Wert der Methode f\u00fcr das Attribut parallel l\u00e4sst alle Tests unabh\u00e4ngig voneinander auf separaten Threads laufen (maximal verf\u00fcgbare Threads). Im obigen Beispiel werden alle Testmethoden, die unter allen vier Klassen aufgef\u00fchrt sind, parallel in maximal 5 Threads ausgef\u00fchrt.<\/p>\n\n<p><strong>tests<\/strong> &#8211; der Testwert f\u00fchrt die im Test-Flag aufgelisteten Methoden im selben Thread aus. Im obigen Beispiel werden alle Testmethoden mit der Bezeichnung &#8222;parallelExecutionTestsA&#8220; in demselben Thread ausgef\u00fchrt, und alle Testmethoden mit der Bezeichnung &#8222;parallelExecutionTestsB&#8220; werden in demselben Thread ausgef\u00fchrt. Es gibt also zwei Threads, von denen jeder die Testmethoden parallel, aber unabh\u00e4ngig voneinander innerhalb der parallelExecutionTestsA und parallelExecutionTestsB Tests ausf\u00fchrt.<\/p>\n\n<p><strong>class <\/strong>&#8211; der Wert von class l\u00f6st alle in der Klasse aufgef\u00fchrten Testmethoden im selben Thread aus, wobei jede Methode der Klasse in einem anderen Thread ausgel\u00f6st wird. Es g\u00e4be also vier Threads, die Tests in vier Klassen ausf\u00fchren &#8211; testsInParallelA1,testsInParallelA2,testsInParallelB1,testsInParallelB2.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>TestNG bietet inh\u00e4rente Unterst\u00fctzung f\u00fcr die parallele Ausf\u00fchrung von Tests, die wir in Selenium oder einem anderen Tool ausf\u00fchren k\u00f6nnen.<\/p>\n","protected":false},"author":8,"featured_media":1565,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[25],"tags":[],"class_list":["post-1234","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-testng-anleitung"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1234","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/comments?post=1234"}],"version-history":[{"count":2,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1234\/revisions"}],"predecessor-version":[{"id":1567,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/posts\/1234\/revisions\/1567"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/media\/1565"}],"wp:attachment":[{"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/media?parent=1234"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/categories?post=1234"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ittester.sk\/de\/wp-json\/wp\/v2\/tags?post=1234"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}