如何使用 GitHub Actions 執行 Selenium 回歸測試
1. 概述
回歸測試透過提供關鍵回饋來確保建置已準備好發布。隨著程式碼庫隨著新需求、錯誤修復和增強而發展,頻繁執行這些測試對於維護軟體品質至關重要。
在 CI/CD 管道中執行回歸測試非常重要,因為當我們將程式碼提交到遠端儲存庫時它們會自動執行,並提供快速回饋。
在本教程中,我們將學習如何使用 GitHub Actions 執行 Selenium 回歸測試。
2.什麼是 GitHub Actions?
GitHub Actions 自動化了建置、測試和部署工作流程,建置並測試對遠端儲存庫的每個拉取請求,從而實現更快的回饋。
這些反饋有助於我們在投入生產之前解決問題。 GitHub Actions 工作流程可以在 Windows、macOS 和 Linux 虛擬機器或資料中心或雲端基礎架構中的自託管執行器上運作。
我們也可以利用 GitHub Actions 和各種工具和框架來執行回歸測試。例如,GitHub Actions 可以幫助使用 Selenium 執行自動化瀏覽器測試,從而提高回歸測試的效率。
3.使用 GitHub Actions 執行 Selenium 迴歸測試
在我們討論在 GitHub Actions 上執行 Selenium 回歸測試之前,讓我們先討論一下專案設定、設定、測試場景和實作。
3.1.設定和配置
我們在Maven專案的pom.xml
檔案中加入Selenium WebDriver的依賴和TestNG的依賴:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>4.27.0</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.10.2</version>
<scope>test</scope>
</dependency>
我們還需要新增maven-surefire-plugin
,因為它可以幫助我們在使用 GitHub Actions 工作流程執行 Maven 指令mvn clean install
時執行testng.xml
檔:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
<executions>
<execution>
<goals>
<goal>test</goal>
</goals>
</execution>
</executions>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
<properties>
<property>
<name>usedefaultlisteners</name>
<value>false</value>
</property>
</properties>
<suiteXmlFiles>
<suiteXmlFile>testng.xml</suiteXmlFile>
</suiteXmlFiles>
<argLine>${argLine}</argLine>
</configuration>
</plugin>
我們將使用 LambdaTest 等平台在雲端使用 GitHub Actions 執行 Selenium 回歸測試。
LambdaTest 是一個由人工智慧驅動的測試執行平台,讓我們能夠在 3000 多個真實瀏覽器、瀏覽器版本和作業系統上執行自動化測試。
讓我們建立一個BaseTest.java來新增所有 Selenium 和 LambdaTest 設定詳細資訊:
public class BaseTest {
protected RemoteWebDriver driver;
// Other code and methods...
}
我們將在BaseTest類別中加入*setup()*方法,該方法在任何測試運行之前配置 Selenium 和 LambdaTest:
@BeforeTest
public void setup() {
String userName = System.getenv("LT_USERNAME") == null
? "LT_USERNAME"
: System.getenv("LT_USERNAME");
String accessKey = System.getenv("LT_ACCESS_KEY") == null
? "LT_ACCESS_KEY"
: System.getenv("LT_ACCESS_KEY");
String gridUrl = "@hub.lambdatest.com/wd/hub";
try {
this.driver = new RemoteWebDriver(
new URL("http://" + userName + ":" + accessKey + gridUrl),
getChromeOptions()
);
} catch (MalformedURLException e) {
LOG.error("Could not start the remote session on LambdaTest cloud grid");
}
this.driver.manage()
.timeouts()
.implicitlyWait(Duration.ofSeconds(5));
}
與平台、瀏覽器版本等相關的 LambdaTest 功能將從同一BaseTest類別中建立的*getChromeOptions()*方法中取得。為了產生自動化功能,我們可以使用 LambdaTest 自動化功能產生器:
public ChromeOptions getChromeOptions() {
var browserOptions = new ChromeOptions();
browserOptions.setPlatformName("Windows 10");
browserOptions.setBrowserVersion("latest");
HashMap<String, Object> ltOptions = new HashMap<>();
ltOptions.put("project", "LambdaTest e-commerce website automation");
ltOptions.put("build", "LambdaTest e-commerceV1.0.0");
ltOptions.put("name", "Homepage search product test");
ltOptions.put("w3c", true);
ltOptions.put("plugin", "java-testNG");
browserOptions.setCapability("LT:Options", ltOptions);
return browserOptions;
}
所有測試執行完成後, *tearDown()*方法會更新 LambdaTest 雲端網格上的測試狀態並關閉驅動程式工作階段:
@AfterTest
public void tearDown() {
this.driver.executeScript("lambda-status=" + this.status);
this.driver.quit();
}
我們將在最新 Chrome 瀏覽器上的 LambdaTest 雲端網格上使用 Selenium 和 GitHub Actions 自動執行以下測試場景。
3.2.測試場景
讓我們使用以下測試場景來示範使用 GitHub Actions 進行 Selenium 回歸測試:
- 導覽至LambdaTest 電子商務遊樂場網站。
- 在主頁上搜尋產品。
- 檢查產品搜尋頁面是否傳回正確的產品詳細資訊。
3.3.測試實施
讓我們建立一個LambdaTestEcommerceTests類,透過編寫自動化測試腳本來實現測試場景。這個類別擴展了BaseTest類,繼承了它的欄位和方法,並在測試類別中重複使用它:
public class LambdaTestEcommerceTests extends BaseTest {
@Test
public void whenUserSearchesForAProduct_thenSearchResultsShouldBeDisplayed() {
String productName = "iPhone";
driver.get("https://ecommerce-playground.lambdatest.io/");
HomePage homePage = new HomePage(driver);
SearchResultPage searchResultPage = homePage.searchProduct(productName);
searchResultPage.verifySearchResultPageHeader(productName);
this.status = "passed";
}
}
測試中使用了兩個頁面物件類別。第一個是HomePage
類,它包含與 Web 應用程式主頁相關的所有頁面物件和操作:
public class HomePage {
private RemoteWebDriver driver;
public HomePage(RemoteWebDriver driver) {
this.driver = driver;
}
public SearchResultPage searchProduct(String productName) {
WebElement searchBox = driver.findElement(By.name("search"));
searchBox.sendKeys(productName);
WebElement searchBtn = driver.findElement(By.cssSelector("button.type-text"));
searchBtn.click();
return new SearchResultPage(driver);
}
}
searchProduct()方法接受productName作為方法參數,並搜尋具有所提供名稱的產品。商品搜尋成功後,出現搜尋結果頁面;因此,此方法傳回SearchResultPage
類別的新實例:
public class SearchResultPage {
private RemoteWebDriver driver;
public SearchResultPage(RemoteWebDriver driver) {
this.driver = driver;
}
public void verifySearchResultPageHeader(String productName) {
String pageHeader = driver.findElement(By.tagName("h1"))
.getText();
assertEquals(pageHeader, "Search - " + productName);
}
}
*verifySearchResultPageHeader()*方法檢查搜尋頁面的標題是否包含所搜尋產品的文字。
3.4.測試執行
讓我們建立一個testng.xml文件,用於在 LambdaTest 雲端平台上執行 Selenium 回歸測試:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Selenium GitHub Actions demo">
<test name="Searching a product from the HomePage">
<classes>
<class name="com.baeldung.LambdaTestEcommerceTests">
<methods>
<include name="whenUserSearchesForAProduct_thenSearchResultsShouldBeDisplayed"/>
</methods>
</class>
</classes>
</test>
</suite>
3.5.設定 GitHub Actions
以下是設定和設定 GitHub Actions 的一些先決條件:
- GitHub 帳戶
- GitHub 儲存庫
一旦我們擁有了 GitHub 帳戶和建立了儲存庫,我們就可以前往「Actions」標籤並使用 Maven Action 工作流程設定 Java:
3.6.建立 GitHub Actions 工作流程
GitHub 會自動為我們產生工作流程檔案。我們可以選擇繼續使用 GitHub 提供的相同工作流程,也可以加入我們自己的內容。
由於我們需要在 LambdaTest 雲端平台上執行 Selenium 回歸測試,我們將根據要求更新工作流程的內容:
name: Java CI with Maven
on:
push:
branches:
- "main"
- "test-*"
pull_request:
branches:
- "main"
- "test-*"
jobs:
build:
runs-on: ubuntu-latest
env:
LT_USERNAME: ${{ secrets.LT_USERNAME }}
LT_ACCESS_KEY: ${{ secrets.LT_ACCESS_KEY }}
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build and Test with Maven
run: mvn clean install
我們需要新增 LambdaTest 使用者名稱和存取金鑰作為在 LambdaTest 雲端網格上執行測試的秘密。此外,我們將把 Maven 命令更新為mvn clean install,
因為它會下載所有依賴項、建置專案並一次執行測試。
可以透過導覽至 GitHub 儲存庫Settings
> Secrets and Variables > Actions
將機密值新增至儲存庫:
在「Actions Secrets and Variables
頁面上,我們點擊New repository secret
並新增機密變數及其值。
3.7.觸發 GitHub Actions 工作流程
我們可以使用工作流程檔案中的on
關鍵字來觸發單一事件或多個事件的 GitHub Actions 工作流程。
讓我們按照以下步驟在將程式碼推送到任何分支或提出拉取請求時觸發工作流程:
1. 我們將工作流程檔案新增至 GitHub 儲存庫。我們將分支命名為maven_github_actions ,以on push branches
/ on pull_request branches
名稱與maven_*
相符。
2.我們在maven_github_actions分支中進行程式碼更改。然後,我們將程式碼推送到分支並向主分支發出拉取請求。成功推送程式碼後,工作流程會自動觸發,我們可以在 GitHub 儲存庫的Actions
標籤上檢查其狀態:
點擊工作流程運行,我們可以查看有關工作流程作業的詳細資訊。
工作流程運行完成後,我們可以在 LambdaTest Web 自動化儀表板上查看 Selenium 回歸測試結果:
建置作業實際上在使用者選擇的配置機器上執行。此機器的名稱在jobs
區塊內的工作流程中使用runs-on
關鍵字進行設定。
在我們的例子中,我們使用ubuntu-latest
機器運行 GitHub Actions 工作流程。
4. 結論
GitHub Actions 有助於設定自動化管道並運行各種工作流程,包括回歸測試。它會在多個事件上觸發工作流程,例如將程式碼推送到儲存庫或透過拉取請求將程式碼合併到主分支中。這些工作流程運行可對建置提供快速回饋,使我們能夠在將應用程式發佈到生產之前採取糾正措施。
本教程中使用的原始程式碼可在 GitHub 上找到。