测试中台通用基础技术入门

测试中台通用基础技术入门

  • Maven入门
    • 1.maven功能
    • 2.了解maven原理
    • 3.IDEA中构建maven项目
    • 4.pom.xml
    • 5.maven生命周期
    • 6.maven基本命令
  • 单元测试Junit
    • 1.单元测试与Junit简介
    • 2.Junit使用
  • 自动化测试:TestNG
    • 1.TestNG介绍

Maven入门

参考:

  1. https://blog.csdn.net/zzy1078689276/article/details/78732183
  2. https://blog.csdn.net/quuqu/article/details/52458589
  3. https://www.cnblogs.com/jingmoxukong/p/5591368.html#maven%E6%98%AF%E4%BB%80%E4%B9%88

1.maven功能

  1. 统一管理jar 包和java项目
  2. 统一开发规范与工具
    maven支持许多种的应用程序类型,对于每一种支持的应用程序类型都定义好了一组构建规则和工具集。

2.了解maven原理

类似于Github仓库管理代码,maven使用本地仓库与远程仓库管理jar包;

本地仓库,默认位于 C:\Users\用户名.m2 目录下,项目首先会从本地仓库中获取 jar 包,当无法获取指定 jar 包的时候,本地仓库会从 远程仓库(或 中央仓库)* 中下载 jar 包,并放入本地仓库中以备将来使用。这个远程仓库是 Maven 官方提供的,可通过 http://search.maven.org/ 来访问。

测试中台通用基础技术入门_第1张图片

3.IDEA中构建maven项目

安装maven可以使用官网下载的方式详见:
https://www.cnblogs.com/jingmoxukong/p/5591368.html#maven%E6%98%AF%E4%BB%80%E4%B9%88

本文使用IDEA可以直接创建maven项目
首先New Project->Maven->勾选Creat…->选择XXX-quick-start
测试中台通用基础技术入门_第2张图片
然后填写项目名
测试中台通用基础技术入门_第3张图片
然后可以修改maven配置,包含配置文件setting.xml和本地仓库地址,如果已经安装maven,还可以在maven路径栏选择,默认的话IDEA会自动下载,其下载的默认网址在setting.xml中配置;在此可以修改国内下载源以获得更快速度
测试中台通用基础技术入门_第4张图片
在此修改为阿里云,setting.xml如下:


<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">

    <pluginGroups />
    <proxies />
    <servers />

    <localRepository>D:/server/maven/repositorylocalRepository>

    <mirrors>
        <mirror>
            <id>alimavenid>
            <mirrorOf>centralmirrorOf>
            <name>aliyun mavenname>
            <url>http://maven.aliyun.com/nexus/content/repositories/central/url>
        mirror>
        <mirror>
            <id>alimavenid>
            <name>aliyun mavenname>
            <url>http://maven.aliyun.com/nexus/content/groups/public/url>
            <mirrorOf>centralmirrorOf>
        mirror>
        <mirror>
            <id>centralid>
            <name>Maven Repository Switchboardname>
            <url>http://repo1.maven.org/maven2/url>
            <mirrorOf>centralmirrorOf>
        mirror>
        <mirror>
            <id>repo2id>
            <mirrorOf>centralmirrorOf>
            <name>Human Readable Name for this Mirror.name>
            <url>http://repo2.maven.org/maven2/url>
        mirror>
        <mirror>
            <id>ibiblioid>
            <mirrorOf>centralmirrorOf>
            <name>Human Readable Name for this Mirror.name>
            <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/url>
        mirror>
        <mirror>
            <id>jboss-public-repository-groupid>
            <mirrorOf>centralmirrorOf>
            <name>JBoss Public Repository Groupname>
            <url>http://repository.jboss.org/nexus/content/groups/publicurl>
        mirror>
        <mirror>
            <id>google-maven-centralid>
            <name>Google Maven Centralname>
            <url>https://maven-central.storage.googleapis.com
            url>
            <mirrorOf>centralmirrorOf>
        mirror>
        
        <mirror>
            <id>maven.net.cnid>
            <name>oneof the central mirrors in chinaname>
            <url>http://maven.net.cn/content/groups/public/url>
            <mirrorOf>centralmirrorOf>
        mirror>
    mirrors>
