merge listeners, rm suites from all.xml
This commit is contained in:
parent
79fa735c46
commit
ad895876f0
@ -0,0 +1,28 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.msa;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target({ElementType.TYPE})
|
||||||
|
public @interface DisableUIListeners {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@ -16,18 +16,22 @@
|
|||||||
package org.thingsboard.server.msa;
|
package org.thingsboard.server.msa;
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.testng.ITestContext;
|
import org.openqa.selenium.WebDriver;
|
||||||
|
import org.testng.ITestListener;
|
||||||
import org.testng.ITestResult;
|
import org.testng.ITestResult;
|
||||||
import org.testng.TestListenerAdapter;
|
import org.testng.internal.ConstructorOrMethod;
|
||||||
|
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
|
||||||
|
|
||||||
import static org.testng.internal.Utils.log;
|
import static org.testng.internal.Utils.log;
|
||||||
|
import static org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest.captureScreen;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class TestListener extends TestListenerAdapter {
|
public class TestListener implements ITestListener {
|
||||||
|
|
||||||
|
WebDriver driver;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTestStart(ITestResult result) {
|
public void onTestStart(ITestResult result) {
|
||||||
super.onTestStart(result);
|
|
||||||
log.info("===>>> Test started: " + result.getName());
|
log.info("===>>> Test started: " + result.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,10 +40,14 @@ public class TestListener extends TestListenerAdapter {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onTestSuccess(ITestResult result) {
|
public void onTestSuccess(ITestResult result) {
|
||||||
super.onTestSuccess(result);
|
log.info("<<<=== Test completed successfully: " + result.getName());
|
||||||
if (result != null) {
|
ConstructorOrMethod consOrMethod = result.getMethod().getConstructorOrMethod();
|
||||||
log.info("<<<=== Test completed successfully: " + result.getName());
|
DisableUIListeners disable = consOrMethod.getMethod().getDeclaringClass().getAnnotation(DisableUIListeners.class);
|
||||||
|
if (disable != null) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
driver = ((AbstractDriverBaseTest) result.getInstance()).getDriver();
|
||||||
|
captureScreen(driver, "success");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,7 +55,28 @@ public class TestListener extends TestListenerAdapter {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onTestFailure(ITestResult result) {
|
public void onTestFailure(ITestResult result) {
|
||||||
super.onTestFailure(result);
|
|
||||||
log.info("<<<=== Test failed: " + result.getName());
|
log.info("<<<=== Test failed: " + result.getName());
|
||||||
|
ConstructorOrMethod consOrMethod = result.getMethod().getConstructorOrMethod();
|
||||||
|
DisableUIListeners disable = consOrMethod.getMethod().getDeclaringClass().getAnnotation(DisableUIListeners.class);
|
||||||
|
if (disable != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
driver = ((AbstractDriverBaseTest) result.getInstance()).getDriver();
|
||||||
|
captureScreen(driver, "failure");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoked when a test skipped
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onTestSkipped(ITestResult result) {
|
||||||
|
log.info("<<<=== Test skipped: " + result.getName());
|
||||||
|
ConstructorOrMethod consOrMethod = result.getMethod().getConstructorOrMethod();
|
||||||
|
DisableUIListeners disable = consOrMethod.getMethod().getDeclaringClass().getAnnotation(DisableUIListeners.class);
|
||||||
|
if (disable != null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
driver = ((AbstractDriverBaseTest) result.getInstance()).getDriver();
|
||||||
|
captureScreen(driver, "skipped");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,6 @@ package org.thingsboard.server.msa.connectivity;
|
|||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import io.restassured.path.json.JsonPath;
|
|
||||||
import org.testng.annotations.AfterMethod;
|
import org.testng.annotations.AfterMethod;
|
||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
@ -29,11 +28,13 @@ import org.thingsboard.server.common.data.DeviceProfileProvisionType;
|
|||||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||||
import org.thingsboard.server.common.msg.session.FeatureType;
|
import org.thingsboard.server.common.msg.session.FeatureType;
|
||||||
import org.thingsboard.server.msa.AbstractContainerTest;
|
import org.thingsboard.server.msa.AbstractContainerTest;
|
||||||
|
import org.thingsboard.server.msa.DisableUIListeners;
|
||||||
import org.thingsboard.server.msa.TestCoapClient;
|
import org.thingsboard.server.msa.TestCoapClient;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevicePrototype;
|
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevicePrototype;
|
||||||
|
|
||||||
|
@DisableUIListeners
|
||||||
public class CoapClientTest extends AbstractContainerTest {
|
public class CoapClientTest extends AbstractContainerTest {
|
||||||
private TestCoapClient client;
|
private TestCoapClient client;
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,7 @@ import org.thingsboard.server.common.data.DeviceProfile;
|
|||||||
import org.thingsboard.server.common.data.DeviceProfileProvisionType;
|
import org.thingsboard.server.common.data.DeviceProfileProvisionType;
|
||||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||||
import org.thingsboard.server.msa.AbstractContainerTest;
|
import org.thingsboard.server.msa.AbstractContainerTest;
|
||||||
|
import org.thingsboard.server.msa.DisableUIListeners;
|
||||||
import org.thingsboard.server.msa.WsClient;
|
import org.thingsboard.server.msa.WsClient;
|
||||||
import org.thingsboard.server.msa.mapper.WsTelemetryResponse;
|
import org.thingsboard.server.msa.mapper.WsTelemetryResponse;
|
||||||
|
|
||||||
@ -37,6 +38,7 @@ import static org.thingsboard.server.common.data.DataConstants.DEVICE;
|
|||||||
import static org.thingsboard.server.common.data.DataConstants.SHARED_SCOPE;
|
import static org.thingsboard.server.common.data.DataConstants.SHARED_SCOPE;
|
||||||
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevicePrototype;
|
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevicePrototype;
|
||||||
|
|
||||||
|
@DisableUIListeners
|
||||||
public class HttpClientTest extends AbstractContainerTest {
|
public class HttpClientTest extends AbstractContainerTest {
|
||||||
private Device device;
|
private Device device;
|
||||||
@BeforeMethod
|
@BeforeMethod
|
||||||
|
|||||||
@ -46,6 +46,7 @@ import org.thingsboard.server.common.data.rule.RuleChainMetaData;
|
|||||||
import org.thingsboard.server.common.data.rule.RuleNode;
|
import org.thingsboard.server.common.data.rule.RuleNode;
|
||||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||||
import org.thingsboard.server.msa.AbstractContainerTest;
|
import org.thingsboard.server.msa.AbstractContainerTest;
|
||||||
|
import org.thingsboard.server.msa.DisableUIListeners;
|
||||||
import org.thingsboard.server.msa.WsClient;
|
import org.thingsboard.server.msa.WsClient;
|
||||||
import org.thingsboard.server.msa.mapper.AttributesResponse;
|
import org.thingsboard.server.msa.mapper.AttributesResponse;
|
||||||
import org.thingsboard.server.msa.mapper.WsTelemetryResponse;
|
import org.thingsboard.server.msa.mapper.WsTelemetryResponse;
|
||||||
@ -68,6 +69,7 @@ import static org.thingsboard.server.common.data.DataConstants.DEVICE;
|
|||||||
import static org.thingsboard.server.common.data.DataConstants.SHARED_SCOPE;
|
import static org.thingsboard.server.common.data.DataConstants.SHARED_SCOPE;
|
||||||
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevicePrototype;
|
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultDevicePrototype;
|
||||||
|
|
||||||
|
@DisableUIListeners
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MqttClientTest extends AbstractContainerTest {
|
public class MqttClientTest extends AbstractContainerTest {
|
||||||
|
|
||||||
|
|||||||
@ -46,6 +46,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
|
|||||||
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup;
|
||||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||||
import org.thingsboard.server.msa.AbstractContainerTest;
|
import org.thingsboard.server.msa.AbstractContainerTest;
|
||||||
|
import org.thingsboard.server.msa.DisableUIListeners;
|
||||||
import org.thingsboard.server.msa.WsClient;
|
import org.thingsboard.server.msa.WsClient;
|
||||||
import org.thingsboard.server.msa.mapper.WsTelemetryResponse;
|
import org.thingsboard.server.msa.mapper.WsTelemetryResponse;
|
||||||
|
|
||||||
@ -66,6 +67,7 @@ import static org.thingsboard.server.common.data.DataConstants.DEVICE;
|
|||||||
import static org.thingsboard.server.common.data.DataConstants.SHARED_SCOPE;
|
import static org.thingsboard.server.common.data.DataConstants.SHARED_SCOPE;
|
||||||
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultGatewayPrototype;
|
import static org.thingsboard.server.msa.prototypes.DevicePrototypes.defaultGatewayPrototype;
|
||||||
|
|
||||||
|
@DisableUIListeners
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class MqttGatewayClientTest extends AbstractContainerTest {
|
public class MqttGatewayClientTest extends AbstractContainerTest {
|
||||||
private Device gatewayDevice;
|
private Device gatewayDevice;
|
||||||
|
|||||||
@ -34,14 +34,11 @@ import org.openqa.selenium.support.ui.ExpectedConditions;
|
|||||||
import org.openqa.selenium.support.ui.WebDriverWait;
|
import org.openqa.selenium.support.ui.WebDriverWait;
|
||||||
import org.testng.annotations.AfterMethod;
|
import org.testng.annotations.AfterMethod;
|
||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.BeforeSuite;
|
|
||||||
import org.testng.annotations.Listeners;
|
|
||||||
import org.thingsboard.server.common.data.Customer;
|
import org.thingsboard.server.common.data.Customer;
|
||||||
import org.thingsboard.server.common.data.page.PageLink;
|
import org.thingsboard.server.common.data.page.PageLink;
|
||||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||||
import org.thingsboard.server.msa.AbstractContainerTest;
|
import org.thingsboard.server.msa.AbstractContainerTest;
|
||||||
import org.thingsboard.server.msa.ContainerTestSuite;
|
import org.thingsboard.server.msa.ContainerTestSuite;
|
||||||
import org.thingsboard.server.msa.ui.listeners.TestListener;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -51,7 +48,6 @@ import java.util.stream.Collectors;
|
|||||||
import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl;
|
import static org.thingsboard.server.msa.TestProperties.getBaseUiUrl;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Listeners(TestListener.class)
|
|
||||||
abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
||||||
|
|
||||||
protected WebDriver driver;
|
protected WebDriver driver;
|
||||||
@ -65,7 +61,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
@BeforeMethod
|
@BeforeMethod
|
||||||
public void openBrowser() {
|
public void openBrowser() {
|
||||||
log.info("*----------------------* Setup driver *----------------------*");
|
log.info("===>>> Setup driver");
|
||||||
ChromeOptions options = new ChromeOptions();
|
ChromeOptions options = new ChromeOptions();
|
||||||
options.setAcceptInsecureCerts(true);
|
options.setAcceptInsecureCerts(true);
|
||||||
if (instance.isActive()) {
|
if (instance.isActive()) {
|
||||||
@ -81,7 +77,7 @@ abstract public class AbstractDriverBaseTest extends AbstractContainerTest {
|
|||||||
|
|
||||||
@AfterMethod
|
@AfterMethod
|
||||||
public void closeBrowser() {
|
public void closeBrowser() {
|
||||||
log.info("*----------------------* Teardown *----------------------*");
|
log.info("<<<=== Teardown");
|
||||||
driver.quit();
|
driver.quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,6 +17,8 @@ package org.thingsboard.server.msa.ui.listeners;
|
|||||||
|
|
||||||
import org.testng.IRetryAnalyzer;
|
import org.testng.IRetryAnalyzer;
|
||||||
import org.testng.ITestResult;
|
import org.testng.ITestResult;
|
||||||
|
import org.testng.internal.ConstructorOrMethod;
|
||||||
|
import org.thingsboard.server.msa.DisableUIListeners;
|
||||||
|
|
||||||
public class RetryAnalyzer implements IRetryAnalyzer {
|
public class RetryAnalyzer implements IRetryAnalyzer {
|
||||||
|
|
||||||
@ -25,6 +27,11 @@ public class RetryAnalyzer implements IRetryAnalyzer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean retry(ITestResult result) {
|
public boolean retry(ITestResult result) {
|
||||||
|
ConstructorOrMethod consOrMethod = result.getMethod().getConstructorOrMethod();
|
||||||
|
DisableUIListeners disable = consOrMethod.getMethod().getDeclaringClass().getAnnotation(DisableUIListeners.class);
|
||||||
|
if (disable != null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (retryCount < MAX_RETRY_COUNT) {
|
if (retryCount < MAX_RETRY_COUNT) {
|
||||||
System.out.printf("Retrying test %s for the %d time(s).%n", result.getName(), retryCount + 1);
|
System.out.printf("Retrying test %s for the %d time(s).%n", result.getName(), retryCount + 1);
|
||||||
retryCount++;
|
retryCount++;
|
||||||
|
|||||||
@ -1,66 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright © 2016-2022 The Thingsboard Authors
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.thingsboard.server.msa.ui.listeners;
|
|
||||||
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
|
||||||
import org.openqa.selenium.WebDriver;
|
|
||||||
import org.testng.ITestContext;
|
|
||||||
import org.testng.ITestListener;
|
|
||||||
import org.testng.ITestResult;
|
|
||||||
import org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest;
|
|
||||||
|
|
||||||
import static org.thingsboard.server.msa.ui.base.AbstractDriverBaseTest.captureScreen;
|
|
||||||
|
|
||||||
@Slf4j
|
|
||||||
public class TestListener implements ITestListener {
|
|
||||||
|
|
||||||
WebDriver driver;
|
|
||||||
|
|
||||||
public void onTestSuccess(ITestResult tr) {
|
|
||||||
String str = "Test " + tr.getMethod().getMethodName() + " success";
|
|
||||||
log.info("*----------------------* " + str + " *----------------------*");
|
|
||||||
driver = ((AbstractDriverBaseTest) tr.getInstance()).getDriver();
|
|
||||||
captureScreen(driver, "success");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onTestFailure(ITestResult tr) {
|
|
||||||
String str = "Test " + tr.getMethod().getMethodName() + " failure";
|
|
||||||
String str1 = "Failed because of - " + tr.getThrowable();
|
|
||||||
log.info("*----------------------* " + str + " *----------------------*");
|
|
||||||
log.info("*----------------------* " + str1 + " *----------------------*");
|
|
||||||
driver = ((AbstractDriverBaseTest) tr.getInstance()).getDriver();
|
|
||||||
captureScreen(driver, "failure");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onTestSkipped(ITestResult tr) {
|
|
||||||
String str = "Test " + tr.getMethod().getMethodName() + " skipped";
|
|
||||||
String str1 = "Skipped because of - " + tr.getThrowable();
|
|
||||||
log.info("*----------------------* " + str + " *----------------------*");
|
|
||||||
log.info("*----------------------* " + str1 + " *----------------------*");
|
|
||||||
driver = ((AbstractDriverBaseTest) tr.getInstance()).getDriver();
|
|
||||||
captureScreen(driver, "skipped");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onStart(ITestContext testContext) {
|
|
||||||
String str = "Test " + testContext.getCurrentXmlTest().getName() + " start";
|
|
||||||
log.info("*----------------------* " + str + " *----------------------*");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onFinish(ITestContext testContext) {
|
|
||||||
String str = "Test " + testContext.getCurrentXmlTest().getName() + " finish";
|
|
||||||
log.info("*----------------------* " + str + " *----------------------*");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -19,8 +19,22 @@
|
|||||||
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
|
||||||
|
|
||||||
<suite name="All tests">
|
<suite name="All tests">
|
||||||
<suite-files>
|
<listeners>
|
||||||
<suite-file path="connectivity.xml"/>
|
<listener class-name="org.thingsboard.server.msa.ui.listeners.RetryTestListener"/>
|
||||||
<suite-file path="uiTests.xml"/>
|
</listeners>
|
||||||
</suite-files>
|
<test verbose="2" name="Connectivity tests" preserve-order="false">
|
||||||
|
<packages>
|
||||||
|
<package name="org.thingsboard.server.msa.connectivity" />
|
||||||
|
</packages>
|
||||||
|
</test>
|
||||||
|
<test name="Smoke rule chains tests">
|
||||||
|
<packages>
|
||||||
|
<package name="org.thingsboard.server.msa.ui.tests.ruleChainsSmoke"/>
|
||||||
|
</packages>
|
||||||
|
</test>
|
||||||
|
<test name="Smoke customers tests">
|
||||||
|
<packages>
|
||||||
|
<package name="org.thingsboard.server.msa.ui.tests.customerSmoke"/>
|
||||||
|
</packages>
|
||||||
|
</test>
|
||||||
</suite>
|
</suite>
|
||||||
Loading…
x
Reference in New Issue
Block a user