接口自动化集成TestNG框架

接口自动化集成TestNG框架目录1.接口概念2.HTTP接口3.TestNG介绍4.TestNG注解4.1dependsOnMethods使用4.2alwaysRun使用4.2.1alwaysRun=false4.2.2alwaysRun=true4.3description使用4.4enabled使用4.4.1enabled=true4.4.2enabled=false5.TestNG.xml使用6.Before/After注解6.1xml和标签类使用例子7.TestNG传递参

目录

1. 接口概念

2. HTTP接口

3. TestNG介绍

4. TestNG注解 

4.1 dependsOnMethods标签

4.2 alwaysRun标签

4.2.1 alwaysRun = false

4.2.2 alwaysRun = true

 4.3 description使用

 4.4 enabled标签

4.4.1 enabled=true 

4.4.2 enabled = false

4.5 priority标签

5. TestNG.xml 文件的使用

5.1 TestNG xml 文件示例

5.2 package标签使用

5.2.1 package标签使用示例

 5.3 include和exclude标签

5.3.1 include和exclude标签代码示例 

 5.3.2 include和exclude标签结合group使用

5.4 parameter标签

6. Before/After注解 

6.1 xml和标签类使用例子

7. TestNG数据驱动/传递参数

7.1 Parameters注解

7.1.1 testng xml文件

7.1.2 demo 5类和parameters传递参数

7.1.3 运行结果 

7.2 Data provide 传递参数

7.2.1 Data provide 传递代码演示

8. TestNG测试报告 


1. 接口概念

1. 接口并不是java语言中的 Interface.

2. 接口是服务, 用代码实现的一段业务逻辑, 例如,登录接口, 注册接口。

3. 服务可以是任意协议(http, ducco, webservice ), 任意语言的(Java, Python, PHP).

4. 接口测试只需要指定对应协议, 无须关心后台的实现语言。

2. HTTP接口

http接口分为客户端和服务段,客户端发送请求,服务端响应请求。

URL: http://IP: PORT/xx/xx/login

请求方法: POST, GET, DELETE, PUT, PATCH

参数: mobilephone=13212312312 & pwd= 123123123

 接口自动化集成TestNG框架

3. TestNG介绍

       TestNG(Test Next Generation, 下一代测试技术)在JUnit和Nunit基础上新增了许多功能。TestNG支持单元自动化测试, 另外,它可以集成selenium, Appium和HttpClient等框架做各种类型的自动化测试。是一个测试框架, 旨在简化从单元测试到集成测试的广泛测试需求。 它提供了一系列丰富的注解(标签), 来帮助我们很方便的编写和管理测试用例和测试方法。 

       主要特点如下:

        1. 强大的注解功能。

        2. 数据驱动。

        3. 灵活的测试配置。

        4. 支持多种并发测试策略。

        5. 可以和多种工具(插件)协同使用,如eclipse, IDEA, Maven等。 

IDEA安装TestNG插件

接口自动化集成TestNG框架

test NG依赖

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

4. TestNG注解 

TestNG和其他很多Java框架(如JUnit, Spring)一样, 使用了大量的注解, 被不同的注解修饰的类,方法具有不同的含义。这里我们将注解分为四类。

1. 前置条件和后置条件

把注解作为前置条件(或初始化操作)和后置条件(或清理操作)使用。

2. 数据驱动

TestNG的特点之一是数据驱动, 即测试用例和测试数据分离,以便于维护和管理。

3. 测试用例

该分类只有一个@Test注解,@Test注解的作用是对测试用例进行控制。

4. 监听器

该分类只有一个@Listeners注解。监听器的作用是控制测试过程,如果采用默认监听器, 则不需要任何配置。如果使用自定义监听器,则需要使用@Listeners注解或者TestNG.xml进行配置。

Test注解

使用此方法注解的类将被TestNG所识别并运行。

属性: 

dependsOnMethods: 依赖的方法

alwaysRun: 设置为True时, 无论什么时候都会运行。

description: 代表测试用例描述。

enabled: 设置为false时失效

dataProvider: 数据提供者的名称

4.1 dependsOnMethods标签

dependsOnMethods代表依赖一个或者多个方法,dependsOnGroups代表依赖一个或者多个分组,一旦被依赖的测试用例执行失败,则TestNG将跳过该测试用例。

