zoukankan      html  css  js  c++  java
  • TestNG(一)

    详细的结介绍:

    https://blog.csdn.net/lovedingd/article/details/106784561

    这半年面试了很多候选人,大多数候选人都会在简历上写上自己公司的接口自动化框架或者UI自动化框架。在大多数框架的实现方式中,都会写到一个TestNG。然后我们展开了如下的对话。

    A:看你们这边用到了TestNG,那你对它了解多少呢?

    M:我知道这是个单元测试的框架。它比较有名的是注解。

    A:那你们有用到什么注解嘛?

    M:我们只用到了@Test……

    A:那你们@Test的参数是如何运用的呢?

    M:好像没有……

    鉴于我们在设计接口测试框架或者UI自动化框架的时候,大概率都会用到TestNG,且大多数同学对这个框架其他的应用一无所知,我们就写一个关于

    TestNG的系列。

    TestNG的官方文档:

    TestNG有几个显著且好用的特点。

    • 大名鼎鼎的注解功能,系列中会写到各个注解的作用及示例
    • 测试组的概念
    • 多线程测试
    • 支持依赖测试方法,并行测试,负载测试,局部故障

    那TestNG有以上这些特点,怎么集成进你的框架并使用呢?

    第一步:你需要确认已经配置了Java环境。

    第二步:1、项目中配置了maven,则引入以下依赖就行

    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.14.3</version>
    </dependency>
    

      

    2、如果没有maven,则可以直接引入TestNG.jar即可

    第三步:编写测试业务逻辑,在代码中插入TestNG的注解

    第四步:在TestNG对应的配置文件testng.xml或build.xml中配置测试信息

    第五步:运行TestNG即可

    前面一直提到注解的好处,那我们就从运用最广泛的@Test注解开始说起。被@Test标注的方法或者类则是我们对应的一条测试用例。如下面的代码显示,

    runTest1、runTest2分别是我们自己写的两条测试用例。

    package com.tester;
    ​
    import org.testng.annotations.Test;
    ​
    public class TestInterface {
    ​
        @Test
        public void runTest1() {
            System.out.println("@Test - runTest1");
        }
    ​
        @Test
        public void runTest2() {
            System.out.println("@Test - runTest2");
        }
    }
    

      

    @Test就这么简单?No,它的精华在于它的以下几个参数。

    • groups:组测试,一个test属于哪一个组,可以跑一个特定组的所有test
    • dependsOnMethods、dependsOnGroups:依赖测试,一个test依赖于另一个test的执行结果
    • expectedExceptions:异常测试
    • dataProvider:参数化测试,将参数传入该test
    • enabled:忽略测试,不执行该test
    • timeOut、threadPoolSize、invocationCount、successPercentage:并发测试,设置并发测试的各种参数
    • alwaysRun:如果为true的话,不管怎样都会运行

    这次先介绍TestNG的一个创新,组测试。它不存在于JUnit框架,它允许你执行一个测试组内的所有测试用例。你不仅可以声明一个测试用例属于哪个组,你也可以指定一组包含其他组。然后,TestNG可调用和要求包括一组特定的群体(或正则表达式),而排除另一个集合。这就给了我们最大的灵活性,如何分区测试,如果想运行两套不同的测试背靠背,不需要重新编译任何东西,只需要运行不同的组即可。

    package com.tester;
    ​
    import org.testng.annotations.AfterGroups;
    import org.testng.annotations.BeforeGroups;
    import org.testng.annotations.Test;
    ​
    public class TestGroup {
    ​
        @Test(groups = "appium-test")
        public void runAppium() {
            System.out.println("runAppium()");
        }
    ​
        @Test(groups = "appium-test")
        public void runAppium1() {
            System.out.println("runAppium1()");
        }
    ​
        @Test(groups = "interface-test")
        public void testConnectOracle() {
            System.out.println("testConnectOracle()");
        }
    
    ​    @Test(groups = "interface-test")
        public void testInterface() {
            System.out.println("testInterface()");
        }
    }
    

      以上代码,我们可以看到,声明了2个测试组appium-test、interface-test,每个测试组下面分别有2个测试用例。还有如下代码所示,直接将整个类归为一个测试组的情况。

    package com.tester;
    ​
    import org.testng.annotations.Test;
    ​
    @Test(groups = "selenium-test")
    public class TestSelenium {
    ​
        public void runSelenium() {
            System.out.println("runSelenium()");
        }
    ​
        public void runSelenium1() {
            System.out.println("runSelenium()1");
        }
    }
    

      那怎么运行呢?上面提到需要配置对应的testng.xml,我们将对应的testng.xml写成如下。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
    ​
    <suite name="TestAll">
    ​    <!-- 只跑selenium-test这个测试组 -->
        <test name="selenium">
            <groups>
                <run>
                    <include name="selenium-test" />
                </run>
            </groups>
    ​
            <classes>
                <class name="com.tester.TestSelenium" />
                <class name="com.tester.TestGroup" />
            </classes>
        </test>
    </suite>
    

      当然,一个测试方法或者一个类,也可以同时属于多个组。

    @Test(groups = {"appium","uiautomator"})
    public void testUI() {
        System.out.println("testUI");
    }
    

      

  • 相关阅读:
    day08 服务
    day11
    day09
    day10 多媒体(文字 图片 音频 视频)
    注意事项
    自己的memcache类
    memcache安装
    android的init过程分析
    Android.mk文件语法规范及使用模板
    【转】基于V4L2的视频驱动开发
  • 原文地址:https://www.cnblogs.com/MLing/p/14662304.html
Copyright © 2011-2022 走看看