This is an automated email from the ASF dual-hosted git repository.
zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new 4c31e19e11 [Improvement][E2E]e2e improve add workflow httpTask e2e
case (#15420)
4c31e19e11 is described below
commit 4c31e19e110ab198dbe666718c6db151a43a0852
Author: lizhenglei <[email protected]>
AuthorDate: Fri Jan 5 12:11:00 2024 +0800
[Improvement][E2E]e2e improve add workflow httpTask e2e case (#15420)
* e2e case
* Create local.yml
* local
* fix
* fix
* fix blank
---------
Co-authored-by: 80597928 <[email protected]>
Co-authored-by: xiangzihao <[email protected]>
---
.github/workflows/e2e.yml | 2 +
.../e2e/cases/WorkflowHttpTaskE2ETest.java | 168 +++++++++++++++++++++
.../e2e/pages/common/HttpInput.java | 58 +++++++
.../e2e/pages/project/workflow/WorkflowForm.java | 4 +
.../pages/project/workflow/task/HttpTaskForm.java | 43 ++++++
.../docker/workflow-http/docker-compose.yaml | 54 +++++++
.../docker/workflow-http/mockserver-config.json | 22 +++
.../task/components/node/fields/use-http.ts | 1 +
8 files changed, 352 insertions(+)
diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index 13c878dee7..329af9f441 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -106,6 +106,8 @@ jobs:
class: org.apache.dolphinscheduler.e2e.cases.TokenE2ETest
- name: Workflow
class: org.apache.dolphinscheduler.e2e.cases.WorkflowE2ETest
+ - name: WorkflowHttp
+ class:
org.apache.dolphinscheduler.e2e.cases.WorkflowHttpTaskE2ETest
# - name: WorkflowForSwitch
# class: org.apache.dolphinscheduler.e2e.cases.WorkflowSwitchE2ETest
- name: FileManage
diff --git
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/WorkflowHttpTaskE2ETest.java
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/WorkflowHttpTaskE2ETest.java
new file mode 100644
index 0000000000..0993e61b81
--- /dev/null
+++
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/cases/WorkflowHttpTaskE2ETest.java
@@ -0,0 +1,168 @@
+/*
+ * Licensed to Apache Software Foundation (ASF) under one or more contributor
+ * license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright
+ * ownership. Apache Software Foundation (ASF) licenses this file to you 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.apache.dolphinscheduler.e2e.cases;
+
+import org.apache.dolphinscheduler.e2e.core.DolphinScheduler;
+import org.apache.dolphinscheduler.e2e.pages.LoginPage;
+import org.apache.dolphinscheduler.e2e.pages.common.NavBarPage;
+import org.apache.dolphinscheduler.e2e.pages.project.ProjectDetailPage;
+import org.apache.dolphinscheduler.e2e.pages.project.ProjectPage;
+import
org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowDefinitionTab;
+import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
+import
org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowInstanceTab;
+import
org.apache.dolphinscheduler.e2e.pages.project.workflow.task.HttpTaskForm;
+import org.apache.dolphinscheduler.e2e.pages.security.SecurityPage;
+import org.apache.dolphinscheduler.e2e.pages.security.TenantPage;
+import org.apache.dolphinscheduler.e2e.pages.security.UserPage;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.openqa.selenium.By;
+import org.openqa.selenium.remote.RemoteWebDriver;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+import org.testcontainers.shaded.org.awaitility.Awaitility;
+
+import java.time.Duration;
+
+import static org.assertj.core.api.Assertions.assertThat;
+@DolphinScheduler(composeFiles = "docker/workflow-http/docker-compose.yaml")
+public class WorkflowHttpTaskE2ETest {
+
+
+ private static final String project = "test-workflow-1";
+
+ private static final String workflow = "test-workflow-1";
+
+ private static final String user = "admin";
+
+ private static final String password = "dolphinscheduler123";
+
+ private static final String email = "[email protected]";
+
+ private static final String phone = "15800000000";
+
+ private static final String tenant = System.getProperty("user.name");
+
+ private static final String mockServerUrl = "http://mockServer:1080/test";
+
+ private static RemoteWebDriver browser;
+
+ @BeforeAll
+ public static void setup() {
+ UserPage userPage = new LoginPage(browser)
+ .login("admin", "dolphinscheduler123")
+ .goToNav(SecurityPage.class)
+ .goToTab(TenantPage.class)
+ .create(tenant)
+ .goToNav(SecurityPage.class)
+ .goToTab(UserPage.class);
+
+ new WebDriverWait(userPage.driver(),
Duration.ofSeconds(20)).until(ExpectedConditions.visibilityOfElementLocated(
+ new By.ByClassName("name")));
+
+ userPage.update(user, user, email, phone, tenant)
+ .goToNav(ProjectPage.class)
+ .create(project)
+ ;
+ }
+
+ @AfterAll
+ public static void cleanup() {
+ new NavBarPage(browser)
+ .goToNav(ProjectPage.class)
+ .goTo(project)
+ .goToTab(WorkflowDefinitionTab.class)
+ .delete(workflow);
+
+ new NavBarPage(browser)
+ .goToNav(ProjectPage.class)
+ .delete(project);
+
+ browser.navigate().refresh();
+
+ new NavBarPage(browser)
+ .goToNav(SecurityPage.class)
+ .goToTab(TenantPage.class)
+ .delete(tenant);
+ }
+
+ @Test
+ @Order(1)
+ void testCreateWorkflow() {
+ WorkflowDefinitionTab workflowDefinitionPage =
+ new ProjectPage(browser)
+ .goTo(project)
+ .goToTab(WorkflowDefinitionTab.class);
+
+ workflowDefinitionPage
+ .createWorkflow()
+ .<HttpTaskForm> addTask(WorkflowForm.TaskType.HTTP)
+ .url(mockServerUrl)
+ .name("test-1")
+ .addParam("today", "${system.datetime}")
+ .submit()
+
+ .submit()
+ .name(workflow)
+ .addGlobalParam("global_param", "hello world")
+ .submit()
+ ;
+
+ Awaitility.await().untilAsserted(() ->
assertThat(workflowDefinitionPage.workflowList())
+ .as("Workflow list should contain newly-created workflow")
+ .anyMatch(
+ it -> it.getText().contains(workflow)
+ ));
+ workflowDefinitionPage.publish(workflow);
+ }
+
+
+ @Test
+ @Order(30)
+ void testRunWorkflow() {
+ final ProjectDetailPage projectPage =
+ new ProjectPage(browser)
+ .goToNav(ProjectPage.class)
+ .goTo(project);
+
+ projectPage
+ .goToTab(WorkflowInstanceTab.class)
+ .deleteAll();
+ projectPage
+ .goToTab(WorkflowDefinitionTab.class)
+ .run(workflow)
+ .submit();
+
+ Awaitility.await().untilAsserted(() -> {
+ browser.navigate().refresh();
+
+ final WorkflowInstanceTab.Row row = projectPage
+ .goToTab(WorkflowInstanceTab.class)
+ .instances()
+ .iterator()
+ .next();
+
+ assertThat(row.isSuccess()).isTrue();
+ assertThat(row.executionTime()).isEqualTo(1);
+ });
+ }
+}
diff --git
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/common/HttpInput.java
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/common/HttpInput.java
new file mode 100644
index 0000000000..ce3f07c819
--- /dev/null
+++
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/common/HttpInput.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.dolphinscheduler.e2e.pages.common;
+
+import lombok.Getter;
+import org.openqa.selenium.WebDriver;
+import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.FindBy;
+import org.openqa.selenium.support.FindBys;
+import org.openqa.selenium.support.PageFactory;
+import org.openqa.selenium.support.ui.ExpectedConditions;
+import org.openqa.selenium.support.ui.WebDriverWait;
+
+import java.time.Duration;
+
+@Getter
+public class HttpInput {
+ @FindBys({
+ @FindBy(className = "input-url-name"),
+ @FindBy(tagName = "input")
+ })
+ private WebElement urlInput;
+
+ private WebDriver driver;
+
+
+
+ public HttpInput(WebDriver driver) {
+ PageFactory.initElements(driver, this);
+ this.driver = driver;
+ }
+
+ public HttpInput content(String content) {
+ new WebDriverWait(this.driver,
Duration.ofSeconds(20)).until(ExpectedConditions.elementToBeClickable(urlInput));
+ urlInput().sendKeys(content);
+ return this;
+ }
+
+}
diff --git
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/WorkflowForm.java
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/WorkflowForm.java
index 772cb69dea..c04df11233 100644
---
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/WorkflowForm.java
+++
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/WorkflowForm.java
@@ -19,6 +19,7 @@
*/
package org.apache.dolphinscheduler.e2e.pages.project.workflow;
+import
org.apache.dolphinscheduler.e2e.pages.project.workflow.task.HttpTaskForm;
import
org.apache.dolphinscheduler.e2e.pages.project.workflow.task.ShellTaskForm;
import
org.apache.dolphinscheduler.e2e.pages.project.workflow.task.SubWorkflowTaskForm;
@@ -82,6 +83,8 @@ public final class WorkflowForm {
return (T) new SubWorkflowTaskForm(this);
case SWITCH:
return (T) new SwitchTaskForm(this);
+ case HTTP:
+ return (T) new HttpTaskForm(this);
}
throw new UnsupportedOperationException("Unknown task type");
}
@@ -117,5 +120,6 @@ public final class WorkflowForm {
SHELL,
SUB_PROCESS,
SWITCH,
+ HTTP,
}
}
diff --git
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/task/HttpTaskForm.java
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/task/HttpTaskForm.java
new file mode 100644
index 0000000000..5869c6de9c
--- /dev/null
+++
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/java/org/apache/dolphinscheduler/e2e/pages/project/workflow/task/HttpTaskForm.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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.apache.dolphinscheduler.e2e.pages.project.workflow.task;
+
+import org.apache.dolphinscheduler.e2e.pages.common.HttpInput;
+import org.apache.dolphinscheduler.e2e.pages.project.workflow.WorkflowForm;
+import org.openqa.selenium.WebDriver;
+
+public class HttpTaskForm extends TaskNodeForm{
+ private WebDriver driver;
+
+ private HttpInput httpInput;
+
+
+ public HttpTaskForm(WorkflowForm parent) {
+ super(parent);
+ this.httpInput = new HttpInput(parent.driver());
+ this.driver = parent.driver();
+ }
+
+ public HttpTaskForm url(String script) {
+ httpInput.content(script);
+ return this;
+ }
+}
diff --git
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
new file mode 100644
index 0000000000..2591e3d74a
--- /dev/null
+++
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/docker-compose.yaml
@@ -0,0 +1,54 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+#
+
+version: "3.8"
+
+services:
+ dolphinscheduler:
+ image: apache/dolphinscheduler-standalone-server:ci
+ environment:
+ MASTER_MAX_CPU_LOAD_AVG: 400
+ MASTER_RESERVED_MEMORY: 0.01
+ WORKER_TENANT_AUTO_CREATE: 'true'
+ ports:
+ - "12345:12345"
+ networks:
+ - e2e
+ healthcheck:
+ test: [ "CMD", "curl", "http://localhost:12345/actuator/health" ]
+ interval: 5s
+ timeout: 5s
+ retries: 120
+ mockServer:
+ image: mockserver/mockserver:5.14.0
+ environment:
+ MOCKSERVER_INITIALIZATION_JSON_PATH: /config/mockserver-config.json
+ ports:
+ - "1080:1080"
+ networks:
+ - e2e
+ volumes:
+ - type: bind
+ source: ./
+ target: /config
+ healthcheck:
+ test: [ "CMD", "curl", "http://localhost:1080/" ]
+ interval: 5s
+ timeout: 5s
+ retries: 120
+networks:
+ e2e:
diff --git
a/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/mockserver-config.json
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/mockserver-config.json
new file mode 100644
index 0000000000..589dc86bae
--- /dev/null
+++
b/dolphinscheduler-e2e/dolphinscheduler-e2e-case/src/test/resources/docker/workflow-http/mockserver-config.json
@@ -0,0 +1,22 @@
+
+[{
+ "httpRequest": {
+ "path": "/test",
+ "method": "GET"
+ },
+ "httpResponse": {
+ "body": [
+ {
+ "name": "lzl",
+ "age": 18
+ },
+ {
+ "name": "pizz2",
+ "age": 19
+ }
+ ],
+ "headers": {
+ "Content-Type": "application/json"
+ }
+ }
+}]
diff --git
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-http.ts
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-http.ts
index 9e3a9af921..8fd7c00cb5 100644
---
a/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-http.ts
+++
b/dolphinscheduler-ui/src/views/projects/task/components/node/fields/use-http.ts
@@ -43,6 +43,7 @@ export function useHttp(model: { [field: string]: any }):
IJsonItem[] {
return [
{
type: 'input',
+ class: 'input-url-name',
field: 'url',
name: t('project.node.http_url'),
props: {