diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 903672f..796dcb6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,10 @@ jobs: run: mvn -B -e clean test -Dselenium.headless=true || true env: CHROME_OPTIONS: --remote-allow-origins=*;--disable-gpu;--no-sandbox;--disable-dev-shm-usage;--headless=new;--window-size=1920,1080 - + INFLUX_URL: ${{ secrets.INFLUX_URL }} + INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }} + INFLUX_ORG: ${{ secrets.INFLUX_ORG }} + INFLUX_BUCKET: ${{ secrets.INFLUX_BUCKET }} # 4. Output failed tests - name: Print failed tests if: failure() @@ -94,3 +97,16 @@ jobs: with: name: allure-report path: allure-report + + # 11 Print all metrics + - name: Print test metrics summary + if: always() + run: | + mvn -q exec:java -Dexec.mainClass=utils.InfluxReader > influx-summary.txt + echo "### Test metrics from InfluxDB" >> $GITHUB_STEP_SUMMARY + cat influx-summary.txt >> $GITHUB_STEP_SUMMARY + env: + INFLUX_URL: ${{ secrets.INFLUX_URL }} + INFLUX_TOKEN: ${{ secrets.INFLUX_TOKEN }} + INFLUX_ORG: ${{ secrets.INFLUX_ORG }} + INFLUX_BUCKET: ${{ secrets.INFLUX_BUCKET }} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 9002ade..e9b0a3a 100644 --- a/pom.xml +++ b/pom.xml @@ -84,6 +84,12 @@ selenide 7.8.0 + + + com.influxdb + influxdb-client-java + 6.11.0 + diff --git a/src/test/java/ui/testing/base/BasePage.java b/src/test/java/ui/testing/base/BasePage.java index 619b9ef..0625dcf 100644 --- a/src/test/java/ui/testing/base/BasePage.java +++ b/src/test/java/ui/testing/base/BasePage.java @@ -18,7 +18,7 @@ public WebDriver getDriver() { return driver; } - public WebDriverWait wait4() { - return new WebDriverWait(getDriver(), Duration.ofSeconds(4)); + public WebDriverWait wait10() { + return new WebDriverWait(getDriver(), Duration.ofSeconds(10)); } } diff --git a/src/test/java/ui/testing/base/BaseTest.java b/src/test/java/ui/testing/base/BaseTest.java index 2423099..6780c8f 100644 --- a/src/test/java/ui/testing/base/BaseTest.java +++ b/src/test/java/ui/testing/base/BaseTest.java @@ -7,6 +7,7 @@ import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.asserts.SoftAssert; +import ui.testing.utils.InfluxReader; public class BaseTest { protected WebDriver driver; @@ -36,8 +37,11 @@ public void setUp() { @AfterMethod(alwaysRun = true) public void tearDown() { + InfluxReader.printAllureMetrics(); if (driver != null) { driver.quit(); } } + } + diff --git a/src/test/java/ui/testing/page/ClassAttributePage.java b/src/test/java/ui/testing/page/ClassAttributePage.java index b83c7fb..a8b2b7e 100644 --- a/src/test/java/ui/testing/page/ClassAttributePage.java +++ b/src/test/java/ui/testing/page/ClassAttributePage.java @@ -17,7 +17,7 @@ public ClassAttributePage(WebDriver driver) { public String getAlert() { buttonPrimary.click(); - wait4().until(ExpectedConditions.alertIsPresent()); + wait10().until(ExpectedConditions.alertIsPresent()); Alert alert = getDriver().switchTo().alert(); String text = alert.getText(); alert.accept(); diff --git a/src/test/java/ui/testing/page/HiddenLayersPage.java b/src/test/java/ui/testing/page/HiddenLayersPage.java index f76028d..e3763fd 100644 --- a/src/test/java/ui/testing/page/HiddenLayersPage.java +++ b/src/test/java/ui/testing/page/HiddenLayersPage.java @@ -15,7 +15,7 @@ public HiddenLayersPage(WebDriver driver) { public String notAllowedClickMoreThanOne() { String message = ""; boolean clickable = true; - WebElement enableButton = wait4().until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@id = 'greenButton']"))); + WebElement enableButton = wait10().until(ExpectedConditions.elementToBeClickable(By.xpath("//button[@id = 'greenButton']"))); try { enableButton.click(); message = "Green button visible and clicked. Click : "; diff --git a/src/test/java/ui/testing/page/LoadDelayPage.java b/src/test/java/ui/testing/page/LoadDelayPage.java index 5a88e95..d0e317f 100644 --- a/src/test/java/ui/testing/page/LoadDelayPage.java +++ b/src/test/java/ui/testing/page/LoadDelayPage.java @@ -15,7 +15,7 @@ public LoadDelayPage(WebDriver driver) { @Step("Wait until button will be presence on page") public String confirmAppearedButton() { WebElement btnAppeared = getDriver().findElement(By.xpath("//button[@class = 'btn btn-primary']")); - wait4().until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//button[@class = 'btn btn-primary']"))); + wait10().until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//button[@class = 'btn btn-primary']"))); return btnAppeared.getText(); } diff --git a/src/test/java/ui/testing/utils/InfluxReader.java b/src/test/java/ui/testing/utils/InfluxReader.java new file mode 100644 index 0000000..4aca966 --- /dev/null +++ b/src/test/java/ui/testing/utils/InfluxReader.java @@ -0,0 +1,48 @@ +package ui.testing.utils; + +import com.influxdb.client.InfluxDBClient; +import com.influxdb.client.InfluxDBClientFactory; +import com.influxdb.query.FluxTable; + +import java.util.List; + +public class InfluxReader { + + public static void printAllureMetrics() { + String url = System.getenv("INFLUX_URL"); + String token = System.getenv("INFLUX_TOKEN"); + String org = System.getenv("INFLUX_ORG"); + String bucket = System.getenv("INFLUX_BUCKET"); + // 👇 Добавь проверки + if (url == null || token == null || org == null || bucket == null) { + System.err.println("⚠️ InfluxDB environment variables are not set!"); + System.err.println("Set: INFLUX_URL, INFLUX_TOKEN, INFLUX_ORG, INFLUX_BUCKET"); + return; + } + + try (InfluxDBClient client = InfluxDBClientFactory.create(url, token.toCharArray(), org)) { + + String flux = String.format(""" + from(bucket: "%s") + |> range(start: -24h) + |> filter(fn: (r) => r["_measurement"] == "allure_test") + |> group(columns: ["status"]) + |> count() + """, bucket); + + List tables = client.getQueryApi().query(flux, org); + + System.out.println("🧪 Test results from InfluxDB (last 24h):"); + for (FluxTable table : tables) { + table.getRecords().forEach(rec -> { + System.out.printf("%s : %s%n", + rec.getValueByKey("status"), + rec.getValue()); + }); + } + + } catch (Exception e) { + System.err.println("⚠️ Failed to query InfluxDB: " + e.getMessage()); + } + } +}