This is an automated email from the ASF dual-hosted git repository.

liuxiaochun pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/incubator-dolphinscheduler.git


The following commit(s) were added to refs/heads/dev by this push:
     new c82758c  e2e add the case of deleting user and tenant   (#2210)
c82758c is described below

commit c82758c5054e0c8af8f2c9ef73d1af8653e2444f
Author: xingchun-chen <[email protected]>
AuthorDate: Tue Mar 17 17:57:12 2020 +0800

    e2e add the case of deleting user and tenant   (#2210)
    
    * add e2e
---
 .../apache/dolphinscheduler/base/BaseDriver.java   |  8 +-
 .../org/apache/dolphinscheduler/base/BaseTest.java | 17 ++---
 .../apache/dolphinscheduler/data/LoginData.java    |  2 +-
 .../data/project/CreatWorkflowData.java            |  2 +-
 ...reatProjectData.java => CreateProjectData.java} |  4 +-
 ...atWorkflowData.java => CreateWorkflowData.java} | 31 +++++++-
 .../data/security/TenantManageData.java            | 10 +--
 .../data/security/UserManageData.java              |  5 +-
 .../locator/project/CreateWorkflowLocator.java     | 69 +++++++++++++++--
 .../locator/security/TenantManageLocator.java      |  8 +-
 .../locator/security/UserManageLocator.java        |  3 +
 .../apache/dolphinscheduler/page/LoginPage.java    | 14 +++-
 .../page/project/CreateProjectPage.java            | 11 +--
 .../page/project/CreateWorkflowPage.java           | 89 +++++++++++++++++-----
 .../page/security/TenantManagePage.java            | 26 ++++---
 .../page/security/UserManagePage.java              | 25 ++++--
 .../dolphinscheduler/testcase/LoginTest.java       | 35 +++------
 .../DeleteTenantTest.java}                         | 17 +++--
 .../DeleteUserTest.java}                           | 16 ++--
 .../testcase/project/CreateProjectTest.java        |  7 +-
 .../testcase/project/CreateWorkflowTest.java       | 10 ++-
 .../testcase/security/TenantManageTest.java        | 11 ++-
 .../testcase/security/UserManageTest.java          |  8 +-
 e2e/suite.xml                                      | 18 -----
 e2e/testng.xml                                     | 28 ++++---
 25 files changed, 317 insertions(+), 157 deletions(-)

diff --git a/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java 
b/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java
index 7d3ab9b..044e28f 100644
--- a/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java
+++ b/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseDriver.java
@@ -19,6 +19,7 @@ package org.apache.dolphinscheduler.base;
 
 import org.apache.dolphinscheduler.constant.TestConstant;
 import org.apache.dolphinscheduler.util.PropertiesReader;
+import org.openqa.selenium.Cookie;
 import org.openqa.selenium.JavascriptExecutor;
 import org.openqa.selenium.WebDriver;
 import org.openqa.selenium.chrome.ChromeDriver;
