分布式调度框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
qianli2022 151100562f
[Feature][api] Task can run on kubernetes - k8s client and namespace #8247 (#8252)
3 years ago
..
dolphinscheduler-e2e-case [Feature][api] Task can run on kubernetes - k8s client and namespace #8247 (#8252) 3 years ago
dolphinscheduler-e2e-core [Improvement][E2E] use testcontainers host (#8224) 3 years ago
README.md Unify the element selector rules for E2E (#7409) 3 years ago
lombok.config Add end-to-end test framework and some basic cases (#6419) 3 years ago
pom.xml [E2E] Clean up the E2E with Java API to avoid platform sensitive (#8197) 3 years ago

README.md

DolphinScheduler End-to-End Test

Page Object Model

DolphinScheduler End-to-End test respects the Page Object Model (POM) design pattern. Every page of DolphinScheduler is abstracted into a class for better maintainability.

Example

The login page is abstracted as LoginPage, with the following fields,

public final class LoginPage {
    @FindBy(id = "inputUsername")
    private WebElement inputUsername;

    @FindBy(id = "inputPassword")
    private WebElement inputPassword;

    @FindBy(id = "btnLogin")
    private WebElement buttonLogin;
}

where inputUsername, inputPassword and buttonLogin are the main elements on UI that we are interested in. They are annotated with FindBy so that the test framework knows how to locate the elements on UI. You can locate the elements by id, className, css selector, tagName, or even xpath, please refer to the JavaDoc.

Note: for better maintainability, it's essential to add some convenient id or class on UI for the wanted elements if needed, avoid using too complex xpath selector or css selector that is not maintainable when UI have styles changes.

With those fields declared, we should also initialize them with a web driver. Here we pass the web driver into the constructor and invoke PageFactory.initElements to initialize those fields,

public final class LoginPage {
    // ...
    public LoginPage(RemoteWebDriver driver) {
        this.driver = driver;

        PageFactory.initElements(driver, this);
    }
}

then, all those UI elements are properly filled in.

Test Environment Setup

DolphinScheduler End-to-End test uses testcontainers to set up the testing environment, with docker compose.

Typically, every test case needs one or more docker-compose.yaml files to set up all needed components, and expose the DolphinScheduler UI port for testing. You can use @DolphinScheduler(composeFiles = "") and pass the docker-compose.yaml files to automatically set up the environment in the test class.


@DolphinScheduler(composeFiles = "docker/tenant/docker-compose.yaml")
class TenantE2ETest {
}

You can get the web driver that is ready for testing in the class by adding a field of type RemoteWebDriver, which will be automatically injected via the testing framework.


@DolphinScheduler(composeFiles = "docker/tenant/docker-compose.yaml")
class TenantE2ETest {
    private RemoteWebDriver browser;
}

Then the field browser can be used in the test methods.


@DolphinScheduler(composeFiles = "docker/tenant/docker-compose.yaml")
class TenantE2ETest {
    private RemoteWebDriver browser;

    @Test
    void testLogin() {
        final LoginPage page = new LoginPage(browser); // <<-- use the browser injected
    }
}

Notes

  • For UI tests, it's common that the pages might need some time to load, or the operations might need some time to complete, we can use await().untilAsserted(() -> {}) to wait for the assertions.