专栏首页北京宏哥Java自动化测试框架-02 - TestNG之理论到实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)

Java自动化测试框架-02 - TestNG之理论到实践 - 纸上得来终觉浅,绝知此事要躬行(详细教程)

理论

TestNG,即Testing, NextGeneration,下一代测试技术,是一套根据JUnit 和NUnit思想而构建的利用注释来强化测试功能的一个测试框架,即可以用来做单元测试,也可以用来做集成测试。 因为TestNG是从Junit的思想构建而来,所以TestNG具备junit等所不具备的多重功能。而且TestNG目前的使用比较广泛,google的一个selenium自动化项目组即采用的是selenium rc的java 接口+ testNG结合的方式。 写一个测试通常分为三步: 1.编写测试业务逻辑,并且在你的代码中插入 TestNG annotations 。 2.在 testng.xml 或 build.xml 添加你的测试信息。例如类名,希望运行的组等等 3.运行TestNG. 文档中会使用到如下的概念: 1.一套测试(suite)由一个XML文件所表示。它能够包含一个或者多个测试,<suite> 标记来定义。 2.test由<test>标记来表示一个测试,并且可以包含一个或者多个TestNG类。 3.TestNG 类是包含至少一个TestNG annotation的java类,由<class>标签描述并包含一个或多个测试方法。 4.测试方法,就是一个普通的Java方法,在由@Test标记。 testNG.xml testNG的运行需要一个配置文件,默认为testng.xml,其描述了要运行哪些测试等配置。 编写testNG.xml如果没有书写提示,给在头部引入 <!DOCTYPE suite PUBLIC "--//beust.com//testng//testng 1.0//EN" "http://beust.com/testng/testng-1.0.dtd" >就会有提示了实践

testng.xml是testNG的配置文件,以xml格式记录测试文件,项目创建成功后并没有自动创建testng.xml文件,需要自己添加,添加步骤如下:

注意:TestNG使用的是 正则表达式,而不是通配符。注意这二者的区别

例如:"anything" 是匹配于 ".*" -- 点和星号 -- 而不是星号 "*"

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test">
    <classes>
      <class name="hongge.NewTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Groups

testNG可以将各个method存放在不同的group里面,然后运行的时候可以指定要运行的group。Group指定的方式如下:

@Test(groups = {"fast", "unit", "database" })
public voidrowShouldBeInserted() {}

实例

1.创建测试实例加法类TestSum

2.参考代码

package hongge;

/**
 * @author 北京-宏哥
 * 
 * java自动化测试交流群:694280102
 *
 * Java自动化测试框架-02 - TestNG之理论实践篇
 * 
 * 2019年10月17日
 */
public class TestSum {
    private int mytestsum;
    public int add(int num1,int num2){
        mytestsum = num1 + num2;
        return mytestsum;
    }

}

3.按照一开始的步骤创建TestNG测试业务逻辑类:NewTest

4.参考代码:

package hongge;

import org.testng.annotations.Test;
import static org.testng.Assert.assertEquals;
import hongge.TestSum;

/**
 * @author 北京-宏哥
 * 
 * java自动化测试交流群:694280102
 *
 * Java自动化测试框架-01 - TestNG之入门篇
 *
 * 2019年10月17日
 */
public class NewTest {
    private TestSum newSum = new TestSum();
 
    @Test(groups = { "t1", "t2" })
    public void f() {
        int mysum = newSum.add(1, 2);
        assertEquals(3, mysum, "Right");
        System.out.println("运行f1方法");
    }
 
    @Test(groups = { "t2" })
    public void f2() {
        int mysum = newSum.add(2, 2);
        assertEquals(3, mysum, "Right");// 错误的用例
        System.out.println("运行f2方法");
    }
 
    @Test(groups = { "t1" })
    public void f3() {
        int mysum = newSum.add(1, 2);
        assertEquals(3, mysum, "Right");
        System.out.println("运行f3方法");
    }
}

5.修改testNG.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test">
      <groups>
        <run>
            <include name ="t1"/>
        </run>
    </groups>
    <classes>
      <class name="hongge.NewTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

9.修改testNG.xml运行t2测试组,

修改XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test name="Test">
      <groups>
        <run>
            <include name ="t2"/>
        </run>
    </groups>
    <classes>
      <class name="hongge.NewTest"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 一文搞定Java热更新

    在持续交付的时代,重新部署一个新的版本只需要点击一下按钮。但在有的情况下,重新部署过程可能比较复杂,停机是不被允许的。所以JVM提供了另外一种选择:在不重启应用...

    全菜工程师小辉
  • Spring Boot 面试,一个问题就干趴下了!

    最近栈长面试了不少人,其中不乏说对 Spring Boot 非常熟悉的,然后当我问到一些 Spring Boot 核心功能和原理的时候,没人能说得上来,或者说不...

    用户5224393
  • Junit5 新特性你用过多少?

    单元测试是软件开发中必不可少的一环,但是在平常开发中往往因为项目周期紧,工作量大而被选择忽略,这样往往导致软件问题层出不穷。线上出现的不少问题其实在有单元测试的...

    用户4172423
  • 人脸识别(基于ArcFace)

    登录https://ai.arcsoft.com.cn/,注册开发者账号,身份认证,注册应用,得到APPID和SDKKEY

    用户3112896
  • 安装配置ZooKeeper及基本用法

    要想学习分布式应用,ZooKeeper是一个绕不过去的基础系统。它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。

    程序猿讲故事
  • JAVA中几种常用JSON库性能比较

    本篇通过JMH来测试一下Java中几种常见的JSON解析库的性能。每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库。但是百闻不如一见,只有自己亲...

    Java技术江湖
  • 灵活使用Maven Profile

    项目中一直应用Maven的profile特性解决不同环境的部署问题。最近在尝试解决本地调试环境的时候碰到一些问题,顺便仔细研究了一下。因为项目仍然在用普通Spr...

    程序猿讲故事
  • 安全框架 Shiro 和 Spring Security 如何选择?

    安全框架,简单说是对访问权限进行控制,应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。

    孤独键客
  • 消灭 Java 代码的“坏味道”

    代码中的"坏味道",如"私欲"如"灰尘",每天都在增加,一日不去清除,便会越累越多。如果用功去清除这些"坏味道",不仅能提高自己的编码水平,也能使代码变得"精白...

    macrozheng
  • 系列 | 漫谈数仓第三篇NO.3 『数据魔法』ETL

    ☞ ETL同步之道 [ Sqoop、DataX、Kettle、Canal、StreaSets ]

    Spark学习技巧

扫码关注云+社区

领取腾讯云代金券