settings>

点击确认后,IDEA会自动下载maven及其依赖包,完成项目构建后会出现以下目录结构:

测试中台通用基础技术入门_第5张图片
Maven的标准工程结构如下:

-- pom.xml(maven项目配置文件)

-- src

-- main
	-- java(java源代码目录)
		-- resources(资源文件目录)
		
-- test
	-- java(单元测试代码目录)
	
-- target(输出目录,所有的输出物都存放在这个目录下)
	--classes(编译后的class文件存放处)

4.pom.xml

pom.xml 称为 Project Object Model(项目对象模型),它用于描述整个 Maven 项目,所以也称为 Maven 描述文件。

以下面的pom.xml文件讲解maven项目中的属性

<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/maven-v4_0_0.xsd">

    <modelVersion>4.0.0modelVersion>

    <groupId>com.smartgroupId>
    <artifactId>smart-demoartifactId>
    <version>1.0version>
    <packaging>warpackaging>

    <name>smart-demo Maven Webappname>
    <url>http://maven.apache.orgurl>

    <dependencies>
        <dependency>
            <groupId>junitgroupId>
            <artifactId>junitartifactId>
            <version>3.8.1version>
            <scope>testscope>
        dependency>
    dependencies>

    <build>
        <finalName>smart-demofinalName>
    build>project>

  • modelVersion:这个是 POM 的版本号,现在都是 4.0.0 的,必须得有,但不需要修改。

  • groupId、artifactId、version:分别表示 Maven 项目的组织名、构件名、版本号,它们三个合起来就是 Maven **坐标,根据这个坐标可以在 Maven 仓库中对应唯一的 **Maven 构件。

  • packaging:表示该项目的打包方式,war 表示打包为 war 文件,默认为 jar,表示打包为 jar 文件。

  • name、url:表示该项目的名称与 URL 地址,意义不大,可以省略。

  • dependencies:定义该项目的依赖关系,其中每一个 dependency 对应一个 Maven 项目,可见 Maven 坐标再次出现,还多了一个 scope,表示作用域(下面会描述)。

  • build:表示与构建相关的配置,这里的 finalName 表示最终构建后的名称 smart-demo.war,这里的 finalName 还可以使用另一种方式来定义(下面会描述)。

5.maven生命周期

maven把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。

这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。

6.maven基本命令

除了上述使用IDEA完成maven项目构建,还可以使用maven命令构建项目,首先了解一下基本命令

为了保证maven命令可以在terminal中使用,首先要在环境变量path中添加maven的路径
测试中台通用基础技术入门_第6张图片

生命周期 阶段描述
mvn validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
mvn generate-sources 生成所有需要包含在编译过程中的源代码
mvn process-sources 处理源代码,比如过滤一些值
mvn generate-resources 生成所有需要包含在打包过程中的资源文件
mvn process-resources 复制并处理资源文件至目标目录,准备打包
mvn compile 编译项目的源代码
mvn process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
mvn generate-test-sources 生成所有包含在测试编译过程中的测试源码
mvn process-test-sources 处理测试源码,比如过滤一些值
mvn generate-test-resources 生成测试需要的资源文件
mvn process-test-resources 复制并处理测试资源文件至测试目标目录
mvn test-compile 编译测试源码至测试目标目录
mvn test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
mvn prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本(将会在Maven 2.1+中实现)
mvn package 将编译好的代码打包成可分发的格式,如JAR,WAR,或者EAR
mvn pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
mvn integration-test 如果有必要的话,处理包并发布至集成测试可以运行的环境
mvn post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
mvn verify 执行所有检查,验证包是有效的,符合质量规范
mvn install 安装包至本地仓库,以备本地的其它项目作为依赖使用
mvn deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)

单元测试Junit

参考
https://www.bilibili.com/video/BV1u4411T78k?p=1

1.单元测试与Junit简介

测试中台通用基础技术入门_第7张图片

  • 单元测试的好处
  1. 确保单个方法运行正常
  2. 如果修改了方法代码,只需确保其对应的单元测试通过
  3. 测试代码本身就可以作为示例代码可以自动化运行所有测试并获得报告
  • Junit
  1. 开源的Java语言的单元测试框架
  • 标准单元测试框架,使用最广泛

  • Junit特点

  1. 使用断言( Assertion)测试期望结果
  2. 可以方便地组织和运行测试可以方便地查看测试结果
  3. 常用DE(例如 Eclipse)都集成了 JUnit
  4. 可以方便地集成到 Maven

