之前出过一篇自动化搭建操作比较粗浅,由于小编技术小成,嘿嘿....这篇操作更加细致,更加丰富,并且添加了基础父类 + Web驱动工具 + 接口通用工具 + 全局常量类,复制即用,和Maven依赖、目录结构完全配套。
 

一、所需软件。
 

1、JDK8(必装)
2、IDEA
3、Maven3.8+
4、Chrome浏览器
 

二、环境配置。


1、JDK配置


1.1:安装JDK8
1.2:系统环境变量:
JAVA_HOME:jdk安装根目录
Path添加: %JAVA_HOME%\bin 
校验cmd:

plaintext
  
java -version


2、Maven配置


2.1、解压Maven
2.2、系统环境变量
M2_HOME:maven根目录
Path添加: %M2_HOME%\bin ;
2.3、配置maven核心conf/settings.xml

xml
  
<!--本地仓库路径-->
<localRepository>D:/maven/repo</localRepository>

<!--阿里云镜像-->
<mirrors>
    <mirror>
      <id>aliyunmaven</id>
      <mirrorOf>central</mirrorOf>
      <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
</mirrors>


重点!!!cmd校验: mvn -v 


3、IDEA全局配置


 
3.1:设置Maven:File–Settings–Build–Maven;
Maven home:选中自己解压的maven
User settings file:勾选,选中自定义settings.xml
Local repository:自动识别
 
3.2:编码的统一
全部UTF-8编码
勾选编译自动导入。


三、创建自动化Maven项目


1、IDEA新建Maven项目,不用骨架
2、粘贴完整pom(嘿嘿~已做精简终极版)
 

xml
  
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.auto</groupId>
    <artifactId>java-auto-test</artifactId>
    <version>1.0.0</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <junit.version>5.9.2</junit.version>
        <rest.version>5.3.0</rest.version>
        <selenium.version>4.15.0</selenium.version>
    </properties>

    <dependencies>
        <!--JUnit5-->
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
      <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <!--接口自动化-->
        <dependency>
            <groupId>io.rest-assured</groupId>
            <artifactId>rest-assured</artifactId>
            <version>${rest.version}</version>
            <scope>test</scope>
        </dependency>

        <!--UI自动化-->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>${selenium.version}</version>
            <scope>test</scope>
        </dependency>
     <!--日志-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.36</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.1.2</version>
            </plugin>
        </plugins>
    </build>
</project>


3、刷新maven,自动下载全部依赖。


四、固定项目目录(直接照建、也可按照自己习惯来建)
 

plaintext
  
src/test/java
├─common    公共工具、常量、父类
├─api      接口用例
├─web      UI自动化用例
├─unit     单元测试
└─pojo     请求响应实体类
 


五、粘贴4个公共工具类


1、Constant 全局配置

java
  
package common;
public class Constant {
    public static final String API_URL = "https://httpbin.org";
    public static final String BROWSER = "chrome";
    public static String TOKEN = "";
}


2、BaseTest 测试父类
 

Java
  
package common;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

public class BaseTest {
    @BeforeEach
    public void before(){
    }

    @AfterEach
    public void after(){
    }
}

3、ApiUtil 接口请求封装
 

java
  
package common;
import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;
import java.util.Map;

public class ApiUtil {
    public static Response get(String url){
        return RestAssured.given()
                .baseUri(Constant.API_URL)
                .header("Authorization",Constant.TOKEN)
                .when().get(url);
    }

    public static Response postJson(String url,Object body){
        return RestAssured.given()
                .baseUri(Constant.API_URL)
                .header("Authorization",Constant.TOKEN)
                .contentType(ContentType.JSON)
                .body(body)
                .when().post(url);
    }
}


4、WebDriverUtil浏览器工具

java
  
package common;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import java.time.Duration;

public class WebDriverUtil {
    public static WebDriver driver;

    public static WebDriver initBrowser(String browser){
        if("chrome".equals(browser)){
            driver=new ChromeDriver();
        }else if("edge".equals(browser)){
            driver=new EdgeDriver();
        }
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        return driver;
    }

    public static void close(){
        if(driver!=null) driver.quit();
    }
}


六、运行测试Demo


接口测试

java
  
package api;
import common.ApiUtil;
import common.BaseTest;
import org.junit.jupiter.api.Test;
import static org.hamcrest.Matchers.equalTo;

public class ApiDemo extends BaseTest {
    @Test
    public void getTest(){
        ApiUtil.get("/get")
                .then().statusCode(200);
    }
}
 

UI测试

java
  
package web;
import common.BaseTest;
import common.Constant;
import common.WebDriverUtil;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;

public class WebDemo extends BaseTest {
    static WebDriver driver;

    @BeforeAll
    static void start(){
        driver= WebDriverUtil.initBrowser(Constant.BROWSER);
    }

    @Test
    void baidu(){
        driver.get("https://www.baidu.com");
    }

    @AfterAll
    static void end(){
        WebDriverUtil.close();
    }
}


