精华内容
下载资源
问答
  • 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们...

    首先,什么是接口呢?

    接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。
    系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。
    程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。

    一、常见接口:

    1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有SoapUI、jmeter、loadrunner等;

    2、http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。可以使用的工具有postman、RESTClient、jmeter、loadrunner等;

    二、前端和后端:

     在说接口测试之前,我们先来搞清楚这两个概念,前端和后端。
          前端是什么呢,对于web端来说,咱们使用的网页,打开的网站,这都是前端,这些都是html、css写的;对于app端来说呢,它就是咱们用的app,android或者object-C(开发ios上的app)开发的,它的作用就是显示页面,让我们看到漂亮的页面,以及做一些简单的校验,比如说非空校验,咱们在页面上操作的时候,这些业务逻辑、功能,比如说你购物,发微博这些功能是由后端来实现的,后端去控制你购物的时候扣你的余额,发微博发到哪个账号下面,那前端和后端是怎么交互的呢,就是通过接口。
          前面说的你可能不好理解,你只需记住:前端负责貌美如花,后端负责挣钱养家。

    三、什么是接口测试:

    接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

    OK,上面是百度百科上说的,下面才是我说的

    其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。

    我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。

    四、接口组成

    接口都有那些部分组成呢?

    首先,接口文档应该包含以下内容:

    1、接口说明
    2、调用url
    3、请求方法(get\post)
    4、请求参数、参数类型、请求参数说明
    5、返回参数说明

    由接口文档可知,接口至少应有请求地址、请求方法、请求参数(入参和出参)组成,部分接口有请求头header。

    标头 (header):是服务器以HTTP协议传HTML资料到浏览器前所送出的字串,在标头与 HTML 文件之间尚需空一行分隔,一般存放cookie、token等信息

    有同学问我header和入参有什么关系?它们不都是发送到服务器的参数吗?

    OK,首先,它们确实都是发送到服务器里的参数,但它们是有区别的,header里存放的参数一般存放的是一些校验信息,比如cookie,它是为了校验这个请求是否有权限请求服务器,如果有,它才能请求服务器,然后把请求地址连同入参一起发送到服务器,然后服务器会根据地址和入参来返回出参。也就是说,服务器是先接受header信息进行判断该请求是否有权限请求,判断有权限后,才会接受请求地址和入参的。

    、为什么要做接口测试:

    大家都知道,接口其实就是前端页面或APP等调用与后端做交互用的,所以好多人都会问,我功能测试都测好了,为什么还要测接口呢?OK,在回答这个问题之前,先举个栗子:

    比如测试用户注册功能,规定用户名为6~18个字符,包含字母(区分大小写)、数字、下划线。首先功能测试时肯定会对用户名规则进行测试时,比如输入20个字符、输入特殊字符等,但这些可能只是在前端做了校验,后端可能没做校验,如果有人通过抓包绕过前端校验直接发送到后端怎么办呢?试想一下,如果用户名和密码未在后端做校验,而有人又绕过前端校验的话,那用户名和密码不就可以随便输了吗?如果是登录可能会通过SQL注入等手段来随意登录,甚至可以获取管理员权限,那这样不是很恐怖?

    所以,接口测试的必要性就体现出来了:

    ①、可以发现很多在页面上操作发现不了的bug

    ②、检查系统的异常处理能力

    ③、检查系统的安全性、稳定性

    ④、前端随便变,接口测好了,后端不用变

    六、接口测试怎么测:

    在进行接口测试前,还需要了解:

    1)、GET和POST请求:
        如果是get请求的话,直接在浏览器里输入就行了,只要在浏览器里面直接能请求到的,都是get请求,如果是post的请求的话,就不行了,就得借助工具来发送。
    GET请求和POST请求的区别:
        1、GET使用URL或Cookie传参。而POST将数据放在BODY中。
        2、GET的URL会有长度上的限制,则POST的数据则可以非常大。
        3、POST比GET安全,因为数据在地址栏上不可见。
        4、一般get请求用来获取数据,post请求用来发送数据。
    其实上面这几点,只有最后一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。所以上面这些面试的时候你说出来就行了。

    2)、http状态码

    每发出一个http请求之后,都会有一个响应,http本身会有一个状态码,来标示这个请求是否成功,常见的状态码有以下几种:
    1、200 2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了。
    2、300 3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了,
    3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面
    4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果

    接下来再说接口测试怎么测:

    1)、通用接口用例设计

    ①、通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
    ②、参数组合:现在有一个操作商品的接口,有个字段type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id  是必传的,这样的,就要测参数组合了,type传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。

    ③、接口安全:
         1、绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
         2、绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功
         3、参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。
         4、密码安全规则,密码的复杂程度校验

    ④、异常验证:
      所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。

    2)、根据业务逻辑来设计用例
      根据业务逻辑来设计的话,就是根据自己系统的业务来设计用例,这个每个公司的业务不一样,就得具体的看自己公司的业务了,其实这也和功能测试设计用例是一样的。
          举个例子,拿bbs来说,bbs的需求是这样的:
          1、登录失败5次,就需要等待15分钟之后再登录
          2、新注册的用户需要过了实习期才能发帖
          3、删除帖子扣除积分
          4、......
         像这样的你就要把这些测试点列出来,然后再去造数据测试对应的测试点。

     七、用什么工具测

      接口测试的工具很多,比如 postman、RESTClient、jmeter、loadrunner、SoapUI等,本人首推的测试工具是postman和jmeter,接下来就简单介绍下如何使用这两款工具进行接口测试,其他工具本次暂不介绍。

    1)、Postman是谷歌的一款接口测试插件,它使用简单,支持用例管理,支持get、post、文件上传、响应验证、变量管理、环境参数管理等功能,可以批量运行,并支持用例导出、导入。

    jmeter是一款100%纯Java编写的免费开源的工具,它主要用来做性能测试,相比loadrunner来说,它内存占用小,免费开源,轻巧方便、无需安装,越来越被大众所喜爱。

    注:以下用例中所用地址皆为本人在本地所搭的环境,外网无法访问,见谅。

    ①、获取用户信息:该接口用于通过userid获取用户信息

      请求地址:http://192.168.1.102:8081/getuser

      请求方式:POST/GET

           入参:

    参数

    数据类型(长度)

    是否必传

    备注

    userid

    String

    Y

    用户id

     出参:

    参数

    数据类型(长度)

    备注

    code

    int

    状态码200为成功,500为异常

    age

    int

    年龄

    id

    string

    用户id

    name

    String

    用户姓名

      postman中请求如下

     jmeter中请求如下:

      ②、获取用户信息:需要添加header,Content-Type application/json

    1.1    请求地址

    http://192.168.1.102:8081/getuser2

    1.2    请求方式

    get/post

    1.3     入参

    参数

    数据类型(长度)

    是否必传

    备注

    userid

    String

    Y

    用户id

     1.4     出参

    参数

    数据类型(长度)

    备注

    code

    int

    状态码200为成功,500为异常

    userid

    int

    用户id

    name

    string

    用户名称

    age

    int

    用户年龄

     postman测试如下,本次入参为json类型,当然文档中没说非要用json,用其他方式也是可以的

     jmeter测试如下

     

     ③、修改用户余额2

    1.1     功能描述

    功能描述:需要添加cookie,token token是写死的token12345

    1.2    请求地址

    http://192.168.1.102:8081/setmoney2

    1.3    请求方式

    Post

    1.4    入参

    参数

    数据类型(长度)

    是否必传

    备注

    userid

    String

    Y

    用户id

    money

    String

    Y

    修改的余额数值

     1.5     出参

    参数

    数据类型(长度)

    备注

    code

    int

    状态码200为成功,500为异常

    success

    String

    状态

      postman测试如下:

     jmeter测试如下:

     

     

     ④文件上传

    postman:

    jmeter:

     ⑤、请求webService接口

    请求webService接口需要用到的工具是SoapUI,如下图

     

    在jmeter里请求如下: 

    原文地址:https://www.cnblogs.com/feng0815/p/7509541.html

    展开全文
  • 开始最近几年,前端测试渐渐被人重视,相关的框架和方法已经比较成熟。断言库有should, expect, chai。 单元测试框架有mocha, jasmine, Qunit。 模拟浏览器测试环境有Phantomjs, Slimerjs。 集成测试任务管理工具有...

    开始

    最近几年,前端测试渐渐被人重视,相关的框架和方法已经比较成熟。

    断言库有should, expect, chai。 单元测试框架有mocha, jasmine, Qunit。 模拟浏览器测试环境有Phantomjs, Slimerjs。 集成测试任务管理工具有karma。此外,还有一堆诸如Selenium、nightwatch(冰火出戏)等各色思路不同的关注UI测试的工具。

    本文主要关注的是接口测试。

    接口是前后端协作的桥梁,是系统得以顺利运行的关键。所谓接口测试,就是检查系统提供的接口是否符合事先撰写的接口文档。数据结构是否完备,数据类型和取值是否符合标准。

    实际上,接口测试由后端来做会比较方便,但是由于一些实际原因(后端大哥比较忙,人手不足等),后端往往不能确保接口数据一定符合接口文档规定。此时,作为前端,我们为什么不能另辟蹊径,探索一番呢?

    思路分析

    接口测试最大的难点是什么?我觉得是登录状态的获取。

    众所周知,一个系统的大部分接口都只会对登录用户开放。在测试接口之前,首先必须确保这次会话已经登录,发送给后台的请求中必须携带登录后获取的 cookie。面对这个问题,最直接的想法是在后台模拟登录。

    后台模拟登录

    mocha 可以运行在node中,理论上我们完全可以在node环境下,使用一些http client( request, superagent等),模拟进行登录。手动获取cookie,并加在之后的每一次接口请求中。获得到接口数据后,就可以结合 mocha,愉快地进行测试了。

    可是,实际实验之后,我发现这个方案存在一些缺陷。

    难以封装复用

    不同系统的登录流程并不相同。相当多的系统要求在登录时需要附带其他的 cookie 或者额外的表单参数。

    以本人测试的系统为例,登录时就需要带上一个 key 为 jsessionid 的 cookie,以及一个 key 为 nlt 的表单参数。这个 cookie 是怎么来的呢?是访问登录页时返回的 set-cookie 头设置的。这个表单参数又是怎么来的呢?是藏在登录页面的表单中的一个隐藏域。

    所以,如果简单地用 http client 向登录地址发一个 post 请求,仅仅带上自己的用户名密码,你就会发现,登录毫无疑问的···失败了。

    更烦人的是,如果你的系统登录依赖 SSO,内部存在 302 请求转发,那么很有可能会出现 cookie 丢失的情况(有两个 set-cookie header,浏览器能识别并正确设置,但是很多 http client 只能拿到最后一个)。

    我们当然可以动用各种奇技淫巧,手动获取和设置各种特定的 cookie,去网页里爬出隐藏域的值。可是,这一切,仅仅对特定的系统有效。如果换一套系统,你就必须重新研究一遍登录流程,重新写一遍模拟登陆代码,感觉还是挺崩溃的。

    难以应对验证码

    上面的问题仅仅只是使用不便,这个问题就是直接就给该方案判了死刑。当然,爬虫界也有不少应对验证码的解决方案,比如依托 OCR 软件啊,人工判别 API 啦, 更厉害的还有自己做图像处理和算法进行识别。可是,作为一个简单的接口测试,这种方案是不是太小题大做了点?

    浏览器扩展

    mocha 也可以在浏览器环境运行,当后台模拟登陆遇到困难,我们很容易想到,在浏览器环境进行测试是否可行呢?

    普通的浏览器环境确实会有一定问题,那就是前端的老大难:跨域。

    我们的目的是前端接口测试,原则上不应也不能让后台搭配测试工作去改接口,所以,CORS,jsonp 都是不可行的。

    难道这条路又堵死了?非也,我们还有一个选项,那就是——浏览器扩展。

    以 chrome extension 为例,只要在 manifest.json 文件中配置好 permissions ,扩展发起的请求就可以成功跨域。事实证明,完全没有问题。不仅可以跨域,还可以携带登录后的 cookie,所以,只要在浏览器正常登录后,再打开插件相关页面进行验证,就可以解决登录状态的问题。简直完美。

    方案设计

    既然定下了方案,下一步就是设计。作为接口测试的解(wa)决(keng)方(zhi)案(lv),我们必须具备通用性与易用性。使用者只需提供配置,不需要再进入源代码修改打包。

    本方案中中测试框架和断言使用 mocha + chai。这方面的资料汗牛充栋,本篇不再赘言。

    目录结构

    apiTest

    │ package.json

    │ webpack.conf.js

    │ api.conf.dist.js

    │ api.conf.dist.js.map

    │ index.js

    │ manifest.json

    │ test.png

    ├─config

    │ index.js

    ├─css

    ├─html

    ├─js

    ├─lib

    └─TestCreator

    其中,index.js 是入口文件; manifest.json 是 chrome 插件配置文件; config/index.js 是用户测试配置文件。css, html, js, lib 都用于存放资源文件。

    使用流程

    安装插件(如果已安装过就可以省略)

    提供测试配置

    用户去系统登录页完成登录

    点击插件图标,打开新 tab 页

    在 tab 页中进行测试,并在页面上显示结果

    让我们从 manifest.json 文件开始,一步一步深入,看目标流程是如何实现的。

    - manifest.json

    "permissions": [

    "tabs",

    "http://*/*",

    "https://*/*"

    ],

    "background": {

    "scripts": "js/background.js"

    }

    在 manifest.json 文件中,定义 background 属性。定义的 js/background.js 文件将自动在后台运行。permissions 属性定义了扩展的权限。“tabs”指明可以打开浏览器本身的 tab 标签页,后面两个配置指明浏览器可以向任何 url 发送请求。(不配置会跨域)

    - js/background.js

    chrome.browserAction.onClicked.addListener(function(){

    var url = chrome.extension.getURL("../html/main.html");

    window.open(url, "main_page");

    })

    在 js/background.js 文件中,注册了一个事件函数。当用户点击插件图标时,打开一个 html/main.html 作为新的 tab 页。我们所有的任务都将在这个 tab 页中实现。

    - html/main.html

    请在登陆后点击按钮开始测试

    在这个 html 中,载入了三个 js 文件。其中,config/index.js 是测试配置文件。api.conf.dist.js 是入口文件经 webpack 打包后的压缩文件。mocha 之所以独立载入,是因为在浏览器环境中,mocha 必须部署在 window 对象下,所以不能打包进去。核心的逻辑代码,放在 api.conf.dist.js 文件中。

    页面中放置了一个按钮和一个 id 为 mocha 的 div。前者点击后会触发 mocha 执行,后者作为一个容器,用于显示测试结果。

    - index.js

    import {expect} from 'chai'

    import test from './js/main'

    function click(e) {

    mocha.run()

    document.querySelector("#startBtn").style.display = 'none';

    }

    document.addEventListener('DOMContentLoaded', function () {

    var btn = document.querySelector("#startBtn")

    btn.addEventListener('click', click);

    });

    mocha && mocha.setup('bdd')

    mocha.timeout(4000)

    const mainTest = testCreator(window.apiTestConf)

    mainTest()

    index.js 是打包的入口文件。这里主要做了两件事:

    第一,为按钮定义了一个事件监听函数,点击时执行 mocha。

    第二,初始化 mocha,设置其执行模式(bdd)和超时时间。

    第三,执行 mainTest 函数,在这里定义了所有测试用例。测试用例根据用户配置文件动态,这也是核心逻辑。下面将进一步详述。

    测试配置的设计

    下面展示本文使用的测试配置:

    window.apiTestConf = {

    name:"foo",

    path:"http://baz/japi/platform/",

    common:{

    success: {

    value: true,

    type:["boolean"],

    },

    errorCode: {

    value: [0]

    }

    },

    publicStruc:[

    "results>items",

    "results"

    ],

    apis:{

    AccountCenter:{

    "110620001":{

    name:"获收货地址列表",

    fullUrl:false,

    data:{

    length:{

    min:1

    },

    item:{

    area:{

    type:"string"

    },

    areaStr:"string",

    consignee:"string",

    detail:"string",

    id:"number",

    ifDefault:"boolean",

    mobile:["string","number"]

    }

    }

    }

    }

    }

    }

    测试配置决定了测试用例的组织和测试用例内断言的编写。其结构学习了一些表单验证插件,比表单验证插件复杂的地方在于,表单验证仅仅针对一维的单一字段,而接口返回的数据则是具备一定的嵌套结构的。下面对该配置进行简述。

    path:接口地址的公共部分。

    common:对接口返回数据的格式上的公共部分进行验证。比如 success 必须为 true,errorcode 必须为 0 等。

    publicStruc:接口核心数据部分的路径。系统将根据该路径一步步寻找。如果没找到将会在断言中报错。如果定义了多个路径,则会按顺序从前往后查找。

    apis:核心部分,对接口数据进行验证。

    AccountCenter:该 key 可变。在这一层级对接口进行分组,比如 AccountCenter 说明下面定义的是账户中心的接口的测试配置。

    110620001:该 key 可变。这是真实接口的路径。该 key 值下的对象,就是针对具体数据结构和字段进行配置了。下面将介绍这部分的配置和验证规则,可能会有点枯燥,不感兴趣的读者可以略过不看。

    字段验证规则

    字段验证规则:

    字段验证规则指的是接口下data属性下定义的规则。是对接口核心数据的存在与否、数据类型和值所做的规定

    基本规则规则

    规则仅仅对类型是数字,字符串,布尔值和数组的字段有效,如果要验证的字段是对象,则不起作用。需要对对象内的属性(同样看做字段)做进一步的验证,而不是对对象本身做验证。

    验证属性可写的值是对象,数组和字符串,其他类型的值都是非法的

    验证属性如果是一个空对象,则直接通过。

    验证属性如果是一个数组或字符串,则视为 type 处理

    验证属性如果是一个至少包含了required, value, type三者之一的对象,则进行标准化验证

    required

    验证真实字段必须指定,且必须不为空字符串(也就是说false,0能通过验证。)

    value

    如果 value 是数组,则验证真实值是否至少等于数组中的某一个值

    如果 value 是数字,字符串或者布尔值,验证真实值与其是否相等

    如果 value 是一个对象,则进一步判断:

    min:规定最小值,仅仅对数字有效

    max:规定最大值,仅仅对数字有效

    not:不为其值。可以是一个数组,此时不为数组中的所有值

    start:开始字符,仅仅对字符串有效

    end:结束字符串,仅仅对字符串有效

    type

    type 可写的值是字符串。这些字符串的可选值为:"number","string","boolean","array"。没有"object","undefined","null",因为没有意义

    type 可以是一个数组,数组中的值也是上面的可选值。此时,只要满足数组中的一个值,就能通过验证

    length

    当数据是数组时才有效,是对数组长度做的验证

    min:规定最小值,仅仅对数字有效

    max:规定最大值,仅仅对数字有效

    item

    当数据是数组时才有效,里面进一步规定对数组中每一项的验证

    设计完各种规则后,接下来就是依样画葫芦地编写代码了。由于代码量比较多,这里就不再赘述。其核心思想就是根据配置项生成各种测试用例和断言。最后供 mocha 运行,输出结果。

    bVN7V7?w=754&h=299

    结束和展望

    本文所设计的方案基本能够满足前端接口测试的要求,但还是有一些缺陷,弊端,及有待改进的地方。

    验证规则涉及不够全面和严密,有待丰富,

    可以将总体目录结构以及内部的 TestCreater 封装成 npm 包,更方便使用。

    测试通过时,无法看到通过了哪些断言。测试失败时,只输出未通过的第一条断言的信息。输出信息不够全面丰富。这一定程度上是 mocha 和 chai本身的特性,不知道有什么方式可以优化。

    最后,本文中若出现了错误,或是读者有更好的方案,望不吝啬赐教。

    展开全文
  • 【分享】常用接口测试工具

    千次阅读 2020-12-24 18:43:34
    如今,接口测试工具这个市场,种类非常多,非常繁杂。 国外接口测试工具巨头:postman、jmeter等 国内的接口测试工具就更多了:eolinker、doclever、itest等 今天我就给大家分析分析,这些软件的优缺点。 首先先分析...

    如今,接口测试工具这个市场,种类非常多,非常繁杂。 国外接口测试工具巨头:postman、jmeter等 国内的接口测试工具就更多了:eolinker、doclever、itest等

    今天我就给大家分析分析,这些软件的优缺点。 首先先分析两大巨头:postman和jmeter

    1.postman

    Postman是由Postdot Technologies公司打造的一款功能强大的调试HTTP接口的工具,它最早是Chrome中最受欢迎的插件之一,现已扩展到Mac,Windows和Linux客户端。软件功能非常强大,界面简洁明晰、操作方便快捷,设计得很人性化。Postman分免费版和收费版本。但是postman是国外的软件只有英文版,对于英语不好的人用着非常吃力。

    2.jmeter

    Apeche Jmeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试,它最初被设计用于web应用测试,但后来扩展到其他测试领域。jmeter因为是用java写的,所以安装的时候,需要配置对应的java环境和jmeter自身的环境。

    3.eolinker

    是一款国产的集成接口测试和接口文档生成工具。这款软件支持saas服务,也可以付费本地部署。大多数公司还是选择前者,在线注册导入项目来使用。接口文档也支持导入和导出不同版本的文档如html,markdown和word等,是一款很不错的软件。期待eolinker官方的优化更新。

    4.doclever

    国产的一款接口测试工具,有Windows和ios两个版本。不支持离线状态的接口测试,进行流程测试的步骤比较繁琐,需要建立项目,在具体实现接口测试的话,还需要添加很多步骤才能实现接口测试,流程化的思想是好的,但是不够简便。

    5.itest

    国产的功能测试和接口测试集合工具。思想是对整个项目的质量管理,功能测试和接口测试的整合软件,但是这款软件并没有很好的把功能和性能区别开。操作比较负责,还不如单独用bug管理工具和接口测试工具。

    上述的工具都可以试试,找到合适自己团队使用的,我公司用的是Eolinker。 使用地址:www.eolinker.com

    展开全文
  • 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的...

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件

    Postman背景介绍

    用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。今天给大家介绍的这款网页调试工具不仅可以调试简单的css、html、脚本等简单的网页基本信息,它还可以发送几乎所有类型的HTTP请求!Postman在发送网络HTTP请求方面可以说是Chrome插件类产品中的代表产品之一。

    Postman的操作环境

    postman适用于不同的操作系统,Postman Mac、Windows X32、Windows X64、Linux系统,还支持postman 浏览器扩展程序、postman chrome应用程序等。

    Postman重要提示:

    由于2018年初chrome停止对chrome应用程序的支持,你的postman插件可能无法正常使用了。目前chrome应用商店能使用的就是chrome扩展程序和主题背景。

    在这里建议大家直接下载它的应用程序进行使用

    贴上官网下载地址:Postman | Download Postman App

    记得选择下载的版本
    在这里插入图片描述

    下载完成后双击安装吧,安装过程极其简单,无需任何操作
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    成功进入postman页面后,接下来我们正式进行postman的系统教程吧

    设置postman主题

    右上角的设置里可以设置postman的主题
    在这里插入图片描述
    这里,出于个人习惯,我把它设置成了黑色
    在这里插入图片描述

    postman基础功能介绍

    首先,看一下它的基础功能:
    在这里插入图片描述
    collection在postman里面相当于一个文件夹,可以把同一个项目的请求放在一个Collection里方便管理和分享,Collection里面也可以再建文件夹。这里我们做一个普通接口的简单的示例:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    该请求是聚合数据提供的一个查询天气的接口,大概还有几百次的次数可以用:

    http://v.juhe.cn/weather/index?format=2&cityname=南京&key=64aa04d276d1ed4fd5a147d97e16b87e

    点击send,查询成功

    在这里插入图片描述
    这样就完成了一次简单的天气查询接口的请求

    请求区域介绍

    在这里插入图片描述
    1 Authorization:身份验证,主要用来填写用户名密码,以及一些验签字段,postman有一个helpers可以帮助我们简化一些重复和复杂的任务。当前的一套helpers可以帮助你解决一些authentication protocols的问题。;

    2 Headers:请求的头部信息

    3 Body:post请求时必须要带的参数,里面放一些key-value键值对

    4 Pre-requerst Script:可以让你在 请求之前自定义请求数据,这个运行在请求之前,语法使用JavaScript语句。

    5 tests:tests标签功能比较强大,通常用来写测试,它是运行在请求之后。支持JavaScript语法。postman每次执行request的时候,会执行tests。测试结果会在tests的tab上面显示一个通过的数量以及对错情况。这个后面会进行详解,它也可以用来设计用例,比如要测试返回结果是否含有某一字符串

    6 form-data:,它将表单数据处理为一条消息,以标签为单元,用分隔符分开。既可以单独上传键值对,也可以直接上传文件(当上传字段是文件时,会有Content-Type来说明文件类型,但该文件不会作为历史保存,只能在每次需要发送请求的时候,重新添加文件。);post请求里较常用的一种

    在这里插入图片描述
    7 x-www-form-urlencoded:对应信息头-application/x-www-from-urlencoded,会将表单内的数据转换为键值对;

    8 raw:可以上传任意类型的文本,比如text、json、xml等,所有填写的text都会随着请求发送;

    9 binary:对应信息头-Content-Type:application/octet-stream,只能上传二进制文件,且没有键值对,一次只能上传一个文件, 也不能保存历史,每次选择文件,提交;

    导出和导入接口集:

    postman支持非常方便的导入和导出接口集,继续操作如下:

    导出

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    导入:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ok,这样就是简单的导入导出collection集合

    关于设置环境变量:

    1. Global—全局

    2. Enviroment — 环境变量

    3. Local — 局部

    4. Data ---- 数据

    优先级从高到底 Data ---- > Local ---- > Enviroment ---- > Global

    postman支持很方便的设置环境变量以及全局变量,并可以一键切换不同环境

    在这里插入图片描述
    1:可以一键切换环境,选择No Environment则不使用环境变量,仅适用全局变量

    2:可以查看当前环境中的变量和全局变量(Globals)的值
    在这里插入图片描述
    3.进入设置页面
    在这里插入图片描述
    如新建一套环境dome
    在这里插入图片描述
    选择我们刚才创建的环境,点击眼睛可以看到我们设置的变量值
    在这里插入图片描述
    创建环境变量能够很方便的调取我们所需的数据

    将返回值的某个数据设置为环境变量

    在某些时候,我们需要获取到一个变量,并保存下来,因为在后面我们会使用到。比如token,sign等信息

    这时候就需要用到tests区域了,使用其强大的js语法

    下面是一个简单的将返回值的某个数据设置为环境变量或者全局变量的介绍:

    定义一个xxx,获取body中返回的所有参数,并转化为JSON格式 var xxx = JSON.parse(responseBody);

    //把json字符串转化为对象。parse()会进行json格式的检查是一个安全的函数, 如:检查json中某个数组元素的个数(这里检测programs的长度)

    var data = JSON.parse(responseBody);tests[“program’s lenght”] = data.programs.length === 5;

    将返回中的值设置为一个环境变量 pm.environment.set(“key”,xxx.data.value);或者postman.setEnvironmentVariable(“key”, “value”);

    将返回中的值设置为一个全局变量, pm.globals.set(“key”,xxx.data.value);或者postman.setGlobalVariable(“key”, “value”);

    //注意:Global后面不能加S,value值一定要指定到某个具体节点

    实际操作一下:

    一个微信登录的接口token值获取

    在这里插入图片描述
    这是一个微信登录的接口,属于post方法,里面的必须参数是unionid,这里我已经把unionid填在body里了,点击send下面可以得到一个token

    该登录token每次请求的值都是不一样的,属于一个动态值。而后面我们的所有接口请求都需要这个token,现在就可以使用tests将它放置在环境变量里
    在这里插入图片描述
    var acquiretoken = JSON.parse(responseBody);

    //定义一个acquiretoken方法(获取token),把responseBody转为json字符串

    pm.environment.set(“token”,acquiretoken.data.token);

    //将token变量放置到当前环境变量里去

    再次执行send后,点击右上角小眼睛
    在这里插入图片描述
    发现变量就储存在了dome的环境变量里,每次点击send进行请求,发现环境变量里token都会随着结果变化而变化。

    同理,全局变量统一可以这样设置

    在设置过变量后,调用变量的时候,在postman里也比较方便,直接使用{{变量名}}就可以了,

    加入我们在body里需要一个token值,那么我们可以直接在引用在环境变量里储存的token,例如:
    在这里插入图片描述
    在这里插入图片描述
    上面的效果和下面这种把一点点输入的的效果是一样的!
    在这里插入图片描述

    其他的常用tests方法:

    在postman里,内置了一些常用的方法:
    在这里插入图片描述
    可以很方便的调用

    下面我也整理了一些常用的tests方法,分享给大家

    测试response Headers中的某个元素是否存在 tests[“元素Content-Type是否存在”] = postman.getResponseHeader(“Content-Type”);

    //getResponseHeader()方法会返回header的值;

    定义一个xxx,获取headers值 var.xxx = postman.getResponseHeader(“key”);

    将Headers中的值设置为一个环境变量 postman.setEnvironmentVariable(“key”,xxx);或者pm.environment.set(“key”,xxx);

    检查response的code值是否为200 tests[“Status code is 200”] = responseCode.code === 200;

    // tests[“Status code is 200”]中的tests是一个内置对象,

    tests[“Status code is 200”]是指为这个断言起个名称叫”Status code is 200”,这个名称可以自行修改。

    responseCode.code === 200中的responseCode是内置对象,responseCode对象中有个属性是code,是指HTTP状态码的code,判断code是否为200.

    综合起来,这句代码的意思是:名称为”Status code is 200”的断言中,判断responseCode对象的code属性值(HTTP状态码)是否为200。

    检查response的body中是否包含字符串 tests[“Body matches string”] = responseBody.has(“type”);

    // tests[“Body matches string”]中的tests是一个内置对象,

    tests[“Body matches string”]是指为这个断言起个名称叫”Body matches string”,这个名称可以自行修改。

    这句代码的意思是:名称为”Body matches string”的断言中判断响应正文中是否包含:type这个字段。type无论是key或者value,只要匹配就可以。多个类型可用“,”分割。

    检查Response Body是否等于字符串 tests[“测试点”] = responseBody === “Response Body返回的内容”;

    //这个可以用在接口返回内容为纯字符串时,直接检查整个返回结果的正确性

    检查Response time 是否小于200ms tests[“Response time 小于200毫秒”] = responseTime < 200;

    检查Response time 是否大于200ms tests[“Response time 大于200毫秒”] = responseTime > 200;

    postman.setNextRequest(‘Request 4’)

    // postman.setNextRequest()是一个带有一个参数的函数,它是接下来要运行的请求的名称或ID。往往用来跳转至某个接口,只在运行该集合时有用,单独运行无效

    var jsonObject = xml2Json(responseBody);

    //转换XML body为JSON对象

    设置一个随机数变量 pm.globals.set(“type”,parseInt(4*Math.random())+1);

    //针对不同类型的课程类型,设置一个1到4的随机整数,字段名是type,parselnt 是强制转换为整数

    校验接口返回是否有数据 tests[“获取第一个结果”] = xxx.content.jieguo[0];

    //我的程序设置的是如果当前没有数据,则只返回content[],所以这句断言可以校验,如果content里还有数据,则视为返回不为空

    使用postman进行接口自动化测试

    没错,使用postman也可以进行接口自动化的,是不是很神奇

    首先,既然是自动化测试,那么我们肯定需要工具 (Postman) 或者代码能帮我们直接判断结果是否符合预期。那么在接口测试上,大体就两个思路:

    判断请求返回的 code 是否符合预期

    判断请求返回的内容中是否包含预期的内容(关键字)

    接下来我们看看如何利用 Postman 来解决上述的问题

    这是三个模拟天气的接口集合,点击扩展按钮,找到RUN,进入
    在这里插入图片描述
    在这里插入图片描述
    这里我们先简单运行一次:
    在这里插入图片描述
    发现,运行成功。里面我每个接口都写了两个tests进行校验字段,所以上面一共有6条tests测试点被测试到,并且是成功的

    每个接口里的tests数据如下:
    在这里插入图片描述
    当然,如果想要每次运行不一样的数据,我们需要其他的方法,比如,使用pre-requestScprit功能,导入或者生成随机数据进行测试,这个后续我再进行讲解.

    在这里插入图片描述

    上面这些是我的收集和整理,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你

    关注我的微信公众号【软件测试小dao】免费获取!

    展开全文
  • 我们在使用网站过程中,经常会遇到慢的问题,为了找到原因,一般需要借助工具进行检测,通过工具,可以检测出前端站点加载资源的相关详细情况。
  • 本文转载至:测试开发技术首先,什么是接口呢?接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库...
  • 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们...
  • 也包括了单元测试接口自动化测试和UI自动化测试的分类。 DevOps成熟度中测试管理概述 测试管理是一个过程,通过该过程,所有和测试相关的方法,流程,人员都被定义。在产品投入到生产环境运行之前,通过测试过程...
  • 在进行接口测试之前,我们首先需要明确“接口”的定义。接口可以分为硬件接口和软件接口两类,所谓硬件接口就是用于连接外部设备、传输数据的端口,比如USB接口。 软件接口就是前端和后端开发人员为了传输数据和...
  • 最好用的七大顶级 API 接口测试工具

    千次阅读 2021-12-15 17:26:39
    现在 API 接口已经成为软件开发重要的组成...面对批量的 API,手动测试变得非常低效,自动化 API 接口测试工具,帮我们提高测试效率的同时,更能帮我们保证程序的稳定和安全性。本文介绍 7 款顶级 API 接口测试工具
  • 前端接口联调工具

    2021-04-17 11:11:43
    前端接口联调工具作者介绍黄仲萍,达达-京东到家-移动研发部iOS研发。曾在外企工作并有驻PaloAlto经历,有多年iOS开发经验,对iOS应用程序架构设计与组件封装有一定的经验与见解。目前负责“京东到家商家版”iOS的...
  • 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写...
  • 从最开始使用工具进行接口测试到编写代码实现接口自动化,到最后的测试平台开发。回想这一路走来感触颇深,因此为了避免打算学习接口测试的同学走冤枉路,特此分享我的学习经验。 这次从新的视角,新的语言来...
  • 接口测试常用工具及测试方法 一、首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库...
  • 对于自动化测试,原来谈这方面...也包括了单元测试接口自动化测试和UI自动化测试的分类。DevOps成熟度中测试管理概述测试管理是一个过程,通过该过程,所有和测试相关的方法,流程,人员都被定义。在产品投入到生...
  • postman用来测试我们的接口,在工作中,后台会给我们提供接口文档,我们要使用对应的接口文档进行接口的测试,而一个好的接口测试工具,会让我们在工作中事半功倍。 安装 安装只需要双击打开安装工具即可,等待几...
  • 用户的访问的(pc,h5,android,ios等前端)页面并没有对业务系统暴露的接口服务全面的测试,存在潜在风险,为此写了一个远程服务接口测试的DEMO (DUBBO服务为例) 应用场景 大型的分布式系统 前端和后台服务端分离 ...
  • PHP API接口测试工具

    2021-04-12 09:55:42
    标签:前端时间给手机客户端做接口,当时弱爆了,写完API接口后,也不怎么测试,最后是等客户端调用的时候检验API的正确性。后面利用PHP的curl实现Post请求,检验API接口的正确性;配合前面做的一个查看Apache错误...
  • 在线HTTP接口测试工具

    2021-03-26 15:03:23
    提供任意接口的HTTP GET和POST测试,并且提供测试返回值,接口返回时间,后续会对异常状态数据进行获取。代码前端获取表单数据,ajax到后台,php使用参数模拟请求,返回数据。header('Content-type:text/html;...
  • 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点,主要是为了检验不同组件(模块)之间数据的传递是否正确,同时接口测试还要测试当前系统与第三方系统的对接,比如:支付宝、财付通、微信、...
  • 不规范的:软件已经做出来了,再去做接口测试,可以通过一些工具(Charles、fiddler、浏览器F12)去抓包,获取接口信息,再进行接口测试。 工作中接口测试的流程: 准备阶段(25%):拿到开发的接口文档,并理解每...
  • 2分钟玩转中文接口测试工具-ApiPost

    千次阅读 2021-08-10 16:06:10
    1. API写完想要测试?试试模拟发送一次请求 新建接口,我想模拟发送请求如下 curl --location --request POST 'https://echo.apipost.cn/get.php?c=Course&id=1000' \ --header 'User-Agent: Apipost client ...
  • 一、简介Mock.js是一个基于NodeJS的用来模拟API的工具,可以方便让前端开发人员在开发过程中用来模拟API接口,方便与后端的联调工作,尤其方便在Vue项目中使用。官网地址:http://mockjs.com/代码托管地址:...
  • 什么是ApiPost ApiPost = 接口调试+接口...产品的使用受众为由前端开发、后端开发和测试人员以及技术经理组成的整个研发技术团队。 APIPOST通过协作功能将研发团队的每个角色整合打通。 安装 ApiPost目前提供Window64
  • 接口测试常见问题

    千次阅读 2021-10-09 22:42:52
    接口测试常见问题 原文地址:接口测试常见问题 接口测试需要考虑的点/如何设计接口测试的用例? 接口测试用例编写除了使用功能测试中最基本的等价类,边界值,因果图,错误推测,场景设计等方法外,还要考虑一些...
  • 1、啥是接口测试接口测试是测试系统组件间接口的一种测试,它界于单元测试与系统测试中间。...总结概括:接口测试就是代替前端验证服务端程序是否正确。 2、接口测试的原理 测试人员借助工具模拟客户

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 98,414
精华内容 39,365
关键字:

前端接口测试工具