發佈時間:11月10,2020
利用多執行緒執行建置更好的平行測試
在當今快節奏的世界裡, 更快的上市時間 對於各種規模的企業來說,快速回應都是一項關鍵需求。因此,企業期望品質保證團隊能夠迅速提供關於其軟體產品的回饋。 測試自動化 雖然可以顯著縮短測試時間並提高運行效率,但有時某些程式碼執行時間過長,會阻礙自動化測試專案的進度。並行執行可以有效解決這個問題。並行測試是指在多個瀏覽器和平台上同時執行測試腳本的過程。
並行執行雖然能顯著縮短測試時間,但也帶來了一些挑戰。將測試腳本分離出來進行並行執行是一項複雜的任務。此外,您還應該考慮線程問題。 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 檔案:
可以看到,每個方法都在單獨的執行緒中運行。 (線程 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 次。
在這裡,你可以看到該程式是在 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 檔案。
可以看到,這兩個類別在不同的執行緒(執行緒 16 和 15)中同時執行。類似地,您可以使用 TestNG 框架並行運行方法、測試和測試套件。
摘要
多執行緒執行是運行並行測試的強大方法。使用功能強大的 SeeTest 測試自動化框架和 TestNG 框架,您可以… 建立更完善的平行測試,並在多執行緒環境中輕鬆執行它們 無需擔心計算資源。但是,需要注意的是,用於線程測試的腳本應該彼此獨立且可複現。每次使用相同的輸入和應用程式版本時,它們都應該給出相同的結果。此外,使用線程也很重要。safe 在測試中使用變數。遵循執行緒測試最佳實踐,不僅可以建立更好的多執行緒並行測試,還可以優化資源利用,並顯著縮短測試時間。




