精华内容
下载资源
问答
  • 软件测试入门视频教程

    万人学习 2015-01-22 16:21:44
    软件测试入门视频培训教程:该课程将带你走进“软件测试”的大门,具体内容包括软件测试环境搭建、软件开发模型、产品模型、CMM模型、测试用例、等价类划分、边界值划分、白盒测试、单元测试、bugfree搭建、系统测试...
  • 测试入门

    2017-11-28 15:38:08
    测试入门软件测试是什么? 软件测试做什么? 软件测试怎么做? 软件测试是什么? 软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间...

    测试入门

    软件测试是什么?
    软件测试做什么?
    软件测试怎么做?

    • 软件测试是什么?
      软件测试是使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
      软件测试是为了发现错误而执行程序的过程。或者说,软件测试是根据软件开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误的过程。
      V模型:强调了在整个软件项目开发中需要经历的若干个测试级别,并与每一个开发级别对应;忽略了测试的对象不应该仅仅包括程序,没有明确指出对需求、设计的测试
      V模型
      W模型:补充了V模型中忽略的内容,强调了测试计划等工作的先行和对系统需求和系统设计的测试;与V模型相同,没有对软件测试的流程进行说明
      W模型
      H模型:强调测试是独立的,只要测试准备完成,就可以执行测试
      H模型

    • 软件测试做什么
      这里写图片描述

    1.验证软件实现与需求的一致性
    2.检测软件漏洞即bug
    3.测试软件的稳定性、安全性等
    4.对软件的实施、维护、操作等进行评估
    5.对二次开发及维护进行评估

    测试用例设计方法
    黑盒测试用例设计方法包括等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。
    白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖、程序变异。
    白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。
    其他测试方法:
    回归测试、冒烟测试、α测试_Alpha测试、β测试_Beta testing、可移植性测试、用户界面(UI)测试、随机测试、本地化测试、国际化测试、安装测试、自动化测试、验收测试、动态测试、探索性测试、单元测试、集成测试、系统测试、健全测试、衰竭测试、负载测试、极限测试等。

    • 软件测试怎么做?
      功能测试
      Functional testing(功能测试),也称为behavioral testing(行为测试),根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试,用于验证应用程序或网站对目标用户能正确工作。使用适当的平台、浏览器和测试脚本,以保证目标用户的体验将足够好,就像应用程序是专门为该市场开发的一样。功能测试是为了确保程序以期望的方式运行而按功能要求对软件进行的测试,通过对一个系统的所有的特性和功能都进行测试确保符合需求和规范。
      功能测试也叫黑盒子测试或数据驱动测试,只需考虑各个功能,不需要考虑整个软件的内部结构及代码.一般从软件产品的界面、架构出发,按照需求编写出来的测试用例,输入数据在预期结果和实际结果之间进行评测,进而提出更加使产品达到用户使用的要求。
      功能测试目的和内容
      1.程序安装、启动正常,有相应的提示框、错误提示等
      2.每项功能符合实际要求
      3.系统的界面清晰、美观
      4.菜单、按钮操作正常、灵活,能处理一些异常操作
      5.能接受正确的数据输入,对异常数据的输入可以进行提示、容错处理等
      6.数据的输出结果准确,格式清晰,可以保存和读取
      7.功能逻辑清楚,符合使用者习惯
      8.系统的各种状态按照业务流程而变化,并保持稳定
      9.支持各种应用的环境
      10.能配合多种硬件周边设备
      11.软件升级后,能继续支持旧版本的数据
      12.与外部应用系统的接口有效

    系统测试
    压力测试 (Stress test)
    容量测试 (Capacity test)
    性能测试 (Performance test)
    安全测试 (Security test)
    容错测试 (Recovery test)

    压力测试、容量测试和性能测试的测试目的虽然有所不同,但其手段和方法在一定程度上比较相似,通常会使用特定的测试工具,来模拟超常的数据量、负载等,监测系统的各项性能指标,如CPU和内存的使用情况、响应时间、数据传输量等。

    压力测试
    压力测试是在一种需要反常数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈。
    异常情况主要指的是峰值(瞬间使用高峰)、大量数据的处理能力、长时间运行等情况。压力测试总是迫使系统在异常的资源配置下运行。

    容量测试
    容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。

    性能测试的目的: 为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。

    性能测试指标的来源:用户对各项指标提出的明确需求;如果用户没有提出性能指标则根据用户需求、测试设计人员的经验来设计各项测试指标。(需求+经验)

    主要的性能指标:服务器的各项指标(CPU、内存占用率等)、后台数据库的各项指标、网络流量、响应时间
    性能测试要点
    测试环境应尽量与用户环境保持一致,应单独运行尽量避免与其他软件同时使用。
    性能测试一般使用测试工具和测试人员编制测试脚本来完成。
    性能测试的重点在于前期数据的设计与后期数据的分析。
    性能测试的用例主要涉及到整个系统架构的问题,所以测试用例一旦生成,改动一般不大,所以做性能测试的重复使用率一般比较高。
    性能测试的方法和技巧
    两种负载类型
    “flat”测试
    ramp-up测试
    “Flat”测试: 对于一次给定的测试,应该取响应时间和吞吐量的平均值。精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。这称为“flat”测试。

    Ramp-up测试: 用户是交错上升的(每几秒增加一些新用户)。ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。ramp-up测试的优点是,可以看出随着系统负载的改变,测量值是如何改变的。然后可以据此选择以后要运行的flat测试的范围。

    安全性测试
    根据ISO 8402的定义,安全性是“使伤害或损害的风险限制在可接受的水平内”。
    安全性测试是检查系统对非法侵入的防范能力。
    测试人员假扮非法入侵者,采用各种办法试图突破防线。例如:
    1.想方设法截取或破译口令;
    2.专门开发软件来破坏系统的保护机制;
    3.故意导致系统失败,企图趁恢复之机非法进入;
    4.试图通过浏览非保密数据,推导所需信息等等。
    理论上讲,只要有足够的时间和资源,没有不可进入的系统。因此系统安全设计的准则是,使非法侵入的代价超过被保护信息的价值,此时非法侵入者已无利可图。

    可靠性测试
    可靠性(Reliability)是产品在规定的条件下和规定的时间内完成规定功能的能力,它的概率度量称为可靠度。
    软件可靠性是软件系统的固有特性之一,它表明了一个软件系统按照用户的要求和设计的目标,执行其功能的可靠程度。软件可靠性与软件缺陷有关,也与系统输入和系统使用有关。
    理论上说,可靠的软件系统应该是正确、完整、一致和健壮的。

    可靠性测试结果的评估
    成熟性度量可以通过错误发现率DDP(Defect Detection Percentage)来表现。在测试中查找出来的错误越多,实际应用中出错的机会就越小,软件也就越成熟。
    DDP=测试发现的错误数量/已知的全部错误数量
    已知的全部错误数量是测试已发现的错误数量加上可能会发现的错误数量之和。

    容错性测试
    容错性测试是检查软件在异常条件下自身是否
    具有防护性的措施或者某种灾难性恢复的手段。
    包括两个方面:
    输入异常数据或进行异常操作,而不会导致系统出错甚至崩溃。
    灾难恢复性测试。让软件强制性地发生故障,然后验证系统已保存的用户数据是否丢失、系统和数据是否能尽快恢复。

    回归测试的目的
    所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等;
    不影响软件原有功能的正确性。

    回归测试的方法
    再测试全部用例
    基于风险选择测试
    基于操作剖面选择测试
    再测试修改的部分

    ISTQB的“测试七项基本原则”:
    原则1:测试指出缺陷的存在——测试没有
    发现缺陷并不意味着不存在缺陷
    原则2:穷尽测试是不可能的
    原则3:测试要尽早介入
    原则4:缺陷集群性——大多数缺陷总是发
    生在少量模块/特性上
    原则5:杀虫剂悖论
    原则6:测试活动依赖于测试Context
    原则7:“Absence-of-errors ”(无错就是好)谬误

    • 心得
      IXIA
      这里写图片描述
      这里写图片描述
      这里写图片描述
      Spirent
      这里写图片描述
      这里写图片描述

    • 目前测试技术
      1、SIPP
      SIPp是一个测试SIP协议性能的工具软件,它包含了一些基本的SipStone用户代理工作流程(UAC和UAS),并可使用INVITE和BYE建立和释放多个呼叫。它也可以读XML的场景文件,即描述任何性能测试的配置文件。它能动态显示测试运行的统计数据(呼叫速率、信号来回的延迟,以及消息统计)。周期性地把CSV统计数据转储,在多个套接字上的TCP和UDP,利用重新传输管理的多路复用。在场景定义文件中可以使用正规表达式,动态调整呼叫速率。SIPp可以用来测试许多真实的SIP设备,如SIP代理,B2BUAs,SIP媒体服务器,SIP/x网关,SIP PBX,等等,它也可以模仿上千个SIP代理呼叫你的SIP系统。
      2、TESTCOMPLETE 7
      TestComplete是AutomatedQA公司开发的一套支持自动测试软件的工具。在当今的软件开发中,自动测试非常重要,大型软件开发公司很久以来就已经将其作为软件开发的一项重要环节。然而,自动测试软件一般成本较高而且不易使用,很难在小型公司内推广。 TestComplete为Windows、.NET、Java和Web应用程序提供了一个特性全面的自动测试环境。将开发人员和QA部门人员从繁琐耗时的人工测试中解脱出来。 TestComplete测试具有系统化、自动化和结构化特性,支持。NET,Java,Visual C++, Visual Basic, Delphi, C++Builder 和web应用程序。
      3、QTP
      QTP是quicktest Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等

    • 目前性能与自动化测试方案
      RTP性能
      这里写图片描述
      测试流程:模拟240个SIP号码,120方呼叫120方
      测试功能点:注册数、并发数、呼损、接通时间等

    DispLDF稳定性
    这里写图片描述
    测试流程:SIPP发起方模拟用户呼叫接入号,SIPP接收方模拟调度员接听来电,每次呼入4个
    测试功能点:最大调度员在线稳定性

    领导台&Switch稳定性
    这里写图片描述
    测试流程:TestComplete/QTP录制组呼过程,SIPP作为组呼成员和绑定电话进行自动接听,进行循环组呼测试
    测试功能点:领导台和Switch的稳定性

    快捷键

    • 加粗 Ctrl + B
    • 斜体 Ctrl + I
    • 引用 Ctrl + Q
    • 插入链接 Ctrl + L
    • 插入代码 Ctrl + K
    • 插入图片 Ctrl + G
    • 提升标题 Ctrl + H
    • 有序列表 Ctrl + O
    • 无序列表 Ctrl + U
    • 横线 Ctrl + R
    • 撤销 Ctrl + Z
    • 重做 Ctrl + Y
    展开全文
  • IntelliJ IDEA单元测试入门

    万次阅读 多人点赞 2016-08-09 20:10:17
    参考文章地址地址:JUnit4单元测试入门教程 IDEA单元测试及代码覆盖率 IDEA添加jar包的三种方式 本文按以下顺序讲解JUnit4的使用 下载jar包单元测试初体验自动生成测试类执行顺序@Test的属性

    参考文章地址地址:JUnit4单元测试入门教程

                                    IDEA单元测试及代码覆盖率

                                                    IDEA添加jar包的三种方式

     

     

    本文按以下顺序讲解JUnit4的使用

    • 下载jar包
    • 单元测试初体验
    • 自动生成测试类
    • 执行顺序
    • @Test的属性
    • 代码覆盖率

    下载jar包

    在github上,把以下两个jar包都下载下来。下载地址:点击打开链接

     

    下载junit-4.12.jar,junit-4.12-javadoc.jar(文档),junit-4.12-sources.jar(源码)。

     

    下载hamcrest-core-1.3.jar,hamcrest-core-1.3-javadoc.jar(文档),hamcrest-core-1.3-sources.jar(源码)。

     

    最前面那个pom是Maven的配置文件,如果你需要的话也下载下来。

     

    单元测试初体验

    先创建个简单的项目体验下单元测试是怎么一回事吧。

    我创建一个项目叫JUnit4Demo,刚创建好的工程目录如下图,然后在External Libraries中导入刚下载的那两个jar包。

                            

    通过Libraries添加Jar包

    1.打开 File -> Project Structure ->Modules-> 在Dependencies 下添加jar包

                  

    2、+ -> Library... -> java -> 选择jar的路径添加。   添加jar包后如下图所示。

                       

    3、创建一个类com.hera.util.Math,然后输入一个求阶乘的方法:

                        

    4、创建一个队Math方法的单元测试:

            创建一个和src同级别的文件夹叫test(逻辑代码放src里,测试代码放test里是个好习惯)。
            接着在IntelliJ IDEA里还要把这个test文件夹要设置成测试文件的根目录,右键选中
            Mark Directory As - Test Sources Root。

                                         
               创建一个测试类:

                IntelliJ IDEA提供了一个快捷操作Cmd + Shift + T作为类和测试之间的导航。同时允许用户在那里创建一个测试类。IntelliJ IDEA提供了一个快捷操作Cmd + Shift + T作为类和测试之间的导航。同时允许用户在那里创建一个测试类。

              为测试类MathTest添加测试方法:

                  

                     

                    运行: run MathTest 。右下方一条绿色条说明测试通过,如果把120改成别的数字那么就会测试不通过显色红色条。JUnit4有一句话叫:“keeps the bar green to keep the code clean”。

            解释一下MathTest,就六个地方要讲:
                      第一,导入了org.junit.Test;和org.junit.Assert.*;这两个包,注意后者是静态导入import static。
                      第二,testFactorial是在要测试的方法名Factorial前加个test(这也是个好习惯)。
                      第三,所有测试方法返回类型必须为void且无参数。
                      第四,一个测试方法之所以是个测试方法是因为@Test这个注解。
                      第五,assertEquals的作用是判断两个参数是否相等,例子中120是预期结果,new Math().factorial(5)是实                              际结果。但是通常不应该只比较一个值,要测试多几个特殊值,特别是临界值。

                                例如Math().factorial(0)和Math().factorial(-1)等。
                     第六,assertEquals除了比较两个int,还重载了好多次可以比较很多种类型的参数。而且JUnit4包含一堆                                assertXX方法,assertEquals只是其中之一,这些assertXX统称为断言。刚不是下载了junit-4.12-                                 javadoc.jar这个文档吗,解压后打开index.html如下图还有一堆断言。

                       

          

    执行顺序

     

    JUnit4利用JDK5的新特性Annotation,使用注解来定义测试规则。
    这里讲一下以下几个常用的注解:

    • @Test:把一个方法标记为测试方法
    • @Before:每一个测试方法执行前自动调用一次
    • @After:每一个测试方法执行完自动调用一次
    • @BeforeClass:所有测试方法执行前执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
    • @AfterClass:所有测试方法执行完执行一次,在测试类还没有实例化就已经被加载,所以用static修饰
    • @Ignore:暂不执行该测试方法

     

    我们来试验一下,我新建一个测试类AnnotationTest,然后每个注解都用了,其中有两个用@Test标记的方法分别是test1和test2,还有一个用@Ignore标记的方法test3。然后我还创建了一个构造方法,这个构造方法很重要一会会引出一个问题。
    具体代码如下:

    
    package com.xuhongchuan.util;
    
    import org.junit.*;
    import static org.junit.Assert.*;
    
    /**
     * Created by xuhongchuan on 2015/7/18.
     */
    public class AnnotationTest {
    
        public AnnotationTest() {
            System.out.println("构造方法");
        }
    
        @BeforeClass
        public static void setUpBeforeClass() {
            System.out.println("BeforeClass");
        }
    
        @AfterClass
        public static void tearDownAfterClass() {
            System.out.println("AfterClass");
        }
    
        @Before
        public void setUp() {
            System.out.println("Before");
        }
    
        @After
        public void tearDown() {
            System.out.println("After");
        }
    
        @Test
        public void test1() {
            System.out.println("test1");
        }
    
        @Test
        public void test2() {
            System.out.println("test2");
        }
    
        @Ignore
        public void test3() {
            System.out.println("test3");
        }
    
    }

    运行结果如下:

    BeforeClass
    构造方法
    Before
    test1
    After
    构造方法
    Before
    test2
    After
    AfterClass

     

            解释一下:@BeforeClass和@AfterClass在类被实例化前(构造方法执行前)就被调用了,而且只执行一次,通常用来初始化和关闭资源。@Before和@After和在每个@Test执行前后都会被执行一次。@Test标记一个方法为测试方法没什么好说的,被@Ignore标记的测试方法不会被执行,例如这个模块还没完成或者现在想测试别的不想测试这一块。
           以上有一个问题,构造方法居然被执行了两次。所以我这里要说明一下,JUnit4为了保证每个测试方法都是单元测试,是独立的互不影响。所以每个测试方法执行前都会重新实例化测试类。
          我再给你看一个实验:

     

     

     

     

          添加一个成员变量

     

     

    
    int i = 0;

     

    然后把test1改为:

        i++;
        System.out.println("test1的i为" + i);

    test2改为:

        i++;
        System.out.println("test2的i为" + i);

    执行结果:

    BeforeClass
    构造方法
    Before
    test1的i为1
    After
    构造方法
    Before
    test2的i为1
    After
    AfterClass

     

           可以看到test1和test2的i都只自增了一次,所以test1的执行不会影响test2,因为执行test2时又把测试类重新实例化了一遍。如果你希望test2的执行受test1的影响怎么办呢?把int i改为static的呗。

            最后关于这些注解还有一个要说明的就是,你可以把多个方法标记为@BeforeClass、@AfterClass、@Before、@After。他们都会在相应阶段被执行。

     

     

    @Test的属性

     

    最后来说一下@Test的两个属性

    • excepted
    • timeout
      excepted属性是用来测试异常的,我们回到Math类,拿其中的求阶乘方法factorial()来说。如果传进来一个负数我们是希望抛出异常的,那要测试会不会抛异常怎么办呢?
      我在测试类MathTest添加一个测试方法:    
    •                

              这个方法就是(expected = Exception.class)和fail("factorial参数为负数没有抛出异常");之间的配合。就是这个测试方法会检查是否抛出Exception异常(当然也可以检测是否抛出其它异常),如果抛出了异常那么测试通过(因为你的预期就是传进负数会抛出异常)。没有抛出异常则测试不通过执行fail("factorial参数为负数没有抛出异常");

     

     

             然后说下timeout属性,这个是用来测试性能的,就是测试一个方法能不能在规定时间内完成。
    回到Math类,我创建一个数组排序的方法,用的是冒泡排序。

     

     

            
    public void sort(int[] arr) {
        //冒泡排序
        for (int i = 0; i < arr.length - 1; i++) { //控制比较轮数
    
            for (int j = 0; j < arr.length - i - 1; j++) { //控制每轮的两两比较次数
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }
          然后偶在测试类MathTest创建测试方法,随机生成一个长度为50000的数组然后测试排序所用时间。timeout的值为2000,单位和毫秒,也就是说超出2秒将视为测试不通过。
    @Test(timeout = 2000)
    public void testSort() throws Exception {
        int[] arr = new int[50000]; //数组长度为50000
        int arrLength = arr.length;
        //随机生成数组元素
        Random r = new Random();
        for (int i = 0; i < arrLength; i++) {
            arr[i] = r.nextInt(arrLength);
        }
    
        new Math().sort(arr);
    }
          运行结果测试不通过,且提示TestTimedOutException。
          那怎么办,修改代码提升性能呗。回到Math方法改为下sort()。这次我用快速排序,代码如下:
    public void sort(int[] arr) {
        //快速排序
        if (arr.length <= 1) {
            return;
        } else {
            partition(arr, 0, arr.length - 1);
        }
    }
    
    static void partition(int[] arr, int left, int right) {
        int i = left;
        int j = right;
        int pivotKey = arr[left]; //基准数
    
        while (i < j) {
            while (i < j && arr[j] >= pivotKey) {
                j--;
            }
    
            while (i < j && arr[i] <= pivotKey) {
                i++;
            }
    
            if (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    
        if (i != left) {
            arr[left] = arr[i];
            arr[i] = pivotKey;
        }
    
        if (i - left > 1) {
            partition(arr, left, i - 1);
        }
    
        if (right - j > 1) {
            partition(arr, j + 1, right);
        }
    
    }
             然后再运行一下测试类MathTest,绿色条出现了,测试通过妥妥的。

     

     

    编辑测试设置

           我们可以通过Run → Edit Configurations或工具栏上的标签来调整我们的测试运行配置。

            

     

           在Configuration选项卡,用户可以选择需要运行的测试。例如,您可以从一个类、程序包、测试套件或甚至模式中运行所有的测试。这里的Fork模式让用户在一个单独的进程运行每个测试。

     

            在代码覆盖标签你可以调整覆盖率设置。目前IntelliJ IDEA支持两种测量覆盖率引擎。默认情况下它使用自己的引擎,当然用户也可以选择JaCoCo引擎。用户也可以在这里选择覆盖率模式。Tracing{span{ mode模式会增加消耗,但测量会更精确。

                     

    运行覆盖

             收集覆盖率,用户需要通过Run → Run 'MyClassTest' with Coverage或工具栏上的选项运行特定模式的测试。

            当覆盖模式运行至少一个测试之后,IDE将会在Project工具窗口显示每个程序包、类的覆盖率数据,同时在Coverage工具窗和编辑器中也会显示。

             

     

    编辑器中的覆盖率

    如果用户添加另一个方法到MyClass,并运行覆盖率测MyClass,就会发现,没有被测试覆盖到的代码都将高亮显示为红色。覆盖的代码颜色则是绿色。如果一些代码是只覆盖部分,那没将显示为黄色。

     
     

     

           

     

    展开全文
  • 1、本课程针对JMETER软件性能测试八大组件:配置元件、前置处理器、定时器、sampler(采样器)、后 置处理器、断言、监听器以及逻辑控制器等内容全方位讲解。 2、参数化、badboy测试脚本开发以及...
  • 接口测试入门

    万次阅读 2020-06-02 15:26:39
    说起接口测试,网上有很多例子,但是当初做为新手的我来说,看了不不知道他们说的什么,觉得接口测试,好高大上。认为学会了接口测试就能屌丝逆袭,走上人生巅峰,迎娶白富美。因此学了点开发知识后,发现接口测试...

    说起接口测试,网上有很多例子,但是当初做为新手的我来说,看了不不知道他们说的什么,觉得接口测试,好高大上。认为学会了接口测试就能屌丝逆袭,走上人生巅峰,迎娶白富美。因此学了点开发知识后,发现接口测试其实都是人们玩的名词罢了。接口测试,真心很简单。它只不过是数据传递是一种表现而已。

    请求模型

    ​ 看下图中“A”线,可以理解为接口就是一个电灯的开关,它在接口里面给你提供了一个参数,参数的值一个是“开”,一个是“关”。

    ​ 说起来,怎么才能让灯亮?一个灯头接两根线,一根线接火线,一根线接零线这时灯就亮了。反之,不接零线、火线灯就灭了。

    ​ 其实接口呢,就把这些复杂的操作简化了,让你看到的就只有一个开关,而你来操作这个开关就好了。我们做接口测试也只需要测试这个开关就完成任务了,接口测试就是这么简单。

    1. 当你访问“http://127.0.0.1:8080/light?opt=open”,让零线、火线连通,此时灯亮。
    2. 当你访问“http://127.0.0.1:8080/light?opt=close”,让零线、火线断开,此时灯灭。

    请求结构

    ​ 看到这里我们大致就明白了接口测试是怎么一回事了。接下来需要理解一下HTTP的URL是怎么组成为一个接口的。如图:

    1. 一个URL就是一个接口:接口大致会分为一下几个部分:

      1. 请求协议:

        • http — 普通的http请求
        • https — 加密的http请求,传输数据更加安全
        • ftp — 文件传输协议,主要用来传输文件
      2. 请求IP:就是指提供接口的系统所部署的服务器地址

      3. 请求端口:如果不填端口,默认是80,否则需要填写端口号

      4. 接口路径:指系统提供的接口在什么位置

      5. 接口参数:参数在接口路径后,用“?”来表示路径地址完了,剩下的都是参数了,用“&”来区分参数个数,

        如下示例:

        http://127.0.0.1:8080/light?opt=open&use=yy&pwd=123456

        假设要操作这个灯,需要用户密码,则可以增加新的参数”use”、”pwd”,用”&”来隔开。可以看到这个示例有3个参数:

        • “opt”:”open”
        • “use”:”yy”
        • “pwd”:”123456”
      6. 接口HTTP参数【url看不见等隐藏参数】

        • http请求方式

          GET --- 通过请求URI得到资源
          POST --- 用于添加新的内容
          PUT --- 用于修改某个内容
          DELETE --- 删除某个内容
          CONNECT --- 用于代理进行传输,如使用SSL
          OPTIONS --- 询问可以执行哪些方法
          PATCH --- 部分文档更改
          PROPFIND (wedav) --- 查看属性
          PROPPATCH (wedav) --- 设置属性
          MKCOL (wedav) --- 创建集合(文件夹)
          COPY (wedav) --- 拷贝
          MOVE (wedav) --- 移动
          LOCK (wedav) --- 加锁
          UNLOCK (wedav) --- 解锁
          TRACE --- 用于远程诊断服务器
          HEAD --- 类似于GET, 但是不返回body信息,用于检查对象是否存在,以及得到对象的元数据
          
        • http请求头

          请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度。示例:

          Accept:image/gif.image/jpeg./
          Accept-Language:zh-cn
          Connection:Keep-Alive
          Host:localhost
          User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
          Accept-Encoding:gzip,deflate.
          
        • http请求体

          请求体就是请求等正文了,可以有很多种请求体。

          • json格式
          • xml格式
          • html格式
          • 二进制格式( 多数用于图片 )
          • 字符串格式

    ​ 看到上面的请求结构,就能接口测试了,只需要修改接口的参数,就可以像功能测试一样测了。可以用功能测试设计用例的方法来设计接口测试的用例。可以使用各种测试用具辅助测试,下图为“postman”测试工具。

    接口的请求会发向哪里

    我们可以看看这样一个接口,用Java的Servlet怎么来实现

    package com.yy.test;
    
    import net.sf.json.JSONObject;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    // 接口的名称与路径,urlPatterns中的/light,就是说在输入地址与ip后,定义的接口名字http://127.0.0.1:8080/light 
    @WebServlet(name = "light", urlPatterns = "/light")
    public class light extends HttpServlet {
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // 获取opt的值 
            String opt = request.getParameter("opt");
    
            // 新建返回json的对象 
            JSONObject json = new JSONObject();
    
            // 判断opt有没有值 
            if (null != opt) {
    
                // 定义返回的请求头,类型是json,编码是utf-8 
                response.setContentType("application/json; charset=UTF-8");
    
                // 定义返回的对象,用它来将json输出 
                PrintWriter out = response.getWriter();
    
                // 判断opt的值是不是open 
                if ("open".equals(opt)) {
                    json.put("msg", "开灯啦!");
                    out.println(json);
                }
    
                // 判断opt的值是不是close 
                else if ("close".equals(opt)) {
                    json.put("msg", "关灯啦!");
                    out.println(json);
                }
            }
        }
    }
    

    上面的代码大致做了如下几个操作:

    1. 获取opt的值
    2. 判断获取的opt的值

      • 如果是”open”就返回”开灯啦!”
      • 如果是”close”就返回”关灯啦!”

        看到上面的代码,就能发现,我们将opt的值,传进”http://127.0.0.1:8080/light“这个接口中,当你拿到你想要的值,想做什么都可以了,对吧。我这边的代码就是简单的进行了返回,当你访问了我“开灯”的接口,我就直接告诉你“开灯了” ( 其实我什么都没做,这已经算是一个BUG了。所以测试接口要看看它到底生效了没有,也就是说,灯真的开了吗?),我们做接口测试,需要开发提供接口文档。最重要的有一下几点:

    3. 被测接口的地址

    4. 接口参数,以及各个参数的说明
    5. 必要的http头与http体 ( http头是可以自定义的,可以用来校验是否是自己人访问 )
    6. 接口返回什么值,以及各个返回值的说明
    7. 接口是干什么的

    确定了这些,才能做好接口测试。好的接口文档如下:

    复杂一点的接口,RESTful

    一个用户接口可以通过以下4种不同方式的请求,来做不同的事情:

    1. 获取用户信息
    2. 创建用户
    3. 修改用户
    4. 删除用户

    你完全可以像“灯”的那个例子,用GET请求来传递不同的参数来实现,但是这样如果接口多了,就会很混乱,很难管理。

    这时,我们需要一种规则:

    1. 当用“GET”方式时,只用来获取数据,成功了返回http状态码200
    2. 当用“POST”方式时,只用来创建数据,成功了返回http状态码201
    3. 当用“PUT”方式时,只用来修改数据,成功了返回http状态码203
    4. 当用“DELETE”方式时,只用来删除数据,成功了返回http状态码204
    5. 当请求发送失败,返回http状态码400

    这样子的规则,我们称它为“RESTful”标准。

    下图是RESTful的状态码返回

    5. 接口测试

    前面的搞清楚了,接口测试就简单了,其实就是几个步骤。

    1. 拿到接口的url地址
    2. 查看接口是用什么方式发送
    3. 添加请求头,请求体
    4. 发送查看返回结果,校验返回结果是否正确

    这个是正常的一套流程,异常的情况,就不用我多说来吧。比如参数不传值呀,传的值不正确呀,明明要求用"GET"请求发送,偏要用"POST"请求发送呀。等等有很多异常情况,一般懂功能测试都能想到很多的异常情况,这里不再举例来。

    下面我以百度翻译的接口为例子:

    请求地址:http://fanyi.baidu.com/v2transapi

    请求方式:POST

    请求参数:

    ​ from — 哪国语言

        to --- 翻译成哪国语言
    
        query --- 翻译都内容
    

    ​ 我使用Python语言来进行接口测试,使用”requests”库来编写代码比较简答易懂,如果没有安装”requests”库,可以打开cmd,输入”pip install requests”来安装

    import requests
    
    # 接口的url 
    url = "http://fanyi.baidu.com/v2transapi"
    
    # 接口的参数 
    params = { 
        "from":"en", 
        "to":"zh", 
        "query": "test"
    }
    
    # 发送接口 
    r = requests.request("post", url, params=params)
    
    # 打印返回结果 
    print(r.text)
    
    # 其实到上面就已经完了,因为百度不是我自己写的接口,为了让结果看的更加清楚一点,我取来翻译的字段 
    import json
    d = json.loads(r.text)
    print(d['liju_result']['tag'])
    返回结果
    
    ['试验', '测验', '考验', '化验', '考查', '受试验', '受测验', '受考验', '测得结果']
    
    
    可以试着将"query"的参数改成"student",返回结果也随之改变
    
    import requests
    
    url = "http://fanyi.baidu.com/v2transapi"
    params = { 
        "from":"en", 
        "to":"zh", 
        "query": "student" # 我改了这里 
    }
    
    r = requests.request("post", url, params=params)
    
    import json
    d = json.loads(r.text)
    print(d['liju_result']['tag'])
    返回结果
    
    ['中学生', '学生', '大学生', '研究者', '学者']
    

    ​ 当然,要是不懂代码,也可以使用工具进行测试,只要记住填写的几个点,就可以做好接口测试,下图是使用”postman”进行测试:

    1. 输入发送方式”POST”
    2. 输入测试地址”http://fanyi.baidu.com/v2transapi
    3. 输入下图红框参数
    4. 点击”send”,查看返回结果

     接口测试就是这么简单

    接口测试用例

    接口测试用例的设计就没什么好讲的了,与功能测试一样设计就好了。我是用Excel来编写的,主要是为了方便管理,只要写的干净,让人看的很舒服就好了。我自己设计的用例是这样的:

    1. 一个模块对应一个Excel表
    2. 一条接口对应一张sheet表
    3. 表中一行对应一条测试用例
    4. 在开始要注明测试时需要的sql,如下图开始我会创建用户,用完了我会删除

    这样的用例比较好管理,如图:

    整个接口测试就这么多了。接口测试其实很简单,在功能测试眼里,接口测试那么高大上,其实不也过如此了。

    展开全文
  • PHP单元测试入门

    2017-12-26 11:23:25
    PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP单元测试入门PHP...
  • 前端测试入门

    千次阅读 2017-07-06 12:42:47
    前端测试入门

    前端测试入门

    1. TDD与BDD http://joshldavis.com/2013/05/27/difference-between-tdd-and-bdd/
    2. express+ejs
      http://www.cnblogs.com/zhongweiv/p/nodejs_express.html
    3. xtemplate 客服
      https://github.com/xtemplate/xtemplate/blob/master/docs/tutorial/server-xtemplate.md
    4. 开发npm模块
      https://sfantasy.gitbooks.io/node-in-action/content/zh/npm-package/validator.html
    5. 美化输出
      https://sfantasy.gitbooks.io/node-in-action/content/zh/cli/output.html
    6. phantomjs + casperjs 抓取网页截图
      http://blog.csdn.net/kunshan_shenbin/article/details/39128477
    7. phantomjs+casperjs實現浏覽器自動化測試實踐
      http://www.wnqzw.com/article/18537.html
    8. !!前端自动化测试工具 overview
      http://imweb.io/topic/56895ae54c44bcc56092e40a
    9. !!Node.js + Express 构建网站预备知识
      http://www.cnblogs.com/zhongweiv/p/nodejs_express_webapp1.html
    10. PhantomJS快速入门教程
      http://www.tuicool.com/articles/beeMNj/
    11. node学习路线图
      http://www.open-open.com/lib/view/open1403574545233.html
    12. 管理 node 版本,选择 nvm 还是 n
      http://taobaofed.org/blog/2015/11/17/nvm-or-n/
    13. Node.js 包教不包会
      https://github.com/alsotang/node-lessons
    14. npm命令
      http://www.cnblogs.com/linjiqin/p/3765772.html
    15. 技术对比
      https://www.douban.com/note/334051223/
      http://www.alloyteam.com/2015/06/qian-duan-ce-shi-hui-gu-ji-wo-men-wei-shi-me-xuan-ze-karma/
    16. !!!前端测试
      http://taobaofed.org/blog/2016/01/08/karma-origin/
    17. While Mocha has a built-in support for running the tests from the command-line via Node.js, in some cases you still want to verify your code with the real web browsers. The easiest way to do that with by using Karma to automatically launch the browsers, control them, and execute the tests. The repository github.com/ariya/coverage-mocha-istanbul-karma shows a simple example on how to do this.
    18. socket.io封装了websocket,同时包含了其它的连接方式,比如Ajax。原因在于不是所有的浏览器都支持websocket,通过socket.io的封装,你不用关心里面用了什么连接方式。你在任何浏览器里都可以使用socket.io来建立异步的连接。socket.io包含了服务端和客户端的库,如果在浏览器中使用了socket.io的js,服务端也必须同样适用。如果你很清楚你需要的就是websocket,那可以直接使用websocket。
    19. NodeJS与PhantomJS通讯
      http://www.cnblogs.com/justany/p/3279717.html

    答辩讲稿

    背景

    • 必要性:随着应用规模的增大,在复杂的网络环境和浏览器环境下,前端开发的自测、QA测试以及 Code Review 都是不够的
    • GUI:GUI的存在也使得GUI软件更复杂、更难以测试。UI层面迭代快变化大,这是很多项目没有开发测试的原因。区别于服务端代码,GUI软件测试还需要考虑界面回归测试和功能测试。
      存在问题,比如编写和维护测试用例,需要花费时间,而且UI层面迭代快变化大,这是很多项目没有开发测试的原因。但是对于基础组件和基础工具,使用者会发现,前端自动化测试及持续集成具有的难以取代的好处。
      Alt text
    • 在一些特殊的情况下,实现前端自动化测试及持续集成需要考虑到测试环境,如是否跨域,日常线上等;需要考虑到性能问题,如测试系统的性能会受本地机器的影响,能否同时测试多个承受大型项目的压力测试等;需要考虑到可用性问题,为了代替手工的测试,是否建立通过仓库地址来执行测试,然后建立测试脚本来调用测试工具,这就要求仓库和脚本对测试平台来说是可访问的,一些私有仓库需要考虑这一点;测试脚本的编写:脚本的测试内容对使用者有技术门槛和较高的学习成本。
      Alt text

    技术

    Node.js是一个网络应用的运行环境,可用于服务器端, 是开放源代码的,是跨平台的。他诞生的目的是为了实现高性能Web服务器,其优越性在于事件机制和异步IO模型,而不是JS。
    Alt text
    测试主要使用到的工具是测试框架、断言库以及代码覆盖率、界面回归测试、功能测试和持续集成工具。
    Alt text
    Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架。 socket.io封装了websocket,同时包含了其它的连接方式,比如Ajax。
    Alt text

    Npm是Nodejs的附带的运行在命令行下的包管理器,Grunt是JavaScript 世界的构建工具。任务运行器会根据Gruntfile 文件自动读取文件中的正确配置好的任务,
    Alt text

    每个模块的开发类似,下面将以单元测试的模块设计为例。开发一个NPM模块,首先需要建立一个包的目录,以Mocha的部分结构为例:
    |- lib/
    |- test/
    |- package.json
    |- index.js
    |- README.md
    对于需要在浏览器下运行或者运行在node中当时结构较简单的模块,可以把index.js代码放在根目录下。也可以选择把所有实现代码放在src文件夹内,这样有利于项目的可扩展性,这样index.js作为所在模块的入口文件存在。在CommonJS的模块系统中,module.exports可以输出一个函数,也可以输出一个对象。各模块的调用依赖于:
    module.exports = require(‘./lib’);
    模块编写好后,可以通过node ./lib/ index.js来测试、运行一下在lib文件夹中创建的一个index.js模块,以及刚刚编写的代码。到这里,模块的开发工作基本完成。开发完成后通过npm link命令,执行该命令后可以将当前的NPM包链接到存放系统中NPM模块的文件夹。假设我们在package.json文件中将name命名为myModule,并且调用var myModule= require(‘myModule’);,就可以通过“myModule”调用模块了。
    Alt text

    展开全文
  • CTS 测试 入门

    千次阅读 2017-12-29 17:14:07
    CTS 测试 入门下载CTS对应工具 如果可以翻墙,直接登录兼容性测试套件下载对应版本的 我这次使用的是7.1.2的android 版本,于是就下载了对应7.1版本(700多M) 然后检查自己手机芯片架构是ARM 还是 x86,澎湃S1是...
  • JMH微基准测试入门案例

    万次阅读 2020-05-08 17:05:08
    微基准测试,他是测试某个方法的性能到底是好还是不好。 这个测试框架是2013年发出来的,有JLT开发人员开发,后来归到OpenJDK下面。 官网:http://openjdk.java.net/projects/code-tools/jmh/ 下面介绍什么是JMH...
  • 接口测试 | 接口测试入门

    万次阅读 多人点赞 2018-02-24 13:08:37
    接口测试讲义 1. 接口测试的类型 主要包含三种测试: Web接口测试, 应用程序接口(API, application programming interface)测试, 数据库测试。 实际上意义就是UI界面到数据库之间,数据流...
  • 【APP自动化测试】Monkey测试入门

    千次阅读 多人点赞 2018-08-17 12:30:57
    Monkey测试入门 今天开始学习monkey,记录一下整个流程一遍后面温习 本文目录:[TOC] - 测试步骤 - 常用命令 - 参数详解 测试步骤: 1. 安装JDK及SDK并且配置其环境: 1.1 JDK安装及java环境配置 ...
  • 性能测试入门教程.ppt

    2018-08-17 17:00:21
    性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试入门,性能测试...
  • jmeter性能测试入门

    2020-01-31 20:10:35
    1:本课程针对计划使用jmeter做性能测试的同学 2:课程分为七个章节。从性能测试基础理论开始,到异常信息调整结束。内容大致如下
  • 用Python进行gRPC接口测试入门
  • 内存测试入门

    千次阅读 2018-06-27 19:48:27
    1.1新手入门当软件实现了新功能后,准备发布版本前,往往需要进行一轮性能测试以确定没有性能问题,这类测试通常包括功能的流畅度,电量消耗和内存使用情况等。由于内存组成的复杂性,实际上并没有简单通用的方法就...
  • JMock测试入门

    千次阅读 2012-01-31 18:31:11
    JMock测试入门 博客分类: java 虚拟机UPjunitEclipseServlet 一、介绍  JMock是一个使用模拟对象机制测试Java代码的开发包。模拟对象(Mock Object)可以取代真实对象的位置,用于测试一些与真实对象...
  • JMockit Mock测试入门详解

    千次阅读 2016-09-02 20:33:06
    JMockit Mock测试入门详解,简单介绍了JMockit的使用方法
  • Web渗透测试入门教程

    2017-11-16 21:06:00
    学校今年对比赛格外重视,暑假从7...我为学生们安排的集训内容是Web渗透测试入门,这部分内容与比赛关联性其实并不是太大,但却有助于激发学生兴趣,引导他们入门。在讲课过程中我同步录制了视频,并已经发布在51cto: ...
  • Android渗透测试Android渗透测试入门教程大学霸
  • Selenium + SpringBoot自动化测试入门

    千次阅读 2019-06-17 11:04:11
    Selenium + SpringBoot自动化测试入门前言核心依赖配置创建Webdriver,DriverService类Page类测试类总结 前言 最近在学习spring,觉得也可以将spring运用到测试中。下面是一个简单的应用,不包含全部源码。 核心依赖...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,626
精华内容 12,650
关键字:

测试入门