@@ -35,7 +36,7 @@ public class BaseDriver {
     /**
      * driver
      */
-    private WebDriver driver;
+    private static WebDriver driver;
 
     /**
      * chrome driver path
@@ -88,6 +89,7 @@ public class BaseDriver {
         chromeOptions.setPageLoadStrategy(PageLoadStrategy.NONE);
         chromeOptions.addArguments("--no-sandbox");
         chromeOptions.addArguments("--disable-dev-shm-usage");
+        //Browser client running requires annotation --headless
         chromeOptions.addArguments("--headless");
         chromeOptions.addArguments("--disable-gpu");
         chromeOptions.addArguments("--whitelisted-ips");
@@ -120,7 +122,7 @@ public class BaseDriver {
      *
      * @return driver
      */
-    public WebDriver getDriver() {
+    public static WebDriver getDriver() {
         return driver;
     }
 
@@ -141,7 +143,7 @@ public class BaseDriver {
     public void closeBrowser() throws InterruptedException {
         // JS Show a pop-up box to indicate the end of the test
         Thread.sleep(TestConstant.ONE_THOUSANG);
-        ((JavascriptExecutor) driver).executeScript("alert('Test completed, 
browser closes after 3s')");
+//        ((JavascriptExecutor) driver).executeScript("alert('Test completed, 
browser closes after 3s')");
         Thread.sleep(TestConstant.THREE_THOUSANG);
         if (driver != null) {
             driver.quit();
diff --git a/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseTest.java 
b/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseTest.java
index c12c19f..88012e9 100644
--- a/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseTest.java
+++ b/e2e/src/test/java/org/apache/dolphinscheduler/base/BaseTest.java
@@ -17,7 +17,6 @@
 package org.apache.dolphinscheduler.base;
 
 
-import org.apache.dolphinscheduler.page.LoginPage;
 import org.apache.dolphinscheduler.util.PropertiesReader;
 import org.openqa.selenium.WebDriver;
 import org.testng.annotations.*;
@@ -28,6 +27,7 @@ import java.util.Properties;
 /**
  *  base test class
  */
+@Test(groups={"functionTests"})
 public class BaseTest {
     /**
      * properties
@@ -43,7 +43,7 @@ public class BaseTest {
     /**
      * driver
      */
-    public WebDriver driver;
+    public static WebDriver driver;
 
     /**
      * Executed before executing a test suite 
@@ -54,7 +54,7 @@ public class BaseTest {
      */
     @BeforeSuite(alwaysRun = true)
     @Parameters({"propertiesPath"})
-    public void 
beforeSuite(@Optional("src/test/resources/config/config.properties") String 
propertiesPath) throws IOException {
+    public void 
beforeSuite(@Optional("src/test/resources/config/config.properties") String 
propertiesPath) throws Exception {
         // read properties
         properties = PropertiesReader.readProperties(propertiesPath);
     }
@@ -70,14 +70,13 @@ public class BaseTest {
         driver = baseDriver.getDriver();
     }
 
+
+
     /**
      * Executed before executing a class method in a test case
      */
     @BeforeClass(alwaysRun = true)
-    public void setUp() throws IOException, InterruptedException {
-        LoginPage loginPage = new LoginPage(driver);
-        loginPage.jumpPage();
-        loginPage.login();
+    public void setUp() throws Exception {
     }
 
 
@@ -85,7 +84,7 @@ public class BaseTest {
      * Execute after executing a class method in a test case
      */
     @AfterClass(alwaysRun = true)
-    public void afterClass() {
+    public void afterClass() throws InterruptedException {
         // logout
     }
 
@@ -102,6 +101,6 @@ public class BaseTest {
      * Execute after executing a testsuite
      */
     @AfterSuite(alwaysRun = true)
-    public void afterSuite() {
+    public void afterSuite() throws InterruptedException {
     }
 }
\ No newline at end of file
diff --git a/e2e/src/test/java/org/apache/dolphinscheduler/data/LoginData.java 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/LoginData.java
index 5328495..e56df5a 100644
--- a/e2e/src/test/java/org/apache/dolphinscheduler/data/LoginData.java
+++ b/e2e/src/test/java/org/apache/dolphinscheduler/data/LoginData.java
@@ -39,5 +39,5 @@ public class LoginData {
      */
     public static final String PASSWORD = PropertiesReader.getKey("PASSWORD");
 
-    public static final String TENANT = "Tenant Manage - DolphinScheduler";
+    public static final String TENANT = "租户管理 - DolphinScheduler";
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
index 765a54f..70f4238 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
@@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.data.project;
 
 public class CreatWorkflowData {
     //input shell task name
-    public static final String SHELL_TASK_NAME = "shell task description test";
+    public static final String SHELL_TASK_NAME = "shell task description 
test1";
 
     //input shell task description
     public static final String SHELL_TASK_DESCRIPTION = "shell task 
description test";
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatProjectData.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreateProjectData.java
similarity index 91%
rename from 
e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatProjectData.java
rename to 
e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreateProjectData.java
index 8f6c9c8..57d79e8 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatProjectData.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreateProjectData.java
@@ -16,9 +16,9 @@
  */
 package org.apache.dolphinscheduler.data.project;
 
-public class CreatProjectData {
+public class CreateProjectData {
     // create project name
-    public static final String PROJECT_NAME = "selenium_project";
+    public static final String PROJECT_NAME = "selenium_project_3";
     // create project description
     public static final String DESCRIPTION = "test create project description";
     // project page title
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreateWorkflowData.java
similarity index 61%
copy from 
e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
copy to 
e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreateWorkflowData.java
index 765a54f..31b5bdd 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreatWorkflowData.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/project/CreateWorkflowData.java
@@ -16,9 +16,12 @@
  */
 package org.apache.dolphinscheduler.data.project;
 
-public class CreatWorkflowData {
+public class CreateWorkflowData {
+    /**
+     * create workflow data
+     */
     //input shell task name
-    public static final String SHELL_TASK_NAME = "shell task description test";
+    public static final String SHELL_TASK_NAME = "shell_task_selenium_5";
 
     //input shell task description
     public static final String SHELL_TASK_DESCRIPTION = "shell task 
description test";
@@ -43,4 +46,28 @@ public class CreatWorkflowData {
 
     //create workflow title
     public static final String WORKFLOW_TITLE = "创建流程定义 - DolphinScheduler";
+
+    /**
+     * save workflow data
+     */
+    //input  workflow name
+    public static final String INPUT_WORKFLOW_NAME = "selenium_shell_1";
+
+    //input  workflow description
+    public static final String INPUT_WORKFLOW_DESCRIPTION = "test 
selenium_shell_1 description";
+
+    //input workflow timeout
+    public static final String INPUT_WORKFLOW_TIMEOUT = "30";
+
+    //input workflow  global parameters
+    public static final String INPUT_WORKFLOW_GLOBAL_PARAMETERS = 
"selenium_global_parameters_1";
+
+    //input workflow  global parameters value
+    public static final String INPUT_WORKFLOW_GLOBAL_PARAMETERS_VALUES = 
"selenium_global_parameters_value_1";
+
+    //input to  add workflow  global parameters
+    public static final String INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS = 
"selenium_global_parameters_2";
+
+    //input to add workflow  global parameters value
+    public static final String INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS_VALUES = 
"selenium_global_parameters_value_2";
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/security/TenantManageData.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/security/TenantManageData.java
index e6f6ee6..100351b 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/security/TenantManageData.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/security/TenantManageData.java
@@ -20,18 +20,12 @@
  */
 package org.apache.dolphinscheduler.data.security;
 
-import org.apache.dolphinscheduler.data.LoginData;
 
 public class TenantManageData {
     /**
-     * Tenant URL
-     */
-    public static final String TENANAT_URL =  LoginData.URL + 
"/ui/#/security/tenant";
-
-    /**
      * Tenant Code
      */
-    public static final String TENANAT_CODE = "dolphinscheduler_tenant_code2";
+    public static final String TENANAT_CODE = "dolphinscheduler_tenant_code15";
 
     /**
      * Tenant Name
@@ -48,7 +42,7 @@ public class TenantManageData {
      */
     public static final String DESCRIPTION = "creat tenant test";
 
-    public static final String TENANAT_MANAGE = "Tenant Manage - 
DolphinScheduler";
+    public static final String TENANAT_MANAGE = "租户管理 - DolphinScheduler";
 
 
 
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/security/UserManageData.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/security/UserManageData.java
index 03c985f..6fcd923 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/data/security/UserManageData.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/data/security/UserManageData.java
@@ -16,12 +16,9 @@
  */
 package org.apache.dolphinscheduler.data.security;
 
-import org.apache.dolphinscheduler.data.LoginData;
 
 public class UserManageData  {
-    public static final String USER_URL = LoginData.URL + 
"/ui/#/security/users";
-
-    public static final String USERNAME = "selenium111";
+    public static final String USERNAME = "selenium_5";
 
     public static final String PASSWORD = "123456qwe";
 
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/locator/project/CreateWorkflowLocator.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/locator/project/CreateWorkflowLocator.java
index f063d6e..25defcf 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/locator/project/CreateWorkflowLocator.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/locator/project/CreateWorkflowLocator.java
@@ -20,12 +20,20 @@ package org.apache.dolphinscheduler.locator.project;
 import org.openqa.selenium.By;
 
 public class CreateWorkflowLocator {
+
+    /**
+     * jump workflow define page
+     */
+
     // click project name
     public static final By CLICK_PROJECT_NAME = By.xpath("//span/a");
 
     // click workflow define
     public static final By CLICK_WORKFLOW_DEFINE = By.xpath("//li/span");
 
+    /**
+     * create workflow
+     */
     // click create workflow button
     public static final By CLICK_CREATE_WORKFLOW_BUTTON = 
By.xpath("//button/span");
 
@@ -96,15 +104,15 @@ public class CreateWorkflowLocator {
     public static final By INPUT_CUSTOM_PARAMETERS = 
By.xpath("//div[2]/div/div/div/div/div/input");
 
     //input custom parameters value
-    public static final By INPUT_CUSTOM_PARAMETERS_VALUE = 
By.xpath("//div[2]/input");
+    public static final By INPUT_CUSTOM_PARAMETERS_VALUE = 
By.xpath("//div[2]/div/div/div/div[1]/div[2]/input");
 
-    //click add custom parameters
-    public static final By CLICK_ADD_CUSTOM_PARAMETERS = 
By.xpath("//span[2]/a/em");
+    //click to add custom parameters
+    public static final By CLICK_ADD_CUSTOM_PARAMETERS = 
By.xpath("//div[2]/div/div/div/div/span[2]/a/em");
 
-    //input add custom parameters
-    public static final By INPUT_ADD_CUSTOM_PARAMETERS = 
By.xpath("//div[2]/div/div/div/div[2]/div/input");
+    //input to add custom parameters
+    public static final By INPUT_ADD_CUSTOM_PARAMETERS = 
By.xpath("//div[2]/div/div/div/div[2]/div[1]/input");
 
-    //input add custom parameters value
+    //input to add custom parameters value
     public static final By INPUT_ADD_CUSTOM_PARAMETERS_VALUE = 
By.xpath("//div[2]/div[2]/input");
 
     //delete custom parameters
@@ -112,4 +120,53 @@ public class CreateWorkflowLocator {
 
     //click submit button
     public static final By CLICK_SUBMIT_BUTTON = By.xpath("//button[2]/span");
+
+
+    /**
+     * save workflow
+     */
+    //click save workflow button
+    public static final By CLICK_SAVE_WORKFLOW_BUTTON = 
By.xpath("//button/span");
+
+    //input  workflow name
+    public static final By INPUT_WORKFLOW_NAME = By.xpath("//input");
+
+    //input  workflow description
+    public static final By INPUT_WORKFLOW_DESCRIPTION = By.xpath("//textarea");
+
+    //select tenant
+    public static final By CLICK_TENANT = 
By.xpath("//div[4]/div/div/div/input");
+    public static final By SELECT_TENANT = 
By.xpath("//div[2]/div/div/div/ul/li/span");
+
+
+    //click workflow timeout alarm
+    public static final By CLICK_WORKFLOW_TIMEOUT_ALARM = 
By.xpath("//span[2]/span/span");
+
+    //input workflow timeout
+    public static final By INPUT_WORKFLOW_TIMEOUT = 
By.xpath("//span/div/input");
+
+    //click workflow  global parameters
+    public static final By CLICK_WORKFLOW_GLOBAL_PARAMETERS = 
By.xpath("//span/a/em");
+
+    //input workflow  global parameters
+    public static final By INPUT_WORKFLOW_GLOBAL_PARAMETERS = 
By.xpath("//div[8]/div/div/div/div/input");
+
+    //input workflow  global parameters value
+    public static final By INPUT_WORKFLOW_GLOBAL_PARAMETERS_VALUES = 
By.xpath("//div[2]/input");
+
+    //click to add workflow  global parameters
+    public static final By CLICK_ADD_WORKFLOW_GLOBAL_PARAMETERS = 
By.xpath("//span[2]/a/em");
+
+    //input to  add workflow  global parameters
+    public static final By INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS = 
By.xpath("//div[8]/div/div/div[2]/div/input");
+
+    //input to add workflow  global parameters value
+    public static final By INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS_VALUES = 
By.xpath("//div[2]/div[2]/input");
+
+    //delete workflow  global parameters value
+    public static final By CLICK_DELETE_WORKFLOW_GLOBAL_PARAMETERS = 
By.xpath("//div[2]/span/a/em");
+
+    //click add button
+    public static final By CLICK_ADD_BUTTON = By.xpath("//button[2]/span");
+
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/TenantManageLocator.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/TenantManageLocator.java
index 7d9c8a5..d95265c 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/TenantManageLocator.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/TenantManageLocator.java
@@ -19,7 +19,9 @@ package org.apache.dolphinscheduler.locator.security;
 import org.openqa.selenium.By;
 
 public class TenantManageLocator{
-    public static final By CREATE_TENANT_BUTTON = 
By.xpath("//button[@class='ans-btn ans-btn-ghost ans-btn-small']");
+    public static final By TENANT_MANAGE = 
By.xpath("//div[2]/div/a/div/a/span");
+
+    public static final By CREATE_TENANT_BUTTON = By.xpath("//button/span");
 
     public static final By TENANT_INPUT_CODE = 
By.xpath("//div[2]/div/div/div[2]/div/input");
 
@@ -30,4 +32,8 @@ public class TenantManageLocator{
     public static final By DESCRIPTION = By.xpath("//textarea");
 
     public static final By SUBMIT_BUTTON = By.xpath("//div[3]/button[2]/span");
+
+    public static final By DELETE_TENANT_BUTTON = 
By.xpath("//div[3]/div[1]/div/table/tr[2]/td[8]/span/button");
+
+    public static final By CONFIRM_DELETE_TENANT_BUTTON = 
By.xpath("//div[2]/div/button[2]/span");
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/UserManageLocator.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/UserManageLocator.java
index 0d84692..b5ecccc 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/UserManageLocator.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/locator/security/UserManageLocator.java
@@ -42,4 +42,7 @@ public class UserManageLocator {
 
     public static final By SUBMIT = By.xpath("//div[3]/button[2]/span");
 
+    public static final By DELETE_USER_BUTTON = By.xpath("//span[2]/button/i");
+
+    public static final By CONFIRM_DELETE_USER_BUTTON = 
By.xpath("//div[2]/div/button[2]/span");
 }
diff --git a/e2e/src/test/java/org/apache/dolphinscheduler/page/LoginPage.java 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/LoginPage.java
index cd6b318..14970be 100644
--- a/e2e/src/test/java/org/apache/dolphinscheduler/page/LoginPage.java
+++ b/e2e/src/test/java/org/apache/dolphinscheduler/page/LoginPage.java
@@ -21,6 +21,7 @@ import org.apache.dolphinscheduler.constant.TestConstant;
 import org.apache.dolphinscheduler.data.LoginData;
 import org.apache.dolphinscheduler.locator.LoginLocator;
 import org.apache.dolphinscheduler.util.RedisUtil;
+import org.openqa.selenium.Cookie;
 import org.openqa.selenium.WebDriver;
 
 
@@ -38,18 +39,25 @@ public class LoginPage extends PageCommon {
     /**
      * jump page
      */
-    public void jumpPage() {
-        System.out.println("jump login page");
+    public void jumpPageEnlish() {
+        System.out.println("jump to English login page");
         super.jumpPage(LoginData.URL);
+        Cookie cookie = new Cookie("language", "en_US", "/", null);
+        driver.manage().addCookie(cookie);
     }
 
+    public void jumpPageChinese() {
+        super.jumpPage(LoginData.URL);
+        Cookie cookie = new Cookie("language", "zh_CN", "/", null);
+
+        driver.manage().addCookie(cookie);
+    }
     /**
      * login
      *
      * @return Whether to enter the specified page after searching
      */
     public boolean login() throws InterruptedException {
-        System.out.println("LoginPage");
         // login data
         sendInput(LoginLocator.LOGIN_INPUT_USER, LoginData.USER);
         sendInput(LoginLocator.LOGIN_INPUT_PASSWORD, LoginData.PASSWORD);
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateProjectPage.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateProjectPage.java
index 8dd1010..d8e1ef6 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateProjectPage.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateProjectPage.java
@@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.page.project;
 
 import org.apache.dolphinscheduler.common.PageCommon;
 import org.apache.dolphinscheduler.constant.TestConstant;
-import org.apache.dolphinscheduler.data.project.CreatProjectData;
+import org.apache.dolphinscheduler.data.project.CreateProjectData;
 import org.apache.dolphinscheduler.locator.project.CreateProjectLocator;
 import org.openqa.selenium.WebDriver;
 
@@ -26,6 +26,7 @@ public class CreateProjectPage extends PageCommon {
     public CreateProjectPage(WebDriver driver) {
         super(driver);
     }
+
     /**
      * jump page
      */
@@ -36,7 +37,7 @@ public class CreateProjectPage extends PageCommon {
     }
 
     /**
-     * creatTenant
+     * createTenant
      *
      * @return Whether to enter the specified page after creat tenant
      */
@@ -46,13 +47,13 @@ public class CreateProjectPage extends PageCommon {
         Thread.sleep(TestConstant.ONE_THOUSANG);
 
         // input create project data
-        sendInput(CreateProjectLocator.PROJECT_NAME, 
CreatProjectData.PROJECT_NAME);
-        sendInput(CreateProjectLocator.PROJECT_DESCRIPTION, 
CreatProjectData.DESCRIPTION);
+        sendInput(CreateProjectLocator.PROJECT_NAME, 
CreateProjectData.PROJECT_NAME);
+        sendInput(CreateProjectLocator.PROJECT_DESCRIPTION, 
CreateProjectData.DESCRIPTION);
 
         // click submit  button
         clickButton(CreateProjectLocator.SUBMIT_BUTTON);
 
         // Whether to enter the specified page after submit
-        return ifTitleContains(CreatProjectData.PROJECT_TITLE);
+        return ifTitleContains(CreateProjectData.PROJECT_TITLE);
     }
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateWorkflowPage.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateWorkflowPage.java
index aeec83c..d115124 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateWorkflowPage.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/project/CreateWorkflowPage.java
@@ -18,7 +18,7 @@ package org.apache.dolphinscheduler.page.project;
 
 import org.apache.dolphinscheduler.common.PageCommon;
 import org.apache.dolphinscheduler.constant.TestConstant;
-import org.apache.dolphinscheduler.data.project.CreatWorkflowData;
+import org.apache.dolphinscheduler.data.project.CreateWorkflowData;
 import org.apache.dolphinscheduler.locator.project.CreateWorkflowLocator;
 import org.openqa.selenium.WebDriver;
 
@@ -26,29 +26,33 @@ public class CreateWorkflowPage extends PageCommon {
     public CreateWorkflowPage(WebDriver driver) {
         super(driver);
     }
+
     /**
-     * jump page
+     * jump create workflow page
      */
-
     public boolean createWorkflow() throws InterruptedException {
+        System.out.println("Click on the project name to jump to the project 
homepage");
         // click project name
         clickElement(CreateWorkflowLocator.CLICK_PROJECT_NAME);
         Thread.sleep(TestConstant.ONE_THOUSANG);
 
 
+        System.out.println("Click on workflow define");
         // click workflow define
         clickElement(CreateWorkflowLocator.CLICK_WORKFLOW_DEFINE);
         Thread.sleep(TestConstant.ONE_THOUSANG);
 
+        System.out.println("Click create workflow button");
         // click create workflow button
         clickElement(CreateWorkflowLocator.CLICK_CREATE_WORKFLOW_BUTTON);
         Thread.sleep(TestConstant.ONE_THOUSANG);
 
+        System.out.println("drag shell task");
         //drag shell_task
         
dragAndDrop(CreateWorkflowLocator.MOUSE_DOWN_AT_SHELL,CreateWorkflowLocator.MOUSE_MOVE_SHELL_AT_DAG);
 
         //input shell task _name
-        sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_NAME , 
CreatWorkflowData.SHELL_TASK_NAME);
+        sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_NAME , 
CreateWorkflowData.SHELL_TASK_NAME);
 
         //click stop run type
         clickElement(CreateWorkflowLocator.CLICK_STOP_RUN_TYPE);
@@ -57,7 +61,7 @@ public class CreateWorkflowPage extends PageCommon {
         clickElement(CreateWorkflowLocator.CLICK_NORMAL_RUN_TYPE);
 
         //input shell task description
-        sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_DESCRIPTION , 
CreatWorkflowData.SHELL_TASK_DESCRIPTION);
+        sendInput(CreateWorkflowLocator.INPUT_SHELL_TASK_DESCRIPTION , 
CreateWorkflowData.SHELL_TASK_DESCRIPTION);
 
         //select task priority
         clickElement(CreateWorkflowLocator.CLICK_TASK_PRIORITY);
@@ -73,19 +77,15 @@ public class CreateWorkflowPage extends PageCommon {
         //select failed retry interval
         clickElement(CreateWorkflowLocator.SELECT_FAIL_RETRIES_INTERVAL);
 
-
         //click timeout alarm
         clickElement(CreateWorkflowLocator.CLICK_TIMEOUT_ALARM);
 
-
         //select timeout fail
         clickElement(CreateWorkflowLocator.SELECT_TIMEOUT_FAIL);
 
-
         //cancel timeout alarm
         clickElement(CreateWorkflowLocator.CANCEL_TIMEOUT_ALARM);
 
-
         //select timeout alarm
         clickElement(CreateWorkflowLocator.SELECT_TIMEOUT_ALARM);
 
@@ -94,10 +94,10 @@ public class CreateWorkflowPage extends PageCommon {
         clearInput(CreateWorkflowLocator.SELECT_TIMEOUT);
 
         //input timeout
-        
sendInput(CreateWorkflowLocator.SELECT_TIMEOUT,CreatWorkflowData.INPUT_TIMEOUT);
+        sendInput(CreateWorkflowLocator.SELECT_TIMEOUT, 
CreateWorkflowData.INPUT_TIMEOUT);
 
         //click codeMirror and input script
-        inputCodeMirror(CreateWorkflowLocator.CLICK_CODE_MIRROR, 
CreateWorkflowLocator.INPUT_SCRIPT,CreatWorkflowData.SHELL_SCRIPT);
+        inputCodeMirror(CreateWorkflowLocator.CLICK_CODE_MIRROR, 
CreateWorkflowLocator.INPUT_SCRIPT, CreateWorkflowData.SHELL_SCRIPT);
         scrollToElementBottom();
         Thread.sleep(TestConstant.ONE_THOUSANG);
 
@@ -105,10 +105,10 @@ public class CreateWorkflowPage extends PageCommon {
         clickElement(CreateWorkflowLocator.CLICK_CUSTOM_PARAMETERS);
 
         //input custom parameters
-        sendInput(CreateWorkflowLocator.INPUT_CUSTOM_PARAMETERS, 
CreatWorkflowData.INPUT_CUSTOM_PARAMETERS);
+        sendInput(CreateWorkflowLocator.INPUT_CUSTOM_PARAMETERS, 
CreateWorkflowData.INPUT_CUSTOM_PARAMETERS);
 
         //input custom parameters value
-        sendInput(CreateWorkflowLocator.INPUT_CUSTOM_PARAMETERS_VALUE, 
CreatWorkflowData.INPUT_CUSTOM_PARAMETERS_VALUE);
+        sendInput(CreateWorkflowLocator.INPUT_CUSTOM_PARAMETERS_VALUE, 
CreateWorkflowData.INPUT_CUSTOM_PARAMETERS_VALUE);
 
         //click add custom parameters
         clickElement(CreateWorkflowLocator.CLICK_ADD_CUSTOM_PARAMETERS);
@@ -117,10 +117,10 @@ public class CreateWorkflowPage extends PageCommon {
         Thread.sleep(TestConstant.ONE_THOUSANG);
 
         //input add custom parameters
-        
sendInput(CreateWorkflowLocator.INPUT_ADD_CUSTOM_PARAMETERS,CreatWorkflowData.INPUT_ADD_CUSTOM_PARAMETERS);
+        sendInput(CreateWorkflowLocator.INPUT_ADD_CUSTOM_PARAMETERS, 
CreateWorkflowData.INPUT_ADD_CUSTOM_PARAMETERS);
 
         //input add custom parameters value
-        
sendInput(CreateWorkflowLocator.INPUT_ADD_CUSTOM_PARAMETERS_VALUE,CreatWorkflowData.INPUT_ADD_CUSTOM_PARAMETERS_VALUE);
+        sendInput(CreateWorkflowLocator.INPUT_ADD_CUSTOM_PARAMETERS_VALUE, 
CreateWorkflowData.INPUT_ADD_CUSTOM_PARAMETERS_VALUE);
 
         //click delete custom parameters
         clickElement(CreateWorkflowLocator.CLICK_DELETE_CUSTOM_PARAMETERS);
@@ -129,9 +129,64 @@ public class CreateWorkflowPage extends PageCommon {
         //click submit button
         clickElement(CreateWorkflowLocator.CLICK_SUBMIT_BUTTON);
         Thread.sleep(TestConstant.ONE_THOUSANG);
-
+        System.out.println("Task node set up successfully");
+        System.out.println("move to Dag Element ");
         
moveToDragElement(CreateWorkflowLocator.MOUSE_MOVE_SHELL_AT_DAG,-300,-100);
 
-        return ifTitleContains(CreatWorkflowData.WORKFLOW_TITLE);
+        return ifTitleContains(CreateWorkflowData.WORKFLOW_TITLE);
+    }
+
+    /**
+     * save  workflow
+     */
+    public boolean saveWorkflow() throws InterruptedException {
+        System.out.println("start to save workflow ");
+
+        //click save workflow button
+        clickElement(CreateWorkflowLocator.CLICK_SAVE_WORKFLOW_BUTTON);
+
+        //input  workflow name
+        sendInput(CreateWorkflowLocator.INPUT_WORKFLOW_NAME, 
CreateWorkflowData.INPUT_WORKFLOW_NAME);
+
+        //input  workflow description
+        sendInput(CreateWorkflowLocator.INPUT_WORKFLOW_DESCRIPTION, 
CreateWorkflowData.INPUT_WORKFLOW_DESCRIPTION);
+
+        //select tenant
+        clickElement(CreateWorkflowLocator.CLICK_TENANT);
+        clickElement(CreateWorkflowLocator.SELECT_TENANT);
+
+        //click workflow timeout alarm
+        clickElement(CreateWorkflowLocator.CLICK_WORKFLOW_TIMEOUT_ALARM);
+        clearInput(CreateWorkflowLocator.INPUT_WORKFLOW_TIMEOUT);
+
+        //input workflow timeout
+        sendInput(CreateWorkflowLocator.INPUT_WORKFLOW_TIMEOUT, 
CreateWorkflowData.INPUT_WORKFLOW_TIMEOUT);
+
+        //click workflow  global parameters
+        clickElement(CreateWorkflowLocator.CLICK_WORKFLOW_GLOBAL_PARAMETERS);
+
+        //input workflow  global parameters
+        sendInput(CreateWorkflowLocator.INPUT_WORKFLOW_GLOBAL_PARAMETERS, 
CreateWorkflowData.INPUT_WORKFLOW_GLOBAL_PARAMETERS);
+
+        //input workflow  global parameters value
+        
sendInput(CreateWorkflowLocator.INPUT_WORKFLOW_GLOBAL_PARAMETERS_VALUES, 
CreateWorkflowData.INPUT_WORKFLOW_GLOBAL_PARAMETERS_VALUES);
+
+        //click to add workflow  global parameters
+        
clickElement(CreateWorkflowLocator.CLICK_ADD_WORKFLOW_GLOBAL_PARAMETERS);
+
+        //input to  add workflow  global parameters
+        sendInput(CreateWorkflowLocator.INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS, 
CreateWorkflowData.INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS);
+
+        //input to add workflow  global parameters value
+        
sendInput(CreateWorkflowLocator.INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS_VALUES, 
CreateWorkflowData.INPUT_ADD_WORKFLOW_GLOBAL_PARAMETERS_VALUES);
+
+        //delete workflow  global parameters value
+        
clickElement(CreateWorkflowLocator.CLICK_DELETE_WORKFLOW_GLOBAL_PARAMETERS);
+        Thread.sleep(TestConstant.ONE_THOUSANG);
+
+        //click add button
+        clickElement(CreateWorkflowLocator.CLICK_ADD_BUTTON);
+        System.out.println("submit workflow");
+        return ifTitleContains(CreateWorkflowData.WORKFLOW_TITLE);
     }
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/security/TenantManagePage.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/security/TenantManagePage.java
index 4c88f65..618e1bc 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/security/TenantManagePage.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/security/TenantManagePage.java
@@ -34,15 +34,6 @@ public class TenantManagePage extends PageCommon {
         super(driver);
     }
 
-
-    /**
-     * jump page
-     */
-    public void jumpPage() {
-        System.out.println("jump tenant page");
-        super.jumpPage(TenantManageData.TENANAT_URL);
-    }
-
     /**
      * createTenant
      *
@@ -50,6 +41,7 @@ public class TenantManagePage extends PageCommon {
      */
     public boolean createTenant() throws InterruptedException {
         Thread.sleep(TestConstant.ONE_THOUSANG);
+        clickButton(TenantManageLocator.TENANT_MANAGE);
 
         //create tenant
         clickButton(TenantManageLocator.CREATE_TENANT_BUTTON);
@@ -66,4 +58,20 @@ public class TenantManagePage extends PageCommon {
         // Whether to enter the specified page after submit
         return ifTitleContains(TenantManageData.TENANAT_MANAGE);
     }
+
+    public boolean deleteTenant() throws InterruptedException {
+        Thread.sleep(TestConstant.ONE_THOUSANG);
+        clickButton(TenantManageLocator.TENANT_MANAGE);
+        Thread.sleep(TestConstant.ONE_THOUSANG);
+
+        // click delete button
+        clickButton(TenantManageLocator.DELETE_TENANT_BUTTON);
+        Thread.sleep(TestConstant.ONE_THOUSANG);
+
+        //click confirm delete button
+        clickButton(TenantManageLocator.CONFIRM_DELETE_TENANT_BUTTON);
+
+        // Whether to enter the specified page after submit
+        return ifTitleContains(TenantManageData.TENANAT_MANAGE);
+    }
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/security/UserManagePage.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/security/UserManagePage.java
index 3e2be2d..70311f1 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/page/security/UserManagePage.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/page/security/UserManagePage.java
@@ -26,16 +26,9 @@ public class UserManagePage extends PageCommon {
     public UserManagePage(WebDriver driver) {
         super(driver);
     }
-    /**
-     * jump page
-     */
-    public void jumpPage() {
-        System.out.println("jump tenant page");
-        super.jumpPage(UserManageData.USER_URL);
-    }
 
     /**
-     * creatTenant
+     * createTenant
      *
      * @return Whether to enter the specified page after creat tenant
      */
@@ -64,4 +57,20 @@ public class UserManagePage extends PageCommon {
         // Whether to enter the specified page after submit
         return ifTitleContains(UserManageData.USER_MANAGE);
     }
+
+    public boolean deleteUser() throws InterruptedException {
+        Thread.sleep(TestConstant.ONE_THOUSANG);
+        // click  user manage
+        clickElement(UserManageLocator.CLICK_USER_MANAGE);
+        Thread.sleep(TestConstant.ONE_THOUSANG);
+
+        // click  delete user button
+        clickButton(UserManageLocator.DELETE_USER_BUTTON );
+
+        // click confirm delete button
+        clickButton(UserManageLocator.CONFIRM_DELETE_USER_BUTTON);
+
+        // Whether to enter the specified page after submit
+        return ifTitleContains(UserManageData.USER_MANAGE);
+    }
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/LoginTest.java 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/LoginTest.java
index bd3c31d..47ce112 100644
--- a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/LoginTest.java
+++ b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/LoginTest.java
@@ -1,37 +1,26 @@
-/*
- * 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.testcase;
 
-import org.apache.dolphinscheduler.base.BaseTest;
 import org.apache.dolphinscheduler.page.LoginPage;
+import org.testng.Assert;
 import org.testng.annotations.Test;
 
+import static org.apache.dolphinscheduler.base.BaseTest.driver;
 
-public class LoginTest extends BaseTest {
+@Test(groups={"functionTests","login"})
+public class LoginTest {
     private LoginPage loginPage;
+
     @Test(description = "LoginTest", priority = 1)
     public void testLogin() throws InterruptedException {
-        // init login page
         loginPage = new LoginPage(driver);
+        System.out.println("===================================");
+        System.out.println("jump to Chinese login page");
+        loginPage.jumpPageChinese();
 
-        // enter login page
-        loginPage.jumpPage();
+        System.out.println("start login");
+        assert  loginPage.login();
+        System.out.println("end login");
+        System.out.println("===================================");
 
-        //assert login page
-        assert loginPage.login();
     }
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/deleteData/DeleteTenantTest.java
similarity index 68%
copy from 
e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
copy to 
e2e/src/test/java/org/apache/dolphinscheduler/testcase/deleteData/DeleteTenantTest.java
index 7124b4e..ddbc9d6 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/deleteData/DeleteTenantTest.java
@@ -14,21 +14,24 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dolphinscheduler.testcase.security;
+package org.apache.dolphinscheduler.testcase.deleteData;
 
 import org.apache.dolphinscheduler.base.BaseTest;
 import org.apache.dolphinscheduler.page.security.TenantManagePage;
 import org.testng.annotations.Test;
 
-public class TenantManageTest extends BaseTest {
+public class DeleteTenantTest extends BaseTest {
     private TenantManagePage tenantManagePage;
 
-    @Test(description = "TenantTest", priority = 1)
-    public void testTenantManage() throws InterruptedException {
+    @Test(groups={"functionTests"},dependsOnGroups = { 
"login","createTenant"},description = "DeleteTenantTest")
+    public void testDeleteTenant() throws InterruptedException {
         tenantManagePage = new TenantManagePage(driver);
-        // enter tenant manage page
-        tenantManagePage.jumpPage();
         //assert tenant manage page
-        assert tenantManagePage.createTenant();
+        System.out.println("start delete tenant");
+        assert tenantManagePage.deleteTenant();
+        System.out.println("end delete tenant");
+        System.out.println("===================================");
     }
+
+
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/deleteData/DeleteUserTest.java
similarity index 69%
copy from 
e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
copy to 
e2e/src/test/java/org/apache/dolphinscheduler/testcase/deleteData/DeleteUserTest.java
index 834ebdb..770fae0 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/deleteData/DeleteUserTest.java
@@ -14,21 +14,23 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dolphinscheduler.testcase.security;
+package org.apache.dolphinscheduler.testcase.deleteData;
 
 import org.apache.dolphinscheduler.base.BaseTest;
 import org.apache.dolphinscheduler.page.security.UserManagePage;
 import org.testng.annotations.Test;
 
-public class UserManageTest extends BaseTest {
+public class DeleteUserTest extends BaseTest {
     private UserManagePage userManagePage;
 
-    @Test(description = "TenantTest", priority = 1)
-    public void testUserManage() throws InterruptedException {
+    @Test(groups={"functionTests"},dependsOnGroups = { "login","user" 
},description = "DeleteUserTest")
+    public void testDeleteUser() throws InterruptedException {
         userManagePage = new UserManagePage(driver);
-        // enter user manage page
-        userManagePage.jumpPage();
         //assert user manage page
-        assert userManagePage.createUser();
+        System.out.println("start delete user");
+        assert userManagePage.deleteUser();
+        System.out.println("end delete user");
+        System.out.println("===================================");
     }
 }
+
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateProjectTest.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateProjectTest.java
index 8abd09d..546792f 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateProjectTest.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateProjectTest.java
@@ -23,13 +23,16 @@ import org.testng.annotations.Test;
 public class CreateProjectTest  extends BaseTest {
     private CreateProjectPage createProjectPage;
 
-    @Test(description = "TenantTest", priority = 1)
-    public void testUserManage() throws InterruptedException {
+    @Test(groups={"functionTests"},dependsOnGroups = { "login" },description = 
"CreateProjectTest",priority=4)
+    public void testCreateProject() throws InterruptedException {
         createProjectPage = new CreateProjectPage(driver);
         // enter user manage page
         createProjectPage.jumpProjectManagePage();
         //assert user manage page
+        System.out.println("start create project");
         assert createProjectPage.createProject();
+        System.out.println("end create project");
+        System.out.println("===================================");
     }
 
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateWorkflowTest.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateWorkflowTest.java
index 6ac13f8..ea87f48 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateWorkflowTest.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/project/CreateWorkflowTest.java
@@ -26,12 +26,16 @@ public class CreateWorkflowTest  extends BaseTest {
     private CreateProjectPage createProjectPage;
 
 
-    @Test(description = "CreateWorkflowTest", priority = 1)
-    public void CreateWorkflowTest() throws InterruptedException {
+    @Test(groups={"functionTests"},dependsOnGroups = { "login" },description = 
"CreateWorkflowTest",priority=5)
+    public void testCreateWorkflow() throws InterruptedException {
         createProjectPage = new CreateProjectPage(driver);
         createProjectPage.jumpProjectManagePage();
+
         createWorkflowPage = new CreateWorkflowPage(driver);
-        //assert create workflow
+        System.out.println("start create workflow");
         assert createWorkflowPage.createWorkflow();
+        assert createWorkflowPage.saveWorkflow();
+        System.out.println("end create workflow");
+        System.out.println("===================================");
     }
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
index 7124b4e..8b21d3b 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/TenantManageTest.java
@@ -20,15 +20,20 @@ import org.apache.dolphinscheduler.base.BaseTest;
 import org.apache.dolphinscheduler.page.security.TenantManagePage;
 import org.testng.annotations.Test;
 
+
 public class TenantManageTest extends BaseTest {
     private TenantManagePage tenantManagePage;
 
-    @Test(description = "TenantTest", priority = 1)
+    @Test(groups={"functionTests","createTenant"},dependsOnGroups = { "login" 
},description = "TenantManageTest")
     public void testTenantManage() throws InterruptedException {
         tenantManagePage = new TenantManagePage(driver);
-        // enter tenant manage page
-        tenantManagePage.jumpPage();
         //assert tenant manage page
+        System.out.println("start create tenant");
         assert tenantManagePage.createTenant();
+        System.out.println("end create tenant");
+        System.out.println("===================================");
+
     }
+
+
 }
diff --git 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
index 834ebdb..9381b68 100644
--- 
a/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
+++ 
b/e2e/src/test/java/org/apache/dolphinscheduler/testcase/security/UserManageTest.java
@@ -23,12 +23,14 @@ import org.testng.annotations.Test;
 public class UserManageTest extends BaseTest {
     private UserManagePage userManagePage;
 
-    @Test(description = "TenantTest", priority = 1)
+    @Test(groups={"functionTests","user"},dependsOnGroups = { "login" 
},description = "UserManageTest")
     public void testUserManage() throws InterruptedException {
         userManagePage = new UserManagePage(driver);
-        // enter user manage page
-        userManagePage.jumpPage();
         //assert user manage page
+        System.out.println("start create user");
         assert userManagePage.createUser();
+        System.out.println("end create user");
+        System.out.println("===================================");
+
     }
 }
diff --git a/e2e/suite.xml b/e2e/suite.xml
deleted file mode 100644
index d9d7ae6..0000000
--- a/e2e/suite.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd";>
-<suite name="e2e Test Suite" parallel="tests" thread-count="2">
-    <!-- create tenant -->
-    <test name="create-tenant" preserve-order="true">
-        <classes>
-            <class 
name="org.apache.dolphinscheduler.testcase.security.TenantManageTest">
-            </class>
-        </classes>
-    </test>
-    <!-- create user -->
-    <test name="create-user" preserve-order="true">
-        <classes>
-            <class 
name="org.apache.dolphinscheduler.testcase.security.UserManageTest">
-            </class>
-        </classes>
-    </test>
-</suite>
\ No newline at end of file
diff --git a/e2e/testng.xml b/e2e/testng.xml
index 757ffab..56c9649 100644
--- a/e2e/testng.xml
+++ b/e2e/testng.xml
@@ -1,19 +1,23 @@
 <?xml version="1.0" encoding="utf-8" ?>
 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"; >
-<suite name="dolphinscheduler_e2e" parallel="false">
-    <test name="dolphinscheduler_test">
-        <!--<packages>-->
-            <!--&lt;!&ndash;<package 
name="org.apache.dolphinscheduler.testcase.security.TenantManageTest"/>&ndash;&gt;-->
-            <!--<package 
name="org.apache.dolphinscheduler.testcase.security.*"/>-->
-        <!--</packages>-->
+<suite name="dolphinscheduler_e2e" parallel="true">
+    <test name="dolphinscheduler_test" preserve-order="true">
+        <groups>
+            <run>
+                <include name="functionTests" />
+            </run>
+        </groups>
+
         <classes>
-        <class 
name="org.apache.dolphinscheduler.testcase.security.TenantManageTest"></class>
+            <class 
name="org.apache.dolphinscheduler.testcase.LoginTest"></class>
+            <class 
name="org.apache.dolphinscheduler.testcase.security.TenantManageTest"></class>
+            <class 
name="org.apache.dolphinscheduler.testcase.security.UserManageTest"></class>
+            <!--<class 
name="org.apache.dolphinscheduler.testcase.project.CreateProjectTest"></class>-->
+            <!--&lt;!&ndash;<class 
name="org.apache.dolphinscheduler.testcase.project.CreateWorkflowTest"></class>&ndash;&gt;-->
+            <class 
name="org.apache.dolphinscheduler.testcase.deleteData.DeleteTenantTest"></class>
+            <class 
name="org.apache.dolphinscheduler.testcase.deleteData.DeleteUserTest"></class>
         </classes>
-        </test>
-
-        <!--<suite-files>-->
-            <!--<suite-file path="suite.xml"/>-->
-        <!--</suite-files>-->
+    </test>
 
     <listeners>
         <listener class-name="org.uncommons.reportng.HTMLReporter" />

Reply via email to