美文网首页
一步步实现持续集成(八)执行单元测试

一步步实现持续集成(八)执行单元测试

作者: 漫天秋风 | 来源:发表于2019-06-10 14:15 被阅读0次

    本章将在Jenkins中自动执行单元测试脚本,并生成测试报告。使用了较为方便的Spock测试框架,非常值得在Java项目的单元测试中推广应用。

    (一)使用Spock框架进行自动化单元测试

    1. Spock的介绍

    谈到java的单元测试框架,一般常用的是JUnit,但我们今天推荐的单元测试框架是Spock。

    Spock是基于groovy和Java语言的框架,它的特点是能够高效方便的进行编码和展示测试结果。Spock用groovy语言编写,groovy语言是基于Java的,语法很多类似Python,Java程序员可以无缝掌握。

    Spock框架的优点很多。除了继承了groovy的方便的语法外,还有两个比较重要的优点:

    • 方法名称、输入输出都可以用字符串表示,并出现在测试报告内。这样,直接通过方法名称和输入输出名称,就能直观的看到测试了哪些内容。
    • 测试结果能够很直观的展现,便于查找问题,这是区别于Junit最明显的一点。

    Spock的几个优点我们会在后面的案例里逐步演示。

    1. pom的配置

    要在代码中使用Spock框架,首先当然是在pom中声明依赖项。Spock的依赖项可以分为两个部分,一个是框架本身的依赖项,一个是生成测试报告的依赖项,具体的配置项如下所示。

    </plugins> 
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
         <version>2.6</version>
         <configuration>
        <userFile>false</userFile>
         <includes>
         <include>**/*Spec.java</include>
        <include>**/*Test.java</include>
         </includes>
         </configuration>
    
       </plugin>
      </plugins>
       </build>
    
      <dependencies>
        <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
      <scope>test</scope>
      </dependency>
      <dependency>
      <groupId>org.spockframework</groupId>
      <artifactId>spock-core</artifactId>
      <version>1.1-groovy-2.4</version>
      <scope>test</scope>
      </dependency>
      <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>2.4.4</version>
      <scope>test</scope>
      </dependency>
    
      <!---->
      <!-- 单元测试报告 -->
      <dependency>
      <groupId>com.athaydes</groupId>
      <artifactId>spock-reports</artifactId>
      <version>1.6.1</version>
      <scope>test</scope>
      <!-- this avoids affecting your version of Groovy/Spock -->
      <exclusions>
        <exclusion>
        <groupId>*</groupId>
        <artifactId>*</artifactId>
        </exclusion>
        </exclusions>
      </dependency>
    
      <!-- // if you don't already have slf4j-api and an implementation of it in the classpath, add this! -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.13</version>
        <scope>test</scope>
        </dependency>
        <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.13</version>
        <scope>test</scope>
       </dependency>
    
    1. 单元测试的编码

    下面使用Spock开发单元测试编码。简单的对一个变量赋值方法进行测试。方法所在的类如下所示。

    public class test {
        int i;
        public String j;
        public String AAA;
    
        public void mytest() {
        if(AAA !=j)
            j = AAA;
      }
    }
    

    方法的测试代码如下所示。

    class myTest extends spock.lang.Specification{
    
        def "测试基本功能"(){
    
            given:"赋初始值"
            def test1 = new test()
            test1.j = j
            test1.AAA = a
    
            when:"执行赋值语句"
            test1.mytest()
    
            then:"两个值相等"
            test1.j == test1.AAA
    
            where:"给定初始值"
            j        | a
            "01"     |  "02"
        }
    }
    

    测试结果如图所示,明显测试已通过。


    测试已通过.jpg

    通过上面的测试代码可以发现,Spock的语法是非常直观方便的,测试内容,输入输出都能够通过命名一目了然。

    为了进一步演示Spock的特点,我们将测试要求做一点修改,将两个变量判等,修改为判不等,那么测试当然是无法通过的,我们看看对于测试失败的情况,Spock会如何显示,显示结果见下图。


    1.将测试结果修改为将失败.jpg

    由图中可见,Spock对于失败的测试,清晰的显示了输入输出和最终失败的原因。

    2.Spock的结果展示.jpg
    1. 测试结果和报告

    Spock对于测试报告也有非常直观的显示方式,有专用的spock-reports插件进行测报显示。测报效果如图。


    3.spock测报显示效果.jpg
    1. 代码提交远程服务器

    至此,我们的单元测试脚本已经编码执行完毕,需要将代码提交到远程服务器,准备交由Jenkins去执行。设置好远程服务器地址,add和commit代码后,就可以push到远程服务器了。

    (二)Jenkins的配置

    1. 任务配置

    要在Jenkins内自动进行单元测试,需要在两个位置进行配置。一个是在编译时,配置maven来执行test部分代码,一个是在编译后,向Jenkins指定测试报告路径,在Jenkins任务内显示单元测报。下面我们来看具体配置。


    Jenkins任务配置.jpg
    1. 执行结果

    在Jenkins内进行手工构建,执行结果见下图。在页面上可以点击测报的超链接,进一步查看测报。

    任务页面的测报链接.jpg 3.spock测报显示效果.jpg

    总结

    至此,我们完成了在Jenkins内的自动化单元测试脚本的执行和生成测报。通过本章,我们接触了Spock这一方便的Java项目测试框架,大家有兴趣可以进一步了解groovy和Spock。另外对于Jenkins内的单元测试调用配置也是非常方便,通过本章也能有个大概的了解。

    相关文章

      网友评论

          本文标题:一步步实现持续集成(八)执行单元测试

          本文链接:https://www.haomeiwen.com/subject/dfkzxctx.html