建议: 尽量不要使用dependsOnMethods或者dependsOnGroups标签,这违背了测试用例需要解耦的原则。

 Test注解可以被TestNG识别, 此处,test2的依赖test1,执行顺序是,test1, test2.

    @Test
    public void test1(){
        System.out.println("test1......");
    }

    @Test(dependsOnMethods = "test1")
    public void test2(){
        System.out.println("test2......");
    }

接口自动化集成TestNG框架

4.2 alwaysRun标签

1. test2方法的pre-condition(预先)执行条件是执行test1, dependsOnMethods = “test1″。

2. alwaysRun关键字, 设置为false时, 如果pre-condition的值失败,则影响当前方法执行。若pre-condtion的结果为成功时, 则当前方法能顺利通过。

4.2.1 alwaysRun = false

跑test2方法

 @Test
    public void test1(){
        System.out.println("test1......");
        assertEquals(true, false);//test会报错
    }

    @Test (dependsOnMethods = "test1", alwaysRun = false) //先执行test1这个case, alwaysRun=true时候,不管test1成功或者失败都会跑结果
    public void test2(){
        System.out.println("test2......");

    }

结果 : test1断言错误之后, test2不在继续执行

接口自动化集成TestNG框架

4.2.2 alwaysRun = true

跑test2测试方法

 @Test
    public void test1(){
        System.out.println("test1......");
        assertEquals(true, false);//test会报错
    }

    @Test (dependsOnMethods = "test1", alwaysRun = true) //先执行test1这个case, alwaysRun=true时候,不管test1成功或者失败都会跑结果
    public void test2(){
        System.out.println("test2......");

    }

结果 : test1断言错误之后, test2也继续执行

接口自动化集成TestNG框架

 4.3 description使用

description更像一个说明,对于当前方法业务的描述,或者说在做什么。不会有什么显示结果和影响。在结合测试报告的时候,会显示。

代表测试用例描述,控制台会打印该描述。

    @Test (dependsOnMethods = "test1", alwaysRun = true, description = "this is test2") 

 4.4 enabled标签

1. enabled=false时候,测试用例失效。

2. enabled=true时候,测试用例生效,默认也可以不写enabled.

4.4.1 enabled=true 

@Test(enabled = true)
    public void test3(){
        System.out.println("test3......");
    }

结果: 执行成功,enabled = true和默认不写的效果是一致。 

接口自动化集成TestNG框架

4.4.2 enabled = false

enabled = false时候,该测试用例失效,执行时候会跳过。打上enabled=false的情况,我们可以结合实际场景,引发如下思考:

1. 该测试用例永不复用,可以考虑直接删除该测试用例。

2. 该测试用例可能会随着需求变动在次使用,打上enabled = false标签先暂时让这部分测试用例失效,过后恢复需求在改成true,或者去掉enabled标签。

@Test(enabled = false)
    public void test3(){
        System.out.println("test3......");
    }

结果: 没有case执行,本测试用例失效。

接口自动化集成TestNG框架

4.5 priority标签

priority代表优先级,数字越小,优先级越高,默认值位0,执行顺序为0,1,2……如果级别一样,则执行顺序默认安装方法名排序。

5. TestNG.xml 文件的使用

TestNG.xml文件的作用是控制测试执行的过程,该文件可以使用Eclipse的TestNG插件自动生成。在工程右键-> TestNG-> Convert to TestNG选项,此时会弹出” Refactoring” 对话框,直接单击“Finish” 按钮, 生成testng.xml文件。IDEA如何自动生成我们后续在补充: TBD….

描述: 用来管理测试用例, 运行testNG。

suite: 套件, 项目, 最大。

test: 模块。

classes, class: 测试类。

5.1 TestNG xml 文件示例

这是一个典型的XML文件,第一行包含了XML的声明。<suite>代表一个Suite, <test>代表一个test, <classes>代表可以放多个classs, <class>代表单个class地址。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name ="Suite" parallel="false">
    <test name = "test">
        <classes>
            <class name = "com.testng.Demo"/>
            <class name = "com.testng.Demo2"/>
        </classes>
    </test>
</suite>

5.2 package标签使用

我们可以从5.1的示例中发现, 如果一个class需要一个<class>标签,那么10个class则需要10个<class>标签。如果这些class都在一个package中,则可以使用<package>进行package设置,以简化配置过程。

5.2.1 package标签使用示例

前提条件: 我们将5.1里的demo和demo2都放在com.testng包里。修改testng xml文件, 删除<classes>的标签以及内部配置,并且用包替代。