2.Junit使用

JUnit的设计

  • Testcase:一个 Testcase表示一个测试
  • Test Suite:一个 Testsuite包含一组 Testcase,表示一组测试
  • TestFixture:一个 Test Fixture表示一个测试环境
  • TestResult:用于收集测试结果
  • TestRunner:用于运行测试
  • TestListener:用于监听测试过程,收集测试数据
  • Assert:用于断言测试结果是否正确

Assert断言使用

  • 断言相等:assertEquals(100,x)
  • 断言数组相等:assertArray Equals({1,2,3},x)
  • 浮点数断言相等(设置delta):assertEquals(3.1416,x,00001)
  • 断言为null: assertNull(x)
  • 断言为 true/false:assertTrue(x>o) assertFalse(x<0)
  • 其他:assertNotEquals/ assertNotNull

JUnit执行逻辑

  1. 执行@BeforeClass静态方法,初始化需要的静态资源
  2. 对每一个测试方法:创建测试类实例-----》执行setUp方法(@Before)-----》执行@Test方法------》执行@After方法
  3. 所有的测试执行完毕后,执行@AfterClass静态方法

测试中台通用基础技术入门_第8张图片

初始化测试资源称为 Fixture

  • @ Before:初始化测试对象,以测试类实例变量形式存放不会影响到下一个@Test方法,例如:input= new FileInputStream
  • @ After:销毁@ Before创建的测试对象,例如:input. close();
  • @ Before Class:初始化非常耗时的资源,以测试类静态变量存放,会影响其他的@Test方法,例如:创建数据库
  • @ After Class:清理@ Before Class创建的资源,例如:删除数据库

执行过程
测试中台通用基础技术入门_第9张图片
JUnit异常测试

  • 使用@Test(expected = 异常类名.class)
  • 前提是被测试的代码会抛出指定异常
    @Test(expected = ArithmeticException.class)
    public void testDivideByZero(){
        System.out.println("testDivideByZero");
        cal.divide(4,0);
    }

JUnit超时测试

  • @Test(timeout = 2000) ,单位为ms
  • 不能替代压力测试和性能测试
    @Test(timeout = 2000)
    public void testDivide() {
        for(;;);
    }

忽略测试方法

    @Ignore
    public void testMultiply() {
        fail("Not yet implemented");
    }

参数化测试

  • 可以测试多个测试用例
  • 参数必须由静态方法data返回
  • 返回类型为 Collection< Object>
  • 静态方法必须标记为@ Parameters
  • 测试类必须标记为@RunWith(Parameterized.class)
  • 构造方法参数必须和测试参数对应
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.*;

import java.util.Arrays;
import java.util.Collection;
import static org.junit.Assert.*;

@RunWith(Parameterized.class)
public class AbsTest {
    @Parameters
    public static Collection<?> data() {
        return Arrays.asList(new Object[][]{
                {0, 0}, {1, 1}, {-1, 1}
        });
    }

    int input;
    int excepted;

    /**
     * 构造器
     */
    public AbsTest(int input, int expected) {
        this.excepted = expected;
        this.input = input;
    }
    @Test
    public void testAbs(){
        int r=Math.abs(this.input);
        assertEquals(this.excepted,r);
    }

}

自动化测试:TestNG

1.TestNG介绍

  • TestNG是Java中的一个测试框架

  • TestNG比JUnit功能强大的多。 测试人员一般用TestNG来写自动化测试。 开发人员一般用JUnit写单元测试。

  1. 比Junit涵盖功能更全面的测试框架;
  2. Junit更适合隔离性比较强的单元测试;
  3. TestNG更适合复杂的集成测试。
  • 编写一个测试的过程包含以下步骤:
  1. 编写测试的业务逻辑并在代码中插入TestNG annotation;
  2. 将测试信息添加到testng.xml文件或build.xml中
  3. 运行TestNG。
  • 官方网站: http://testng.org/doc/index.html

你可能感兴趣的:(阿里实习学习)