七、运行命令


1、单个用例:右键run
2、全部用例maven命令:

 
plaintext
  
mvn test


八、遇到的环境报错汇总


1、依赖爆红:刷新maven、换阿里云镜像
2、浏览器启动失败:selenium4自动适配驱动,无需下载驱动
3、编码报错:全部设置UTF-8

———————————————————————————————————————

番外!!!!


我在下面给大家找到一些:基础父类 + Web驱动工具 + 接口通用工具 + 全局常量类,复制即用,和上面Maven依赖、目录结构完全配套。
 
一、常量配置类
 

java
  
package common;

/**
 * 全局配置
 */
public class Constant {
    // 接口基础地址
    public static final String API_BASE_URL = "https://httpbin.org";
    // 测试浏览器
    public static final String BROWSER_CHROME = "chrome";
    // 全局token
    public static String TOKEN = "";
}
 


二、测试基类(所有测试类继承)
 

java
  
package common;

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;

/**
 * 测试基类:统一前置/后置
 */
public class BaseTest {

    @BeforeEach
    void setUp() {
        // 可统一初始化:打印日志、初始化配置
    }

    @AfterEach
    void tearDown() {
        // 统一后置:关闭资源、清除cookie
    }
}
 


三、WebUI 驱动工具类(Selenium封装)
 

java
  
package common;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

/**
 * 浏览器驱动工具类
 */
public class WebDriverUtil {
    public static WebDriver driver;
    public static WebDriverWait wait;

    /**
    * 初始化浏览器
     */
    public static WebDriver initBrowser(String browser) {
        switch (browser.toLowerCase()) {
            case "chrome":
                driver = new ChromeDriver();
                break;
            case "edge":
                driver = new EdgeDriver();
                break;
            default:
                throw new RuntimeException("不支持当前浏览器");
        }
        // 隐式等待
        driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
        // 显式等待
        wait = new WebDriverWait(driver, Duration.ofSeconds(15));
        // 窗口最大化
        driver.manage().window().maximize();
        return driver;
    }    /**
     * 关闭浏览器
     */
    public static void closeBrowser() {
        if (driver != null) {
            driver.quit();
        }
    }
}
 


四、接口通用请求工具类(RestAssured封装)
 

java
  
package common;

import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import io.restassured.response.Response;

import java.util.Map;

/**
 * 接口请求工具类
 * 封装 get / post / put / delete
 */
public class ApiUtil {

    /**
     * 无参GET请求
     */
    public static Response get(String url) {
        return RestAssured.given()
                .baseUri(Constant.API_BASE_URL)
                .header("Authorization", Constant.TOKEN)
                .when()
                .get(url);
    }

    /**
     * 带请求头+参数GET
     */
    public static Response get(String url, Map<String, String> headers, Map<String, Object> params) {
        return RestAssured.given()
                .baseUri(Constant.API_BASE_URL)
                .headers(headers)
                .params(params)
                .when()
                .get(url);
    }

    /**
     * JSON格式POST
     */
    public static Response postJson(String url, Object body) {
        return RestAssured.given()
                .baseUri(Constant.API_BASE_URL)
                .header("Authorization", Constant.TOKEN)
                .contentType(ContentType.JSON)
                .body(body)
                .when()
                .post(url);
    }
    /**
     * JSON PUT
     */
    public static Response putJson(String url, Object body) {
        return RestAssured.given()
                .baseUri(Constant.API_BASE_URL)
                .contentType(ContentType.JSON)
                .body(body)
                .when()
                .put(url);
    }    /**
     * DELETE
     */
    public static Response delete(String url) {
        return RestAssured.given()
                .baseUri(Constant.API_BASE_URL)
                .when()
                .delete(url);
    }
}


五、改造后的测试用例(继承基类,直接调用工具)
 
1、接口测试用例

java
  
package api;

import common.ApiUtil;
import common.BaseTest;
import org.junit.jupiter.api.Test;
import static org.hamcrest.Matchers.equalTo;

public class ApiDemoTest extends BaseTest {    @Test
    void testGet() {
        ApiUtil.get("/get")
                .then()
                .statusCode(200)
                .body("url", equalTo("https://httpbin.org/get"));
    }
}
 


2、WebUI 测试用例

java
  
package web;

import common.BaseTest;
import common.Constant;
import common.WebDriverUtil;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.WebDriver;

public class WebDemoTest extends BaseTest {
    public static WebDriver driver;

    @BeforeAll
    static void before() {
        driver = WebDriverUtil.initBrowser(Constant.BROWSER_CHROME);
    }

    @Test
    void openBaidu() {
        driver.get("https://www.baidu.com");
        System.out.println("页面标题:" + driver.getTitle());
    }

    @AfterAll
    static void after() {
        WebDriverUtil.closeBrowser();
    }
}


 献丑了 可能会有些枯燥,但期望各位大大给出指正  ……^ - ^……

致辞跪谢大老爷们
 

更多推荐