利用多執行緒執行建置更好的平行測試

最後更新日期:2020年11月8日 Continuous Testing 專家

 

在當今快節奏的世界裡, 更快的上市時間 對於各種規模的企業來說,快速回應都是一項關鍵需求。因此,企業期望品質保證團隊能夠迅速提供關於其軟體產品的回饋。 測試自動化 雖然可以顯著縮短測試時間並提高運行效率,但有時某些程式碼執行時間過長,會阻礙自動化測試專案的進度。並行執行可以有效解決這個問題。並行測試是指在多個瀏覽器和平台上同時執行測試腳本的過程。

並行執行雖然能顯著縮短測試時間,但也帶來了一些挑戰。將測試腳本分離出來進行並行執行是一項複雜的任務。此外,您還應該考慮線程問題。 safe多執行緒執行是指並發程序同時運行,因此需要對執行緒間的交互方式有清楚的理解。所以,多執行緒執行是軟體測試專案的關鍵組成部分。

多執行緒執行概述

整合測試 整合測試是軟體測試的一部分,它將軟體模組邏輯地整合在一起,並測試它們之間的互動方式。它主要關注多個不同模組如何進行數據通訊。多執行緒執行是整合測試的一部分,用於測試執行緒的特定功能。執行緒是機器可執行的最小工作單元。它通常在整合測試的開始階段執行,主要用於測試客戶端-伺服器架構。

在初始階段,整合執行緒首先作為子系統進行測試,然後再作為一個整體系統進行測試。由於這種整合測試採用增量模型,按順序測試處理任務,因此也稱為執行緒交互測試。它最適合物件導向的即時系統。通常,多執行緒執行測試從測試單一執行緒開始,然後再進行多執行緒執行測試。

您可以透過兩種方式執行線程化操作:

  • 單線程測試: 單執行緒測試是指一次測試一個應用程式事務,以了解應用程式邏輯如何運作,以及如何按預期執行輸入和輸出資料事務。
  • 多線程測試: 多執行緒測試是指應用程式的多個並發事務同時執行。它可以運作在單一機器上,也可以分佈在多台機器上。執行緒測試在客戶端-伺服器架構中至關重要,因為單一執行緒在不與其他執行緒持有的物件互動時可能運作良好。然而,在多執行緒環境中,同一個執行緒可能會發生故障。因此,執行緒交互是需要重點檢查的一個面向。

在進行多執行緒測試時,編寫可重複的單元測試程式碼是一項巨大的挑戰。同樣,您還應該考慮到記憶體、儲存和速度等資源會因硬體而異。因此,精心編寫程式碼至關重要。一旦您解決了這些挑戰,就能充分利用執行緒測試帶來的所有優勢。您可以輕鬆地檢查基於客戶端-伺服器架構的應用程式的功能、效能和特性。

用於線程測試的並行執行

透過執行平行測試,您可以在測試應用程式中的多執行緒程式碼的同時,縮短測試執行時間。 TestNG 是一個受歡迎的測試自動化框架,可協助您執行多執行緒並行測試。

以下是一個檢查線程 ID 的範例:

[java] public void ExperitestThreadOne() { long id = Thread.currentThread().getId(); System.out.println(“Experitest Thread id: ” + id); } [/java]

現在,讓我們建立一個小的測試腳本,運行兩個方法並檢查線程 ID。

開啟 Eclipse IDE,建立一個 Java 項目,並在該專案中建立一個類,然後編寫以下程式碼:

