• 8-5接口测试用例设计与编写1


    1.目录

    • TestNG框架基础
    • Rest-assured框架基础
    • 接口用例编写与管理
    • 接口用例运行与维护

    2.接口测试框架选择

    常见框架(界面化工具,针对不会编码的测试人员)

    • Jmeter性能测试工具,不具备完备的接口测试框架功能
    • Robotframework
    • PostMan

    推荐框架:

    • RestAssured
    • HttpClient
    • SoapUI
    • Swagger

    Maven工程
    Maven工程标准目录结构

    目录结构目录说明
    src/main/java应用/代码源码
    src/main/resources应用/代码的资源文件
    src/main/filters资源过滤文件
    src/main/webappweb应用源码
    src/test/java测试代码
    src/test/resources测试资源
    src/test/filters测试资源过滤文件
    src/it集成测试(主要用于插件)
    src/assembly组装描述文件
    src/site网站
    LICENSE.md项目许可文件
    NOTICE.md通知文件
    README.md项目说明书
    maven常用命令
    命令功能说明
    编译:mvn compilesrc/main/java目录Java源码编译生成class,存放于target目录下
    测试:mvn testsrc/test/java目录编译,并执行用例
    清理:mvn clean删除target目录,也就是将class文件等删除
    打包:mvn package生成压缩文件:Java项目#jar包;web项目#war包,也是放在target目录下
    安装:mvn install将压缩文件(jar或war)上传到本地仓库
    部署:mvn deploy将压缩文件上传私服

    TestNG是Java中的一套测试框架,它基于JUnit思想并强化了测试注解,可以灵活应用于各种测试场景。
    @BeforeGroups:此测试组内的所有测试都运行之前
    @AfterGroups:此测试组内的所有测试都运行之后
    @BeforeClass:测试类之前运行
    @AfterClass:测试类之后运行
    @BeforeTest:测试方法前运行,只运行一次
    @AfterTest:测试方法后运行,只运行一次
    @BeforeMethod:每个测试方法之前都运行
    @AfterMethod:每个测试方法之后都运行

    创建一个maven项目,在src/test/java下新建pakcage命名为com.csj2018,并在这个package新建2个Java文件,用于熟悉testNG
    引入依赖

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

    Lesson1.java

    package com.csj2018;
    
    import org.testng.annotations.*;
    
    public class Lesson1 {
        @BeforeTest
        public void beforeTest(){
            System.out.println("@BeforeTest");
        }
        @AfterTest
        public void afterTest(){
            System.out.println("@AfterTest");
        }
        @BeforeClass
        public void setUp(){
            System.out.println("@BeforeClass 测试类运行");
        }
        @AfterClass
        public void tearDown(){
            System.out.println("@AfterClass");
        }
        @BeforeMethod
        public void beforeMethod(){
            System.out.println("@BeforeMethod");
        }
        @AfterMethod
        public void afterMethod(){
            System.out.println("@AfterMethod");
        }
        @BeforeGroups(groups = "add")
        public void beforeGroups(){
            System.out.println("@BeforeGroups");
        }
        @AfterGroups(groups = "add")
        public void afterGroups(){
            System.out.println("@AfterGroup");
        }
        @Test(groups = "add",priority = 10) //值越小,优先级越高,默认0,按方法名顺序执行
        public void test01(){
            System.out.println("@Test 测试方法test01 测试组add by Lesson1");
        }
        @Test(groups = "update",invocationCount = 5,threadPoolSize = 3,priority = 3)//invocationCount指定运行次数,threadPoolSize指定线程数即并发量
        public void test02(){
            System.out.println("@Test 测试方法test02 测试组update by Lesson1");
        }
    }
    

    Demo1.java

    package com.csj2018;
    
    import org.testng.annotations.Test;
    
    public class Demo1 {
        @Test(invocationCount = 2)
        public void test01(){
            System.out.println("@Test test01 by Demo1");
        }
    }
    

    preference-Plugins安装创建TestNG XML的插件->选中工程,右键->Create testNG XML->自动生成testng.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="All Test Suite" verbose="1">
        <test verbose="2" preserve-order="true" name="lesson1"><!--测试名称-->
            <classes>
                <class name="com.csj2018.Lesson1"><!--测试类的路径-->
                    <methods>
                        <include name="test01"/>
                        <include name="test02"/>
                        <!--<include name="afterMethod"/>-->
                    </methods>
                </class>
                <class name="com.csj2018.Demo1">
                    <methods>
                        <include name="test01"/>
                    </methods>
                </class>
            </classes>
        </test>
    </suite>
    

    执行xml文件

    创建testngGroup.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
    <suite name="All Test Suite" verbose="1">
        <test verbose="2" preserve-order="true" name="lesson1"><!--测试名称-->
            <groups>
                <run>
                    <include name="add" /><!--只跑add组-->
                </run>
            </groups>
            <classes>
                <class name="com.csj2018.Demo1" />
                <class name="com.csj2018.Lesson1" />
            </classes>
        </test>
    </suite>
    
    将run中的代码替换 ```#xml ```

    断言Hamcrest-Matchers
    对象:

    • equalTo-测试对象相等使用Object.equals方法
    • hasToString-测试Object.toString方法
    • instanceOf, isCompatibleType-测试类型
    • notNullValue, nullValue-测试null
    • someInstance-测试对象实例

    集合:

    • hasEntry, hasKey, hasValue-测试一个Map包含一个实体,key或value
    • hasItem, hasItems-测试一个集合包含一个元素
    • hasItemInArray-测试一个数组包含一个元素

    数字:

    • closeTo-测试浮点值接近给定的值

    文本:

    • equalToIgnoringCase-测试字符串相等忽略大小写
    • equalToIgnoringWhiteSpace-测试字符串忽略空白
    • containsString, endsWith, startWith-测试字符串匹配

    保险起见,先倒入依赖

            <!-- https://mvnrepository.com/artifact/org.hamcrest/hamcrest-all -->
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-all</artifactId>
                <version>1.3</version>
                <scope>test</scope>
            </dependency>
    		<!-- https://mvnrepository.com/artifact/org.hamcrest/hamcrest-core -->
    		<dependency>
    			<groupId>org.hamcrest</groupId>
    			<artifactId>hamcrest-core</artifactId>
    			<version>1.3</version>
    			<scope>test</scope>
    		</dependency>
    

    测试类

    package com.csj2018;
    
    
    import org.testng.annotations.Test;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import static org.hamcrest.Matchers.*;
    import static org.hamcrest.core.Is.is;
    import static org.hamcrest.core.IsEqual.equalTo;
    import static org.hamcrest.core.IsNot.not;
    import static org.hamcrest.core.StringContains.containsString;
    import static org.hamcrest.core.StringStartsWith.startsWith;
    import static org.junit.Assert.assertThat;
    
    public class HamcrestDemo {
        /**
         * 数值型断言
         */
        @Test
        public void testInt(){
            Integer i = 1 + 1;
    
            assertThat(i,is(2));
            assertThat(i,not(3));
        }
    
        /**
         * 字符串断言
         */
        @Test
        public void testString(){
            String a = "hello world";
            assertThat(a,equalTo("Hello World".toLowerCase()));
            assertThat(a,equalToIgnoringCase("Hello World"));
            assertThat(a,containsString("hello"));
            assertThat(a,startsWith("hello"));
        }
    
        /**
         * 数组
         */
        @Test
        public void testArray(){
            String[] a = {"丰田","本田","大众","奇瑞"};
            assertThat(a,hasItemInArray("大众"));
        }
        /**
         * 集合断言
         */
        @Test
        public void testList(){
            List<String> list = new ArrayList<String>();
            list.add("Das Auto");
            list.add("Nissan");
            list.add("Honda");
            assertThat(list,hasItem("Das Auto"));
        }
        /**
         * map断言
         */
        @Test
        public void testMap(){
            Map<String,String> map = new HashMap<>();
            map.put("大众","朗逸");
            map.put("丰田","卡罗拉");
            assertThat(map,hasEntry("大众","朗逸"));
            assertThat(map,hasKey("大众"));
            assertThat(map,hasValue("卡罗拉"));
        }
    }
    
  • 相关阅读:
    iOS开发 日常错误积累
    Linux编程---I/O部分
    Binder机制1---Binder原理介绍
    hdu4405概率dp入门
    SSL连接建立过程分析(1)
    用GDB调试程序(一)
    RBAC权限管理
    HDU3930(离散对数与原根)
    Java实现 蓝桥杯VIP 算法提高 特殊的质数肋骨
    Java实现 蓝桥杯VIP 算法提高 产生数
  • 原文地址:https://www.cnblogs.com/csj2018/p/11656376.html
Copyright © 2020-2023  润新知