我们可以发现内容层级和classes, class比较相似,内容层级为<packages>, <package>。包层级可以放多个不同的包。大大提高了效率。运行方法也是一样,Run as -> testNG

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name ="Suite" parallel="false">
    <test name = "test">
        <packages>
            <package name="com.testng"></package>
        </packages>
    </test>
</suite>

 5.3 include和exclude标签

<include>和<exclude>标签的作用是对方法进行设置, <include>代表包含, <exclude>代表排除, 写法上他们都支持争者表达式。

5.3.1 include和exclude标签代码示例 

前提: 如我们的Demo类里有这些测试方法,分别是test1(), test2(), test3().

修改testNG xml文件, 删除<package>标签以及内部的配置,并且以方法代替。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name ="Suite" parallel="false">
    <test name = "test">
        <classes>
            <class name="com.testng.Demo">
                <methods>
                    <include name="test."/>
                    <exclude name="test3"/>
                </methods>
            </class>
        </classes>
    </test>
</suite>

执行结果:

test开头的测试方法都会执行,test3被排除在外不会执行。这就是include和exclude标签的作用。

接口自动化集成TestNG框架

 5.3.2 include和exclude标签结合group使用

include和exclude除了在<method>下使用,还可以和groups结合使用,分组运行时使用include和exclude标签。

测试方法如下:

public class Demo7 {
    @Test(groups = {"myGroup"})
    public void testCase1(){
        System.out.println("testCase1......myGroup");
    }
    @Test
    public void testCase2(){
        System.out.println("testCase2.......");
    }
    @Test(groups = {"myGroup"})
    public void testCase3(){
        System.out.println("testCase3.......myGroup");
    }
}

tesgng.xml测试文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false">
    <groups>
        <run>
            <include name="myGroup"/>
        </run>
    </groups>
    <test name="test">
        <classes>
            <class name="com.testng.Demo7">
            </class>
        </classes>
    </test>
</suite>

结果 

 接口自动化集成TestNG框架

5.4 parameter标签

<parameter>标签和@Parameters注解配合使用,可以对测试用例传递参数,达到数据分离的 效果。

测试类如下 

public class Demo8 {
    @Parameters({"myParam"})
    @Test
    public void testCase1(String param) {
        System.out.println("myParam is : " + param);
    }
}

testng xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="false">
    <parameter name="myParam" value="myParamValue"/>
    <test name="test">
        <classes>
            <class name="com.testng.Demo8"/>
        </classes>
    </test>
</suite>

 可以看到,myParam的值通过<parameter>标签和@Parameters注解配合传递给了testCase1.

接口自动化集成TestNG框架

6. Before/After注解 

注解 描述
@BeforeSuite 带此注释的方法将在该套件中所有测试运行之前运行
@AfterSuite 带此注释的方法将在该套件中所有测试运行之后运行
@BeforeTest 带此注解的方法将在任何测试方法运行之前运行
@AfterTest 带此注解的方法将在任何测试方法运行之后运行
@BeforeClass 在当前类中第一个测试方法之前运行
@AfterClass 在当前类中所有测试方法之后运行
@BeforeMethod 在每个测试方法之前运行
@AfterMethod 在每个测试方法之后运行

6.1 xml和标签类使用例子

DEMO类, 包含各个标签

package com.testng;

import org.testng.annotations.*;

import static org.testng.Assert.*;

/**
 * author 大力pig
 */
public class Demo {
    @BeforeSuite
    public void f1(){
        System.out.println("@BeforeSuite......");
    }
    @AfterSuite
    public void f2(){
        System.out.println("@BeforeSuite......");
    }

    @BeforeTest
    public void f3(){
        System.out.println("@BeforeTest......");
    }
    @AfterTest
    public void f4(){
        System.out.println("@AfterTest......");
    }

    @BeforeClass
    public void f5(){
        System.out.println("@BeforeClass......");
    }
    @AfterClass
    public void f6(){
        System.out.println("@AfterClass......");
    }

    @BeforeMethod
    public void f7(){
        System.out.println("@BeforeMethod......");
    }

    @AfterMethod
    public void f8(){
        System.out.println("@AfterMethod......");
    }

    @Test
    public void test1(){
        System.out.println("Demo test1......");
        assertEquals(true, true);//test会报错
    }

    @Test (dependsOnMethods = "test1", alwaysRun = true, description = "this is test2")
    //先执行test1这个case, alwaysRun=true时候,不管test1成功或者失败都会跑结果
    public void test2(){
        System.out.println("Demo test2......");

    }
    @Test(enabled = true)
    public void test3(){
        System.out.println("Demo test3......");
    }
}

