In diesem Tutorial zeigen wir Ihnen, wie Sie die @Test-Attribute
invocationCount
und` threadPoolSize` verwenden, um einen Belastungstest oder einen Belastungstest auf einer Website durchzuführen.
Benutztes Werkzeug :
-
TestNG 6.8.7
-
Selen 2.39.0
-
Maven 3
P.S Wir verwenden die Selenium-Bibliothek, um Browser für den Zugriff auf eine Website zu automatisieren.
1. Projektabhängigkeit
Holen Sie sich TestNG- und Selenium-Bibliotheken.
pom.xml
<properties> <testng.version>6.8.7</testng.version> <selenium.version>2.39.0</selenium.version> </properties> <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>${testng.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>${selenium.version}</version> </dependency> <dependencies>
2. @Test (invocationCount =?)
Diese "invocationCount" bestimmt, wie oft TestNG diese Testmethode ausführen soll.
Beispiel 2.1
@Test(invocationCount = 10) public void repeatThis() { //... }
Ausgabe - Die Methode
repeatThis ()
wird zehnmal ausgeführt.
PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis PASSED: repeatThis
Example 2.2 - Verwendet Selenium, um einen Firefox-Browser zu öffnen und "Google.com" zu laden. Dieser Test soll sicherstellen, dass der Seitentitel immer "Google" ist.
package com.mkyong.testng.examples.loadtest; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class TestMultipleThreads { @Test(invocationCount = 5) public void loadTestThisWebsite() { WebDriver driver = new FirefoxDriver(); driver.get("http://www.google.com"); System.out.println("Page Title is " + driver.getTitle()); Assert.assertEquals("Google", driver.getTitle()); driver.quit(); } }
Ausgabe - Sie werden feststellen, dass der Firefox-Browser fünfmal aufgefordert und geschlossen wird.
Page Title is Google Page Title is Google Page Title is Google Page Title is Google Page Title is Google PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite PASSED: loadTestThisWebsite
3. @Test (invocationCount =?, ThreadPoolSize =?)
Das
threadPoolSize
-Attribut weist TestNG an, einen Thread-Pool zu erstellen, um die Testmethode über mehrere Threads auszuführen. Mit Threadpool wird die Laufzeit der Testmethode erheblich verkürzt.
Example 3.1 - Starten Sie einen Thread-Pool, der 3 Threads enthält, und führen Sie die Testmethode dreimal aus.
@Test(invocationCount = 3, threadPoolSize = 3) public void testThreadPools() { System.out.printf("Thread Id : %s%n", Thread.currentThread().getId()); }
Ausgabe - Die Testmethode wird 3 Mal ausgeführt und jede hat einen eigenen Thread.
….[ThreadUtil]Starting executor timeOut:0ms workers:3 threadPoolSize:3 Thread Id : 10 Thread Id : 12 Thread Id : 11 PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools
__Example 3.2__ - Starten Sie einen Thread-Pool, der 3 Threads enthält, und führen Sie die Testmethode zehnmal aus.
@Test(invocationCount = 10, threadPoolSize = 3) public void testThreadPools() {
System.out.printf("Thread Id : %s%n", Thread.currentThread().getId());
}
Ausgabe - Die Testmethode wird zehnmal ausgeführt und die Threads werden erneut verwendet. ....[ThreadUtil]Starting executor timeOut:0ms workers:10 threadPoolSize:3 Thread Id : 10 Thread Id : 11 Thread Id : 12 Thread Id : 10 Thread Id : 11 Thread Id : 12 Thread Id : 10 Thread Id : 11 Thread Id : 12 Thread Id : 10 PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools PASSED: testThreadPools
4. Testbeispiel laden
Durch die Kombination mehrerer TestNG-Threads und der leistungsstarken Browserautomatisierung von Selenium. Sie können einen einfachen, aber leistungsstarken Lasttest wie folgt erstellen:
TestMultipleThreads.java
package com.mkyong.testng.examples.loadtest; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class TestMultipleThreads { @Test(invocationCount = 100, threadPoolSize = 5) public void loadTest() { System.out.printf("%n[START]Thread Id : %s is started!", Thread.currentThread().getId()); WebDriver driver = new FirefoxDriver(); driver.get("http://yourwebsite.com"); //perform whatever actions, like login, submit form or navigation System.out.printf("%n[END]Thread Id : %s", Thread.currentThread().getId()); driver.quit(); } }
Ausgabe - Der obige Test startet einen Thread-Pool von 5 und sendet 100 URL-Anforderungen an eine angegebene Website.
….[ThreadUtil]Starting executor timeOut:0ms workers:100 threadPoolSize:5 [START]Thread Id : 11 is started![START]Thread Id : 14 is started![START]Thread Id : 10 is started![START]Thread Id : 12 is started![START]Thread Id : 13 is started![END]Thread Id : 11[START]Thread Id : 11 is started![END]Thread Id : 10[START]Thread Id : 10 is started![END]Thread Id : 13[START]Thread Id : 13 is started![END]Thread Id : 14[START]Thread Id : 14 is started![END]Thread Id : 12[START]Thread Id : 12 is started![END]Thread Id : 13
.... ** FAQs** + Q : For load testing with Selenium and TestNG, why only one browser is prompts out at a time? + A : Your test method is completed too fast, try putting a `Thread.sleep(5000)` to delay the execution, now, you should notice multiple browsers prompt out simultaneously. (For demonstration purpose only). === Download Source Code Download – link://wp-content/uploads/2014/01/TestNG-LoadTest-Example.zip[TestNG-LoadTest-Example.zip](15 kb) === References . http://docs.seleniumhq.org/[Selenium website]. http://en.wikipedia.org/wiki/Load__testing[Wikipedia : Load Testing] link://tag/load-test/[load test]link://tag/selenium/[selenium]link://tag/testng/[testng]