[java] package ExperitestMultiThread; import org.testng.annotations.Test; public class ExperitestMTDemo { @Test public void ExperitestMethod1() { long id = Thread.currentThread().getId(); System。 ExperitestMethod2() { long id = Thread.currentThread().getId(); System.out.println("Experitest Method 2 Thread id is: " + id); } } [/java]

現在,運行這個程式並檢查輸出結果。

多執行緒執行

如果查看輸出結果,會發現這兩種方法都是在單一執行緒中按順序運行的。

現在,讓我們並行運行這兩種方法。為此,請建立一個名為 TestNG.xml 的新文件,並將下列程式碼新增至該文件。

  [xml] [/xml]

或者,您可以右鍵單擊項目,然後按一下 TestNG -> 轉換為 TestNG。

現在,選擇並行模式 -> 方法,並將執行緒數設為 2,然後儲存檔案。

並行模式下的多執行緒執行

以 TestNG 測試套件的形式執行 TestNG.xml 檔案:

運行 TestNG.xml 檔案作為 TestNG 套件

可以看到,每個方法都在單獨的執行緒中運行。 (線程 14、15、14)

同樣,您可以基於測試、套件等運行並行測試。

TestNG 還允許您使用「threadPoolSize」和「invocationCount」屬性在多執行緒環境中執行平行測試。

以下是在多執行緒環境下執行並行測試的範例。

[java] package ExperitestMultiThread; import org.testng.annotations.Test; public class ExperitestMT { @Test(threadPoolSize = 4, invocationCount = 8, timeOut = 1000) public void ExperitestMTEnvironment() {cur id = Th. System.out.println(“Experitest 多執行緒測試現在正在執行緒「 + id 上運行」); } } [/java]

在這個例子中,我們將線程池大小設為 4。這意味著程式將在 4 個不同的執行緒上運行。同樣地,將呼叫次數設為 8,這表示方法將執行 8 次。

現在,建立一個名為 testng.xml 的文件,並加入以下程式碼:

[xml] [/xml]

執行 testng.xml 時,它將使用 4 個執行緒執行同一個方法 8 次。

建立一個 testng.xml 文件

在這裡,你可以看到該程式是在 4 個不同的執行緒中執行的(執行緒 14、15、16、17)。

SeeTest平台上的多執行緒執行

要並行運行多個測試案例,您需要充足的運算資源。 SeeTest 提供了一個強大的測試自動化平台,讓您能夠在多個瀏覽器和平台上執行平行測試。

以下範例示範如何以平行模式執行測試類別:

建立一個 Java 項目,並在該專案中建立兩個類別。在第一個類別(ExperitestSearch.java)中,加入以下程式碼:

[java] private static final String ACCESS_KEY = 「在此輸入您的存取金鑰」; private RemoteWebDriver driver; private URL url; private DesiredCapabilities dc = new DesiredCapabilities(url); @BeforeMethod publicoid Upabilities( URL(“https://cloud.seetest.io/wd/hub”); dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.CHROME); dc.setCapability(CapabilityType.PLATFORM, Platform.ANY); dc.setCapability(“accesstestKey”, ACCESS 入門演示器“快速入門”演示。 10).until(ExpectedConditions.presenceOfElementLocated(By.name(“q”)); WebElement searchBar = driver.findElement(By.name(“q”)); searchBar.click(); searchBar.sendKeys(“ExperitKey”); searchBar.click(); searchBar.sendKeys(“ExperitKey”); search. Thread.currentThread().getId(); System.out.println(” Experitest 搜尋測試方法執行緒 ID 為:" + id); } @AfterMethod public void tearDown() { System.out.println(“報告 URL:” + driver.getCapabilities().getCapability(“reportUrl”) URL(); Thread.currentThread().getId(); System.out.println("Experitest Search Teardown Method 執行緒 ID 為: " + id); } [/java]

private static final String ACCESS_KEY = “在此輸入您的存取金鑰”;

該程式將登入 SeeTest 平台,打開 Google 瀏覽器並搜尋關鍵字「Experitest」。搜尋結果顯示後,程式將關閉瀏覽器。程式將顯示每個方法的線程 ID。

現在,建立另一個類別(SeeTestSearch.java),並新增以下程式碼:

[java] package ExperitestMultiThread; import org.openqa.selenium.*; import org.openqa.selenium.remote.BrowserType; import org.openqa.selenium.remote.CapabilityType; import org.openopenqa.selen.mul. org.openqa.selenium.remote.RemoteWebDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testqa.selenium.support.ui.WebDriverWait; import org.testqa.selenium.support.ui.WebDriverWait; import org.testng.annotportations; org.testng.annotations.Test; import java.net.URL; public class SeeTestSearch { private static final String ACCESS_KEY = “在此輸入您的訪問密鑰”; private RemoteWebDriver driverver; private URL url; privatebed setUp() throws Exception { url = new URL(“https://cloud.seetest.io/wd/hub”); dc.setCapability(CapabilityType.BROWSER_NAME, BrowserType.FIREFOX); dc.setCapability(CapabilityType.PLATFORM,Keyform.A); dc.setCapability(“testName”, “Quick Start Firefox Browser Demo”); driver = new RemoteWebDriver(url, dc); long id = Thread.currentThread().getId(); System.out.println(” SeeTest 搜尋設定方法 ID 為:” driver.get(“https://www.google.com”); new WebDriverWait(driver, 10).until(ExpectedConditions.presenceOfElementLocated(By.name(“q”))); WebElement searchBar = 與searchBar.sendKeys(Keys.ENTER); long id = Thread.currentThread().getId(); System.out.println(” SeeTest 搜尋測試方法執行緒 ID 為:” + id); } @AfterMethod public void tearDown() { SystemCap.out.println(“報告driver.quit(); long id = Thread.currentThread().getId(); System.out.println(” SeeTest 搜尋清理方法執行緒 ID 為:” + id); } } [/java]

該程式將登入 SeeTest 雲端平台,開啟 Firefox 瀏覽器,開啟 Google 搜尋網站,並搜尋關鍵字「SeeTest」。

現在,我們已經創建了兩個類別。下一步是並行運行它們。因此,請建立一個 TestNG.xml 文件,並將以下程式碼新增至其中。

[xml] [/xml]

現在,執行 TestNG.xml 檔案。

SeeTest平台上的多執行緒執行

可以看到,這兩個類別在不同的執行緒(執行緒 16 和 15)中同時執行。類似地,您可以使用 TestNG 框架並行運行方法、測試和測試套件。

摘要

多執行緒執行是運行並行測試的強大方法。使用功能強大的 SeeTest 測試自動化框架和 TestNG 框架,您可以… 建立更完善的平行測試,並在多執行緒環境中輕鬆執行它們 無需擔心計算資源。但是,需要注意的是,用於線程測試的腳本應該彼此獨立且可複現。每次使用相同的輸入和應用程式版本時,它們都應該給出相同的結果。此外,使用線程也很重要。safe 在測試中使用變數。遵循執行緒測試最佳實踐,不僅可以建立更好的多執行緒並行測試,還可以優化資源利用,並顯著縮短測試時間。

蓋伊·阿里埃利 - 技術長

你可能還喜歡