DEMO2类,不包含各个标签。 

package com.testng;

import org.testng.annotations.Test;

import static org.testng.Assert.assertEquals;

/**
 * author 大力pig
 */
public class Demo2 {
    @Test
    public void test1(){
        System.out.println("Demo2 test1......");
        assertEquals(true, true);//test会报错
    }

    @Test (dependsOnMethods = "test1", alwaysRun = true, description = "this is test2")
    //先执行test1这个case, alwaysRun=true时候,不管test1成功或者失败都会跑结果
    public void test2(){
        System.out.println("Demo2 test2......");

    }
    @Test(enabled = true)
    public void test3(){
        System.out.println("Demo2 test3......");
    }
}

test.xml文件, 运行两个demo方法。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name ="project" parallel="false">
    <test name = "test">
        <classes>
            <class name = "com.testng.Demo"/>
            <class name = "com.testng.Demo2"/>
        </classes>
    </test>
</suite>

执行结果 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name ="project" parallel="false">
    <test name = "test">
        <classes>
            <class name = "com.testng.Demo5"/>
        </classes>
    </test>
    <parameter name="firstName" value="大力"/>
    <parameter name="lastName" value="pig"/>
</suite>

下面对运行结果进行说明:

1. 可以看出@BeforeSuite, @AfterSuite, @BeforeTest, @AfterTest, @BeforeClass 和@AfterClass控制测试的执行力度是不同的, 即Suite> Test > Class.

2. 一个测试用例(@Test修饰的Java方法)可以属于多个多组。

3. @BefoeMethod和@AfterMethod在每个@Test的测试用例前后都会执行。 

7. TestNG数据驱动/传递参数

TestNG数据驱动时/ 传递参数有两种方法:

1. Parameters注解。

2. DataProvider注解, 需要xml文件配合。

7.1 Parameters注解

步骤:

1. 定义testNG xml文件, 在文件中添加parameter参数。

2. 新建demo5类, 新建test方法,参数分别位fn和ln, 通过Parameters注解关联参数。

3. 通过testNG xml跑TestNG.

缺点: 自定义传参实现不了, 反复传参存在问题。

7.1.1 testng xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name ="project" parallel="false">
    <test name = "test">
        <classes>
            <class name = "com.testng.Demo5"/>
        </classes>
    </test>
    <parameter name="firstName" value="大力"/>
    <parameter name="lastName" value="pig"/>
</suite>

7.1.2 demo 5类和parameters传递参数

两个参数分别对应关系是 firstName-> fn, lastName-> ln.

package com.testng;

import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

/**
 * author 大力pig
 */
public class Demo5 {
    @Test
    @Parameters({"firstName", "lastName"})
    public void test1(String fn, String ln){
        System.out.println("demo5......test1......");
        System.out.println(fn + "." + ln);
    }
}

7.1.3 运行结果 

可以由testng控制台看出, lastname=大力 firstname= pig传参成功 

接口自动化集成TestNG框架

7.2 Data provide 传递参数

被@DataProvider修饰的Java方法称为数据提供者, 该方法返回一个对象二维数组, 如果一个测试用例需要该数据,那么就通过@Test注解的dataprovider方法传入数据提供者的名称。

1. Data provide也可以传递参数,功能比parameters传参更加强大。

2. 支持传递多组参数以及类型更复杂的参数。

3. 非常方便的实现数据驱动。

步骤:

1. @DataProvider定义数据源

2. 使用@Test(dataProvider = “datas”)传递参数

7.2.1 Data provide 传递代码演示

package com.testng;

import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

/**
 * author 大力pig
 */
public class Demo6 {
    @Test(dataProvider = "datas")
    public void test1(String fn, String ln){
        System.out.println("demo6......test1......");
        System.out.println(fn + "." + ln);
    }
    @DataProvider(name = "datas")
    public Object[][] datas(){
        Object[][] datas = {
  
  {"大力1","pig1"}, {"大力2", "pig2"}};
        return datas;
    }
}

8. TestNG测试报告 

       运行testNG后, 工程中会多一个test-output目录。 展开test-output目录, 在emailable-repprt.html上用鼠标右击,从弹出的快捷键菜单中选择“ Open with -> Web Browser” 选项, 此时可以看到Html格式的测试报告。

        除了默认的测试报告外,TestNG还支持与第三方测试报告的集成, 常见的包括ReportNG,Extent Reporting,和Allure等。当然,testNG也支持自定义报告。

今天的文章接口自动化集成TestNG框架分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/9894.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注