精华内容
下载资源
问答
  • HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:HTTP状态码分类分类分类描述1**信息,服务器收到请求,需要请求者继续执...

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

    HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

    HTTP状态码分类
    分类分类描述
    1**信息,服务器收到请求,需要请求者继续执行操作
    2**成功,操作被成功接收并处理
    3**重定向,需要进一步的操作以完成请求
    4**客户端错误,请求包含语法错误或无法完成请求
    5**服务器错误,服务器在处理请求的过程中发生了错误

    详细信息

    100 Continue 继续。客户端应继续其请求
    101 Switching Protocols 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
    200 OK 请求成功。一般用于GET与POST请求
    201 Created 已创建。成功请求并创建了新的资源
    202 Accepted 已接受。已经接受请求,但未处理完成
    203 Non-Authoritative Information 非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
    204 No Content 无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
    205 Reset Content 重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
    206 Partial Content 部分内容。服务器成功处理了部分GET请求
    300 Multiple Choices 多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
    301 Moved Permanently 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
    302 Found 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
    303 See Other 查看其它地址。与301类似。使用GET和POST请求查看
    304 Not Modified 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
    305 Use Proxy 使用代理。所请求的资源必须通过代理访问
    306 Unused 已经被废弃的HTTP状态码
    307 Temporary Redirect 临时重定向。与302类似。使用GET请求重定向
    400 Bad Request 客户端请求的语法错误,服务器无法理解
    401 Unauthorized 请求要求用户的身份认证
    402 Payment Required 保留,将来使用
    403 Forbidden 服务器理解请求客户端的请求,但是拒绝执行此请求
    404 Not Found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
    405 Method Not Allowed 客户端请求中的方法被禁止
    406 Not Acceptable 服务器无法根据客户端请求的内容特性完成请求
    407 Proxy Authentication Required 请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
    408 Request Time-out 服务器等待客户端发送的请求时间过长,超时
    409 Conflict 服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突
    410 Gone 客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
    411 Length Required 服务器无法处理客户端发送的不带Content-Length的请求信息
    412 Precondition Failed 客户端请求信息的先决条件错误
    413 Request Entity Too Large 由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
    414 Request-URI Too Large 请求的URI过长(URI通常为网址),服务器无法处理
    415 Unsupported Media Type 服务器无法处理请求附带的媒体格式
    416 Requested range not satisfiable 客户端请求的范围无效
    417 Expectation Failed 服务器无法满足Expect的请求头信息
    500 Internal Server Error 服务器内部错误,无法完成请求
    501 Not Implemented 服务器不支持请求的功能,无法完成请求
    502 Bad Gateway 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求
    503 Service Unavailable 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
    504 Gateway Time-out 充当网关或代理的服务器,未及时从远端服务器获取请求

    505 HTTP Version not supported 服务器不支持请求的HTTP协议的版本,无法完成处理

    展开全文
  • 接口测试:HTTP协议中的状态码

    千次阅读 2018-11-12 20:13:23
    接口测试,错误返回和相应的原因 详细分解: 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。 100 (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在...

    接口测试,错误返回码和相应的原因

    详细分解:

    1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态代码。

    100  (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 

    101  (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

    2xx (成功):表示成功处理了请求的状态代码。

    注:200代表请求成,但是这并不意味着,返回的数据也是正确的

    200  (成功)  服务器已成功处理了请求。

    201  (已创建)  请求成功并且服务器创建了新的资源。

    202  (已接受)  服务器已接受请求,但尚未处理。

    203  (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。

    204  (无内容)  服务器成功处理了请求,但没有返回任何内容。

    205  (重置内容) 服务器成功处理了请求,但没有返回任何内容。

    206  (部分内容)  服务器成功处理了部分 GET 请求。

    3xx (重定向):接口重定向

    300  (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

    301  (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

    302  (临时移动)  意味着接口将重定向到另一个URL中去

    303  (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

    304  (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

    305  (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

    307  (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

    4xx(请求错误):这些状态代码表示请求可能出错,妨碍了服务器的处理。

    400  (错误请求)Bad Request请求包含语法错误

    原因:(1)输入的参数多了或者少了(2)输入的参数错误(3)有时候服务器请求超时也会造成400错误

    401  (未授权)401 Unauthorized当前请求需要用户验证

    403  (禁止)    Forbidden服务器已理解请求,但拒绝执行它

    原因:出现这类情况一般是访问这个接口需要一定的权限,但是访问者没有相应的访问权限

    解决方法:

              a.是否是登录的用户没有访问的权限;

              b.在服务端这个接口没有配置访问权限,即禁止任何用户访问

    404  (未找到) 服务器找不到请求的网页。

    解决:仔细检查接口的RUL是否有误

    405  (方法禁用)请求行中指定的方法不能用于请求相应的资源。

    406  (不接受) 无法使用请求的内容特性响应请求的网页。

    407  (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。

    408  (请求超时)  服务器等候请求时发生超时。

    409  (冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。

    410  (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。

    411  (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

    412  (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。

    413  (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

    414  (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。

    415  (不支持的媒体类型) Unsupported Media Type对于当前请求的方法和所请求的资源,请求中提交的实体并不是服务器中所支持的格式,因此请求被拒绝

    解决方法:

              a.查看是否加了请求头部,一般来说必须要加的header是Content-Type:application/json;charset=utf-8;  

              b.在上传文件的时候要特别注意,请求的头部      Content-Type不是application/json格式,是multipart/form-data格式。

    416  (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。

    417  (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

    5xx(服务器错误)

    这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

    代码  说明

    500  (服务器内部错误)  服务器遇到错误,无法完成请求。

    501  (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

    502  (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

    Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应

    解决方法:检查服务器

    503  (服务不可用) Service Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。

    504  Gateway Timeout作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。 

    505  (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本

    FTP

    1xx – 肯定的初步答复

    这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。 110 重新启动标记答复。

    120 服务已就绪,在 nnn 分钟后开始。

    125 数据连接已打开,正在开始传输。

    150 文件状态正常,准备打开数据连接。

    2xx – 肯定的完成答复

    一项操作已经成功完成。客户端可以执行新命令。 200 命令确定。

    202 未执行命令,站点上的命令过多。

    211 系统状态,或系统帮助答复。

    212 目录状态。

    213 文件状态。

    214 帮助消息。

    215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。

    220 服务就绪,可以执行新用户的请求。

    221 服务关闭控制连接。如果适当,请注销。

    225 数据连接打开,没有进行中的传输。

    226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。

    227 进入被动模式 (h1,h2,h3,h4,p1,p2)。

    230 用户已登录,继续进行。

    250 请求的文件操作正确,已完成。

    257 已创建“PATHNAME”。

    3xx – 肯定的中间答复

    该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。 331 用户名正确,需要密码。

    332 需要登录帐户。

    350 请求的文件操作正在等待进一步的信息。

    4xx – 瞬态否定的完成答复

    该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。

    421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。

    425 无法打开数据连接。

    426 Connection closed; transfer aborted.

    450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。

    451 请求的操作异常终止:正在处理本地错误。

    452 未执行请求的操作。系统存储空间不够。

    5xx – 永久性否定的完成答复

    该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。

    500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。

    501 在参数中有语法错误。

    502 未执行命令。

    503 错误的命令序列。

    504 未执行该参数的命令。

    530 未登录。

    532 存储文件需要帐户。

    550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。

    551 请求的操作异常终止:未知的页面类型。

    552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。

    553 未执行请求的操作。不允许的文件名。

    常见的 FTP 状态代码及其原因

    150 – FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。

    226 – 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。

    230 – 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。

    331 – 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。

    426 – 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。

    530 – 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。

    550 – 命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。

    展开全文
  • 接口测试 | 接口测试入门

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

    接口测试讲义

    1. 接口测试的类型

    主要包含三种测试:

    1. Web接口测试,
    2. 应用程序接口(API, application programming interface)测试,
    3. 数据库测试。

    实际上意义就是UI界面到数据库之间,数据流经过的所有过程。

    LAMP(Linux Apache MySQL PHP)/LNMP(Linux Nginx MySQL PHP):只有 Web 服务器,没有应用服务器。

    • Web 浏览器 到 Web 服务器: Web 接口测试,测试 请求和响应。
    • Web 服务器 到 数据库服务器:应用接口测试,测试 PHP。

    Linux / Windows + Java / Asp.net(C#) + Apache/Nginx + Tomcat/IIS + MySQL/Oracle/SQL server

    • Web 浏览器 到 Web 服务器: Web 接口测试,测试 请求和响应。
    • Web 服务器 到 应用服务器:契约服务,WebService,JavaAPI,WebAPI,WCF,.net Remoting:测试 Java 或者 C# 处理业务逻辑(JavaEE/ ASP.NET MVC),通俗讲测试 Service。
    • 应用服务器 到 数据库服务器:数据处理服务,测试 Java 或者 C# 处理数据,把数据读取到数据库。

    我们需要关注的是 Web 接口测试。

    Web 接口测试的方法:

    • Python 或者 Java,C# 编程,触发请求,读取响应,分析得到的响应数据进行与源数据的对比。
    • 用工具:Postman 或者 SoapUI(不推荐)

    Postman 原本是一个 Chrome 浏览器的插件,现在已经提供了 Windows、MacOS 和Linux 的独立安装版本。接下来用Windows的版本来进行安装和使用。

    2. Postman 的安装

    1. 下载 Postman 的安装包,分为 32位 和 64位。https://www.getpostman.com

    2. 安装 Postman

    3. 注册用户(Sign Up) 并登录 (Sign In)

      Snap23.png

    4. 可以在多台电脑登录,做过的测试会自动同步。

      Snap24.png

    5. 安装完并且登录以后可以开始测试。

      Snap25.png

    3. Web 接口的测试点

    Web 接口通过 HTTP(S)请求,是一个URL,URL请求结果,会得到数据,数据的格式主要有两种,一种JSON,一种 XML。主要用JSON演示。

    • JSON,是JavaScript Object Notation,JavaScript 对象表示法。是用来表示JavaScript的对象,或者JavaScript数据等。因为JavaScript广泛的应用在 Web的前端页面,所以 JSON 主要应用在 Web 接口中。主要的应用场景:
      • APP移动端和服务器的通信。用应用层 HTTP 协议,通过 Web接口读取数据和处理(提交)数据。
      • Web前端与服务器的通信,往往服务器是第三方的,主要的场景就是 支付和第三方登录。
        • 京东 web端 调用 微信支付、财付通支付、支付宝支付、银联支付、网银支付。。。
        • 京东 web端 支持 微信登录、QQ登录、微博登录
        • 京东 web端 显示 第三方的的物流信息(顺丰、申通、圆通。。。)
        • 公共数据,在web端/APP端的天气预报 是由第三方接口提供。
    • XML,Extensible Markup Language,可扩展的标记语言,HTML就是XML的一种形式,通过 标签的成对出现,以及标签的层次,来决定数据的内容。XML 主要用在后端的 应用程序接口的数据传递,比如 Java,C#等。XML 比较旧的格式。

    接下来用一个例子,来分别JSON和XML表示以下的表格数据。

    employee_id first_name last_name email phone_number hire_date job_id salary
    100 Steven King SKING 515.123.4567 6/17/1987 AD_PRES 24000
    101 Neena Kochhar NKOCHHAR 515.123.4568 9/21/1989 AD_VP 17000

    首先用 JSON的形式,JSON是“键值对”(Key Value)的形式

    {
      "employees": [{
        "employee_id": 100,
        "first_name": "Steven",
        "last_name": "King",
        "email": "SKING",
        "phone_number": "515.123.4567",
        "hire_date": "6/17/1987",
        "job_id": "AD_PRES",
        "salary": 24000
      },
      {
        "employee_id": 101,
        "first_name": "Neena",
        "last_name": "Kochhar",
        "email": "NKOCHHAR",
        "phone_number": "515.123.4568",
        "hire_date": "9/21/1989",
        "job_id": "AD_VP",
        "salary": 17000
      }]
    }
    

    对应的 XML 格式:

    <?xml version="1.0" encoding="UTF-8" ?>
    <employees>
    	<employee>
    		<employee_id>100</employee_id>
    		<first_name>Steven</first_name>
    		<last_name>King</last_name>
    		<email>SKING</email>
    		<phone_number>515.123.4567</phone_number>
    		<hire_date>6/17/1987</hire_date>
    		<job_id>AD_PRES</job_id>
    		<salary>24000</salary>
    	</employee>
    	<employee>
    		<employee_id>101</employee_id>
    		<first_name>Neena</first_name>
    		<last_name>Kochhar</last_name>
    		<email>NKOCHHAR</email>
    		<phone_number>515.123.4568</phone_number>
    		<hire_date>9/21/1989</hire_date>
    		<job_id>AD_VP</job_id>
    		<salary>17000</salary>
    	</employee>
    </employees>
    

    Web 接口的定义来决定测试内容

    1. Method:GET POST PUT DELETE
    2. URL: 接口的地址
    3. 请求参数:每个参数名字,参数的类型,参数的范围,参数是否可选,参数是否有默认值
    • 等价类:有效等价的参数,无效等价的参数
    • 边界值:离点,上点,内点
    • 正交试验法:×因子 ×状态
    • 有的时候,参数之间关联:省,市,县(区),尤其注意非法(无效)的关联
    1. 断言:检查响应的内容
    • 正文:正文是否包含某些字符
    • 正文:JSON 或者 XML 的键值对检查,数量检查 xx.length
    • 响应的状态码:200, 403
    • 响应的时间: 100ms, 200ms
      *5. 认证:你是否有权限访问接口
    1. 接口的实质对象:数据

      1. 数据的格式
      2. 数据的内容

    4. Postman 的使用

    1. 测试 心知天气 API:https://www.seniverse.com/

      1. 登录 心知天气 (先注册)

      2. 读 接口的 API 文档

        • API的定义: API 的URL的组成 和请求方法
        • API的参数
          • 请求参数
          • 响应参数
      3. 以 获取实时天气作为示例:

        1. API的方法和URL:GET, https://api.seniverse.com/v3/weather/now.json

        2. API的参数:

          1. 请求参数:

            参数名 参数类型 参数意义 是否必选
            key string 你的API密钥 true
            location string 查询的地理位置 true
            language string 结果表示的语言 false,默认简体中文
            unit string 结果表示的单位(华氏度,摄氏度) false,默认摄氏度
          2. 响应参数:

            参数名 参数类型 参数意义
            location 对象:包括id, name, country, time_zone, time_zone_offset
            now 对象:包括 text,code, temperature, feel_like…
            last_update 日期
          3. 用Postman开始测试

            1. new tab 中输入 方式,和URL

            2. 点击 Params 设置参数

            3. 点击 send 开始发送请求

            4. 查看请求结果是否有输出,格式是否和上述的响应参数对应

              {
                "results": [
                  {
                    "location": {
                      "id": "WS10730EM8EV",
                      "name": "Shenzhen",
                      "country": "CN",
                      "path": "Shenzhen,Shenzhen,Guangdong,China",
                      "timezone": "Asia/Shanghai",
                      "timezone_offset": "+08:00"
                    },
                    "now": {
                      "text": "Cloudy",
                      "code": "4",
                      "temperature": "25"
                    },
                    "last_update": "2017-05-09T10:05:00+08:00"
                  }
                ]
              }
              

            5. 编辑 Tests 页面,添加断言。

              var jsonData = JSON.parse(responseBody);
              tests["检查城市名称"] = jsonData.results[0].location.name === "Shenzhen";
              
    2. 使用Postman 登录然之系统,测试登录接口

      1. 使用然之 4.2 或者以上版本

      2. 修改然之系统 配置文件 C:\xampp5\htdocs\ranzhi\config\my.php,在最后添加一行配置,如下图:

        修改 然之 配置文件

        $config->notEncryptedPwd = true;
        
      3. 重启 Apache

      4. 打开 Chrome,输入然之的网址,打开登录页面

        Chrome 打开登录页面

      5. 打开 Fiddler,并设置 Chrome 进行抓包

      6. 在 Chrome 中进行登录,提交用户名和密码

      7. 在 Fiddler 中捕获刚刚的登录 POST 请求

        Fiddler 抓包登录 POST

      8. 打开 Postman,新建 URL,POST方法。

        需要设置 Postman,点击 File | Settings,进行设置

        settings

        Setting 2

      9. 在 Postman 输入刚刚 Fiddler 请求的 POST 的 URL

        Fiddler 抓包分析

        输入上述 URL

        URL

      10. 在 Fiddler 中复制请求的第二行到空行之间的 消息报头(Head),Postman 输入 Head

      Head 1

      Head2.png

      1. 在 Fiddler 中复制请求的正文,在 Postman 中 body 选择 raw,并输入

        输入 Body

      2. 在 Postman 的test 中输入以下测试内容:

        输入断言

        var jsonData = JSON.parse(responseBody);
        tests["检查locate"] = jsonData.locate === "\/sys\/index.html";
        tests["检查result"] = jsonData.result === "success";
        tests["Status code is 200"] = responseCode.code === 200;
        
      3. 在 Chrome 中退出登录,注意此步骤很重要,退出以后才能够进行 Postman 登录

        退出 然之

      4. 在 Postman 中点击 Send,进行测试

        测试结果

      5. 查看 Postman 的运行结果。

        result.png

    5. Web 接口的认证

    Web 接口测试的准备

    1. HTTP协议的请求和响应
      请求:GET/POST
      响应:html/JSON/XML/CSS/JavaScript/png…
    2. 测试的概念
      断言:检查返回的响应里面的内容。
      测试设计:根据请求的参数来设计用例
    3. 读懂接口的文档
      请求的方式和URL
      请求的参数和响应的参数
    4. 在请求接口时使用认证
      basic authorization 基础认证,输入用户名和密码

    在上面四个的基础上,注意Web 接口需要认证,尤其是支付业务,这里用一个例子,并且是POST请求 + Basic Auth 认证,来阐述此部分。

    示例的步骤:

    1. 打开 https://www.pingxx.com/ Ping++ 在线支付网站,注册一个账号,并登录,会自动创建一个应用。

      Snap27.png

    2. 进入自动创建的应用,进入应用的控制面板界面。

    3. 获取 APP[id],按如图的方式获取到,并等下使用

      Snap28.png

    4. 获取 Test Secret Key,按照如图的方式获取到,并依旧等下使用

      Snap29.png

      Snap30.png

    5. 按照下操作,查阅 API 文档,并开始测试。

      Snap31.png
      Snap32.png
      Snap33.png

    6. 选择 Charge,创建一个 支付订单,查阅 API 文档的请求参数,响应参数,依旧 方法和URL

      Snap34.png

    7. 在Postman 中创建新的测试,输入 POST 和 URL

      Snap35.png

    8. 设置参数,其中需要用到 APP[id],为之前步骤获取到的。

      Snap36.png

    9. 在 请求中使用 认证,Basic Auth,输入 之前步骤获取到的 Test Secret Key,作为用户名。

      Snap37.png
      Snap38.png

    10. 添加测试断言。

    用 JavaScript脚本,查询 JSON 对象的值,并做检查。点击右侧的现成菜单,会自动生成检查 JSON 的框架。

    var jsonData = JSON.parse(responseBody);
    tests["检查object值"] = jsonData.object === "charge";
    tests["检查order_no值"] = jsonData.order_no === "99887766554433221100";
    tests["检查amount值"] = jsonData.amount === 9900;
    

    Snap39.png

    1. 点击 Send 开始测试。

      Snap40.png

    • 示例2:创建红包的Web 接口测试
    1. 微信红包支付接口测试的接口描述

      创建红包的Web接口描述

    2. 在 Postman 中输入 POST 方法和 URL

      Paste_Image.png

    3. 在 Postman 中 使用 Http Basic Auth 认证。输入之前获取的 Secret_test_key。根据 API文档进行的操作

      Paste_Image.png

      在 Postman 中操作

      Paste_Image.png

      Paste_Image.png

    4. 输入 请求的参数,注意 POST 请求的请求参数,输入到 Body 中

      输入正文

    5. 在 Test 设置断言,刚才说要设置 Object 的验证。

      输入以下内容:

      断言

      var jsonData = JSON.parse(responseBody);
      tests["检查 Object 属性"] = jsonData.object === "red_envelope";
      tests["检查 金额 属性"] = jsonData.amount === 6000;
      

    6. 点击Send,检查。

      结果

    7. 到管理平台查看订单结果。

      Paste_Image.png

    6. Postman 的其他功能

    Postman 支持导出用例以及账户的同步功能。

    Snap41.png

    7. Python requests 的使用

    Postman 作为工具,有UI的工具可以完整的操作 Web API(Application Programming Interface),有些场景,还需要在自动化测试方案中操作 Web API。对于 Python 来说有两种主流的工具操作 HTTP Web API。

    • urllib (python 自带的,但是语法反人类)
    • requests (第三方的,但是 HTTP Request for human),我们推荐这个 requests 工具。

    和 Selenium 一样,requests 也是第三方的工具库。类比 Selenium 操作浏览器,requests 操作 HTTP 请求。

    部署 requests 的过程

    pip install requests
    

    requests 有两个常见的方法

    1. requests.get()
    2. requests.post()

    上面两个方法都会返回一个 Response 类的对象。注意 Response 类 属于 requests。

    作为自动化接口测试工具,类似于 Selenium,我们需要 用 Page-Object 方式进行设计

    • 每个 Page 写一个 URL 的功能。
      • get_realtime_weather_by_ip
      • get_realtime_weather_by_city
      • get_realtime_weather_by_location
      • … 单位
      • … 语言
    • 每个 page 都不可以 直接用 requests
      • 封装 requests 到 box_requests.py
      • 创建一个类,用来从封装的 box_requests.py 中返回我们定制的 结果(响应)
    • 在每个用例中,继承 unittest.TestCase,调用 Page,进行测试
      • 测试用的数据还是应该抽出来,放到 csv 或者 数据库中

    8. 简单的GET请求实例

    • 天气实况

    GET /weather/now.json

    获取指定城市的天气实况。付费用户可获取全部数据,免费用户只返回天气现象文字、代码和气温3项数据。注:中国城市暂不支持云量和露点温度。

    请求地址示例

    https://api.seniverse.com/v3/weather/now.json?key=MJX11XSAPG&location=beijing&language=zh-Hans&unit=c

    参数

    • key

      你的API密钥

    • location

      所查询的位置参数值范围:城市ID 例如:location=WX4FBXXFKE4F城市中文名 例如:location=北京省市名称组合 例如:location=辽宁朝阳、location=北京朝阳城市拼音/英文名 例如:location=beijing(如拼音相同城市,可在之前加省份和空格,例:shanxi yulin)经纬度 例如:location=39.93:116.40**(纬度前经度在后,冒号分隔)**IP地址 例如:location=220.181.111.86(某些IP地址可能无法定位到城市)“ip”两个字母 自动识别请求IP地址,例如:location=ip

    • language

      **语言 (可选)**参数值范围:点此查看

    • unit

      **单位 (可选)**参数值范围:c 当参数为c时,温度c、风速km/h、能见度km、气压mbf 当参数为f时,温度f、风速mph、能见度mile、气压inch默认值:c

    返回结果 200

    {
      "results": [{
      "location": {
          "id": "C23NB62W20TF",
          "name": "西雅图",
          "country": "US",
          "timezone": "America/Los_Angeles",
          "timezone_offset": "-07:00"
      },
      "now": {
          "text": "多云", //天气现象文字
          "code": "4", //天气现象代码
          "temperature": "14", //温度,单位为c摄氏度或f华氏度
          "feels_like": "14", //体感温度,单位为c摄氏度或f华氏度
          "pressure": "1018", //气压,单位为mb百帕或in英寸
          "humidity": "76", //相对湿度,0~100,单位为百分比
          "visibility": "16.09", //能见度,单位为km公里或mi英里
          "wind_direction": "西北", //风向文字
          "wind_direction_degree": "340", //风向角度,范围0~360,0为正北,90为正东,180为正南,270为正西
          "wind_speed": "8.05", //风速,单位为km/h公里每小时或mph英里每小时
          "wind_scale": "2", //风力等级,请参考:http://baike.baidu.com/view/465076.htm
          "clouds": "90", //云量,范围0~100,天空被云覆盖的百分比 #目前不支持中国城市#
          "dew_point": "-12" //露点温度,请参考:http://baike.baidu.com/view/118348.htm #目前不支持中国城市#
      },
      "last_update": "2015-09-25T22:45:00-07:00" //数据更新时间(该城市的本地时间)
      }]
    }
    

    具体的步骤:

    • 封装 requests 到 box_requests.py

      import requests
      from model.http_response import HttpResponse
      
      class BoxRequests:
          def get(self, url, param):
              """
              用 Get 的方式请求 URL
              :param url: 
              :param param: 参数
              :return: model 中的 HttpResponse 类的对象
              """
              r = requests.get(url, param)
              http_response = HttpResponse()
              http_response.status_code = r.status_code
              http_response.json_dict = r.json()
              return http_response
      
      

    • 创建一个文件夹 model,在里面创建一个类 HttpResponse

      class HttpResponse:
          status_code = None
          json_dict = None
      

    • 创建一个 page :senivers_realtime_weather_page.py

      from base.box_requests import BoxRequests
      
      class SeniversRealtimeWeatherPage:
      
          base_url = "/weather/now.json"
      
          def get_weather_by_ip(self, host, api_key):
              """
              根据IP地址所在的地方查询天气
              :param host:
              :param api_key:
              :return: 自定义的 HttpResponse 类的对象
              """
              br = BoxRequests()
      
              # 创建一个字典,用来传参数
              param = {
                  "key": api_key,
                  "location": "ip"
              }
      
              # 用 host 和 全局 base_url 拼成 URL
              http_response = br.get(host + self.base_url, param)
              return http_response
      
      

    • 创建一个 case :seniverse_api_tests.py

      import unittest
      
      from pages.api.senivers_realtime_weather_page import SeniversRealtimeWeatherPage
      

      class SeniverseApiTests(unittest.TestCase):
      api_key = None
      page = None
      host = None

      def setUp(self):
          self.api_key = "MJX11XSAPG"
          self.host = "https://api.seniverse.com/v3"
          self.page = SeniversRealtimeWeatherPage()
      
      def test_query_realtime_weather_by_ip(self):
          r = self.page.get_weather_by_ip(self.host, self.api_key)
          self.assertEqual(200, r.status_code, "状态码返回不正确!")
          expected_city = "深圳"
          actual_city = r.json_dict["results"][0]["location"]["name"]
          self.assertEqual(expected_city, actual_city, "城市名称与ip不相符合")
      

      if name == “main”:
      unittest.main()

      
      ​
      
      ## 9. 简单的 POST 请求实例
      
      1. 封装 Requests.post()方法
         1. 传递 url
         2. 传递 data
         3. 传递 headers
      2. 创建 PingChargeCreatePage 类
         1. create()
         2. ...
      3. 创建 用例
      
      示例如下:
      
      ### 创建 Charge 对象
      
      请求:POST `https://api.pingxx.com/v1/charges`
      
      发起一次支付请求时需要创建一个新的 `charge` 对象,获取一个可用的支付凭据用于客户端向第三方渠道发起支付请求。如果使用测试模式的 API Key,则不会发生真实交易。当支付成功后,Ping++ 会发送 Webhooks 通知。
      
      | 请求参数                                 |                                          |
      | ------------------------------------ | ---------------------------------------- |
      | order_no**REQUIRED**                 | 商户订单号,适配每个渠道对此参数的要求,必须在商户系统内唯一。( `alipay` : 1-64 位, `wx` : 2-32 位, `bfb` : 1-20 位, `upacp` : 8-40 位, `yeepay_wap` :1-50 位, `jdpay_wap` :1-30 位, `qpay` :1-30 位, `cmb_wallet` :10 位纯数字字符串。注:除 `cmb_wallet` 外的其他渠道推荐使用 8-20 位,要求数字或字母,不允许特殊字符)。 |
      | app [ id ]**EXPANDABLE****REQUIRED** | 支付使用的 `app` 对象的 `id` , `expandable` 可展开,查看 [如何获取App ID](https://help.pingxx.com/article/198599) 。 |
      | channel**REQUIRED**                  | 支付使用的第三方支付渠道。参考 [支付渠道属性值](https://www.pingxx.com/api#%E6%94%AF%E4%BB%98%E6%B8%A0%E9%81%93%E5%B1%9E%E6%80%A7%E5%80%BC) 。 |
      | amount**REQUIRED**                   | 订单总金额(必须大于0),单位为对应币种的最小货币单位,人民币为分。如订单总金额为 1 元, `amount` 为 100,么么贷商户请查看申请的借贷金额范围。 |
      | client_ip**REQUIRED**                | 发起支付请求客户端的 IPv4 地址,如: 127.0.0.1。         |
      | currency**REQUIRED**                 | 三位 ISO 货币代码,目前仅支持人民币 `cny` 。             |
      | subject**REQUIRED**                  | 商品的标题,该参数最长为 32 个 Unicode 字符,银联全渠道( `upacp` / `upacp_wap` )限制在 32 个字节。 |
      | body**REQUIRED**                     | 商品的描述信息,该参数最长为 128 个 Unicode 字符,yeepay_wap 对于该参数长度限制为 100 个 Unicode 字符。 |
      | extra*optional*                      | 特定渠道发起交易时需要的额外参数,以及部分渠道支付成功返回的额外参数,详细参考 [支付渠道 extra 参数说明](https://www.pingxx.com/api#%E6%94%AF%E4%BB%98%E6%B8%A0%E9%81%93-extra-%E5%8F%82%E6%95%B0%E8%AF%B4%E6%98%8E) 。 |
      | time_expire*optional*                | 订单失效时间,用 Unix 时间戳表示。时间范围在订单创建后的 1 分钟到 15 天,默认为 1 天,创建时间以 Ping++ 服务器时间为准。 微信对该参数的有效值限制为 2 小时内;银联对该参数的有效值限制为 1 小时内。 |
      | metadata*optional*                   | 参考 [元数据](https://www.pingxx.com/api#%E5%85%83%E6%95%B0%E6%8D%AE) 。 |
      | description*optional*                | 订单附加说明,最多 255 个 Unicode 字符。              |
      
      **返回**
      
      返回一个支付凭据 `charge` 对象。鉴于支付渠道对 `order_no` 的合法性要求,为了保证支付请求的正确处理,请务必保证对于同一支付渠道下,不同支付产品间 `order_no` 的唯一性。例如:已在微信公众号下使用的 `order_no` 则无法在微信支付以及微信公众号扫码下重复使用,该规则同样适用于其他同类渠道。如果发生错误,则会返回错误码和错误详情,详见 [错误](https://www.pingxx.com/api#%E9%94%99%E8%AF%AF)。
      
      根据 Postman 执行这个测试的情况。选择以下的数据:
      
      - headers
      - data:params
      
      把上述的两个数据,变成Python 的字典传递到 requests.post() 中,
      
      检查得到的响应中的 Json 对象的值。
      
      1. 修改 box_requests,添加 post_json方法
      
         ```python
         def post_json(self, url, data=None, json=None, **kwargs):
             """
                 用 POST 的方式请求 URL
                 :param url:
                 :param data: 提交的数据
                 :param json: 提交的 json (可选)
                 :param kwargs: 额外的参数
                 :return:
                 """
             r = requests.post(url, data, json, **kwargs)
             http_response = HttpResponse()
             http_response.status_code = r.status_code
             http_response.json_dict = r.json()
             return http_response
      
      1. 创建 page,为测试用例服务

        class PingxxChargeCreatePage:
            base_url = "/charges"
        
            def create_charge(self, host, data, headers):
                br = BoxRequests()
        
                # 用 host 和 全局 base_url 拼成 URL
                http_response = br.post_json(host + self.base_url,
                                             data=data,
                                             headers=headers)
                return http_response
        

      2. 创建 test_case

        import unittest
        from pages.api.pingxx_charge_create_page import PingxxChargeCreatePage
        
        class PingxxApiTests(unittest.TestCase):
            test_secret_key = None
            app_id = None
            page = None
            host = None
        
            def setUp(self):
                self.app_id = "app_rfv1SGmPKijLnPef"
                self.test_secret_key = "c2tfdGVzdF80bXpqelRpenpQQ0NqVEt5VEN5VGVqYlA6"
                self.host = "https://api.pingxx.com/v1"
                self.page = PingxxChargeCreatePage()
        
            def test_create_charge_by_wechat(self):
                data = {
                    "order_no": "88888888666666664444444422222222",
                    "app[id]": self.app_id,
                    "channel": "wx",
                    "amount": 10000000,
                    "client_ip": "192.168.1.202",
                    "currency": "cny",
                    "subject": "iphone 999 正品行货",
                    "body": "正规的水货 iphone 8 1000台",
                    "description": "iphone 8   一打。。。。订单附加说明,最多 255 个 Unicode 字符。"
                }
        
                headers = {"Authorization": "Basic %s" % self.test_secret_key}
        
                r = self.page.create_charge(self.host, data, headers)
                self.assertEqual(200, r.status_code, "状态码返回不正确!")
                expected_object = "charge"
                actual_object = r.json_dict["object"]
                self.assertEqual(expected_object, actual_object, "对象是否为支付检查失败!")
        

        if name == “main”:
        unittest.main()

    展开全文
  • 什么是接口测试?怎样做接口测试

    万次阅读 多人点赞 2018-08-20 11:17:31
    扫盲内容: 1.什么是接口? 2.接口都有哪些类型?...接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议...

    扫盲内容:

    1.什么是接口?

    2.接口都有哪些类型?

    3.接口的本质是什么?

    4.什么是接口测试?

    5.问什么要做接口测试?

    6.怎样做接口测试?

    7.接口测测试点是什么?

    8.接口测试都要掌握哪些知识?

    9.其他相关知识?

    1.什么是接口?

    接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议,来进行数据之间的交互。

    2.接口都有哪些类型?

    接口一般分为两种:1.程序内部的接口 2.系统对外的接口

    系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的。

    程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。

    接口的分类:1.webservice接口 2.http api接口

    webService接口是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。

    http api接口是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。

    json是一种通用的数据类型,所有的语言都认识它。(json的本质是字符串,他与其他语言无关,只是可以经过稍稍加工可以转换成其他语言的数据类型,比如可以转换成Python中的字典,key-value的形式,可以转换成JavaScript中的原生对象,可以转换成java中的类对象等。)

    3.接口的本质及其工作原理是什么?

    接口你可以简单的理解他就是URL,工作原理就会说URL通过get或者post请求像服务器发送一些东西,然后得到一些相应的返回值,本质就是数据的传输与接收。

    4.什么是接口测试?

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

                  –百度百科

    简答的说就是通过URL像服务器或者其他模块等,传输我们想传输的数据,然后看看他们返回的是不是我们预期想要的。

    5.问什么要做接口测试?

       1.越底层发现bug,它的修复成本是越低的。

       2.前端随便变,接口测好了,后端不用变,前后端是两拨人开发的。

       3.检查系统的安全性、稳定性,前端传参不可信,比如京东购物,前端价格不可能传入-1元,但是通过接口可以传入-1元。

     4.如今的系统复杂度不断上升,传统的测试方法成本急剧增加且测试效率大幅下降,接口测试可以提供这种情况下的解决方案。

     5. 接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。接口持续集成是为什么能低成本高收益的根源。

     6.   现在很多系统前后端架构是分离的,从安全层面来说:

            (1)、只依赖前端进行限制已经完全不能满足系统的安全要求(绕过前面实在太容易), 需要后端同样进行控制,在这种情况下就需要从接口层面进行验证。

            (2)、前后端传输、日志打印等信息是否加密传输也是需要验证的,特别是涉及到用户的隐私信息,如身份证,银行卡等。

    6.怎样做接口测试?

    –由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。

    –也可以用 接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。

    7.接口测测试点是什么?

    目的:测试接口的正确性和稳定性;

    原理:模拟客户端向服务器发送请求报文,服务器接收请求报文后对相应的报文做处理并向客户端返回应答,客户端接收应答的过程;

    重点:检查数据的交换,传递和控制管理过程,还包括处理的次数;

    核心:持续集成是接口测试的核心;

    优点:为高复杂性的平台带来高效的缺陷监测和质量监督能力,平台越复杂,系统越庞大,接口测试的效果越明显(提高测试效率,提升用户体验,降低研发成本);

    用例设计重点:通常情况下主要测试最外层的两类接口:数据进入系统接口(调用外部系统的参数为本系统使用)和数据流出系统接口(验证系统处理后的数据是否正常);

    PS:设计用例时还需要注意外部接口提供给使用这些接口的外部用户什么功能,外部用户真正需要什么功能;

        问题1.1、后端接口都测试什么?

      –回答这个问题,我们可以从接口测试活动内容的角度下手,看一下面这张图,基本反应了当前我们项目后端接口测试的主要内容:

    问题2、后端接口测试一遍 ,前端也测试一遍,是不是重复测试了?

      –回答这个问题,我们可以直接对比接口测试和app端测试活动的内容,如下图为app测试时需要覆盖或考虑内容:

       从上面这两张图对比可以看出,两个测试活动中相同的部分有功能测试、边界分析测试和性能测试,其它部分由于各自特性或关注点不同需要进行特殊的测试,在此不做讨论。接下来我们针对以上三部分相同的内容再进行分析:

    1、基本功能测试:

      由于是针对基本业务功能进行测试,所以这部分是两种测试重合度最高的一块,开发同学通常所指的也主要是这部分的内容。

    2、边界分析测试:

      在基本功能测试的基础上考虑输入输出的边界条件,这部分内容也会有重复的部分(比如业务规则的边界)。但是,前端的输入输出很多时候都是提供固守的值让用户选择(如下拉框),在这种情况下测试的边界范围就非常有限,但接口测试就不存在这方面的限制,相对来说接口可以覆盖的范围更广,同样的,接口出现问题的概率也更高。

     3、性能测试:

      这个比较容易区分,虽然都需要做性能测试,但关注点确大不相同。App端性能主要关注与手机相关的特性,如手机cpu、内存、流量、fps等。而接口性能主要关注接口响应时间、并发、服务端资源的使用情况等。两种测试时的策略和方法都有很大区别,所以这部分内容是需要分开单独进行测试的,理论上来说这也是不同的部分。

     

    综论:

          1、接口测试和app测试的活动有部分重复的内容,主要集中在业务功能测试方面。除此之外,针对各自特性的测试都不一样,需要分别进行有针对性的测试,才能确保整个产品的质量。

      2、接口测试可以关注于服务器逻辑验证,而UI测试可以关注于页面展示逻辑及界面前端与服务器集成验证

    3、接口测试持续集成:

          对接口测试而言,持续集成自动化是核心内容,通过持自动化的手段我们才能做到低成本高收益。目前我们已经实现了接口自动化,主要应用于回归阶段,后续还需要加强自动化的程度,包括但不限于下面的内容:

      a) 流程方面:在回归阶段加强接口异常场景的覆盖度,并逐步向系统测试,冒烟测试阶段延伸,最终达到全流程自动化。

      b) 结果展示:更加丰富的结果展示、趋势分析,质量统计和分析等

      c) 问题定位:报错信息、日志更精准,方便问题复现与定位。

      d) 结果校验:加强自动化校验能力,如数据库信息校验。

      e) 代码覆盖率:不断尝试由目前的黑盒向白盒下探,提高代码覆盖率。

      f) 性能需求:完善性能测试体系,通过自动化的手段监控接口性能指标是否正常。

     

    4、接口测试质量评估标准:

      a) 业务功能覆盖是否完整

      b) 业务规则覆盖是否完整

      c) 参数验证是否达到要求(边界、业务规则)

      d) 接口异常场景覆盖是否完整

      e) 接口覆盖率是否达到要求

      f)  代码覆盖率是否达到要求

      g) 性能指标是否满足要求

      h) 安全指标是否满足要求

    8.接口测试都要掌握哪些知识?

    ①了解系统及内部各个组件之间的业务逻辑交互;

    ②了解接口的I/O(input/output:输入输出);

    ③了解协议的基本内容,包括:通信原理、三次握手、常用的协议类型、报文构成、数据传输方式、常见的状态码、URL构成等;

    ④常用的接口测试工具,比如:jmeter、loadrunner、postman、soapUI等;

    ⑤数据库基础操作命令(检查数据入库、提取测试数据等);

    ⑥常见的字符类型,比如:char、varchar、text、int、float、datatime、string等;

     

    如何学这些技能?

    ①系统间业务交互逻辑:通过需求文档、流程图、思维导图、沟通等很多渠道和方式;

    ②协议:推荐《图解http》这本书,内容生动,相对算是入门级的书籍,其他的还有《图解tcp、IP》等;

    ③接口测试工具:百度这些工具,然后你会发现,好多的教学博客、相关问题解决方案、以及一些基于工具的书籍,当然,选择合适的书很重要;

    ④数据库操作命令:学习网站(W3C菜鸟教程)、教学博客,以及一些数据库相关书籍,入门级推荐:《mysql必知必会》、《oracle PL/SQL必知必会》等

    ⑤字符类型:还是百度,有句话这么说:内事不决问百度,外事不决问Google。。。

     

     如何获取接口相关信息?

    一般的企业,都会由开发或者对应的技术负责人员编写接口文档,里面会注明接口相关的地址、参数类型、方法、输入、输出等信息,如果没有,想办法获取。。。

    接口文档八要素:

    封面:封面最好是本公司规定的封面,有logo,内容标题,版本号,公司名称,文档产生日期;

    修订历史:表格形式较好些,包括:版本、修订说明、修订日期、修订人、审核时间审核人等;

    接口信息:接口调用方式,常用的GET/POST方式,接口地址;

    功能描述:简洁清晰的描述接口功能,比如:接口获取的信息不包括哪些;

    接口参数说明:每个参数都要和实际中调用的一样,包括大小写;参数的含义言简意赅的说明,格式,是string 还是int 还是long等格式;

                说明部分,说明参数值是需要哪里提供,并详细说明参数怎么生成的,例如时间戳,是哪个时间段的,参数是否必填,一些参数是必须要有的,有些是可选参数等;

    返回值说明:

    ①最好有一个模板返回值,并说明每个返回参数的意义;

    ②提供一个真实的调用接口,真实的返回值;

    调用限制,安全方面:

    加密方式,或者自己公司一个特殊的加密过程,只要双方采用一致的加密算法就可以调用接口,保证了接口调用的安全性,比如常见的md5;

    文档维护:文档在维护的时候,如有修改一定要写上修改日期,修改人,对大的修改要有版本号变更;

    9.其他相关知识?

    get请求,post请求的区别:

    1、GET使用URL或Cookie传参。而POST将数据放在BODY中。
    2、GET的URL会有长度上的限制,则POST的数据则可以非常大。
    3、POST比GET安全,因为数据在地址栏上不可见。
    4、一般get请求用来获取数据,post请求用来发送数据。
    其实上面这几点,只有最后一点说的是比较靠谱的,第一点post请求也可以把数据放到url里面,get请求其实也没长度限制,post请求看起来参数是隐式的,稍微安全那么一些些,但是那只是对于小白用户来说的,就算post请求,你通过抓包也是可以抓到参数的。(唯一区别就是这一点,上面3点区别都是不准确的)

    http状态码:

    1、200 2开头的都表示这个请求发送成功,最常见的就是200,就代表这个请求是ok的,服务器也返回了。
    2、300 3开头的代表重定向,最常见的是302,把这个请求重定向到别的地方了。
    3、400 400代表客户端发送的请求有语法错误,401代表访问的页面没有授权,403表示没有权限访问这个页面,404代表没有这个页面。
    4、500 5开头的代表服务器有异常,500代表服务器内部异常,504代表服务器端超时,没返回结果。

    webservice接口怎么测试:

    它不需要你在拼报文了,会给一个webservice的地址,或者wsdl文件,直接在soapui导入,就可以看到这个webservice里面的所有接口,也有报文,直接填入参数调用,看返回结果就可以了。
    天气预报wsdl地址:http://www.webservicex.net/globalweather.asmx?wsdl

     

    cookie与session的区别:

    1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

    2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗

    考虑到安全应当使用session。

    3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

    考虑到减轻服务器性能方面,应当使用cookie。

    4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

    5、所以个人建议:

    将登陆信息等重要信息存放为session
    其他信息如果需要保留,可以放在cookie中

    展开全文
  • 接口测试点及常见bug

    千次阅读 2021-02-22 16:51:08
    常见问题 注意项 增(出现bug的大头) 1. 插入数据做边界限制校验 2. 插入数据的正确性 3. 插入数据对已有数据的影响 1. 当插入超长字符、超边界数字、超大list时,程序异常2.当插入的参数值是不存在、已删除、...
  • 软件接口测试中的接口特指API接口 接口测试又称API测试 接口实例:系统与系统间的接口调用,作用:实现了两个或多个独立系统或模块间的通信和数据交换能力。 常见的Web接口类型 REST接口——通过HTTP的get和post...
  • 接口请求返回状态码总结

    万次阅读 2018-07-03 12:49:22
    前端在调用接口时都要关注接口返回给我们的状态码,之前只是大概的了解比如404是前端的错,可能是路径错误等,300+可能是重定向了,500以上是服务端或者服务器的错误,并没有一个很好的总结。今天中午看群里有人问这...
  • 接口测试经常遇到的bug和问题,如下: 传入参数处理不当,导致程序crash; 类型溢出,导致数据读出和写入不一致; 因对象权限未进行校验,可以访问其他用户敏感信息;---权限校验很重要 状态处理不当,导致...
  • 接口测试

    千次阅读 多人点赞 2019-10-12 13:49:16
    什么是接口? 人类与电脑等信息机器或人类与程序之间的接口称为用户界面。 电脑等信息机器硬件组件间的接口叫硬件接口。 电脑等信息机器软件组件间的接口叫软件接口。...测接口测试的目的:以保证...
  • 接口测试工具Postman使用实践

    万次阅读 多人点赞 2017-12-05 16:18:55
    接口测试工具Postman使用实践本次chat内容包括: 接口的定义 接口的分类 为何要进行接口测试 接口文档示例 Postman工具简介 借助Postman完成HTTP请求接口测试 Postman + Newman + Jenkins 实现接口自动化测试 一、...
  • 接口测试简介以及接口测试用例设计思路

    万次阅读 多人点赞 2018-09-07 11:50:27
    接口测试简介 1.什么是接口 接口就是内部模块对模块,外部系统对其他服务提供的一种可调用或者连接的能力的标准,就好比usb接口,他是系统向外接提供的一种用于物理数据传输的一个接口,当然仅仅是一个接口是不能...
  • 接口测试返回说明

    千次阅读 2018-11-14 14:02:04
    接口测试返回code值的含义 参考博客地址: https://www.cnblogs.com/yechangzhong-826217795/p/8522611.html 1xx - 信息提示 · 100 - Continue 初始的请求已经接受,客户应当继续发送请求的其余部分。(HTTP 1.1...
  • 接口自动化测试之接口测试基础

    万次阅读 多人点赞 2020-02-11 13:29:38
    说明:该篇博客是博主一字一编写的...接口测试3.1 接口测试的含义3.2 接口测试的意义3.2.1 为什么测试接口3.2.2 接口测试的意义3.3 协议接口的分类3.3.1 按系统不同的调用方式进行分类3.3.2 按协议的不同进行分类3...
  • 接口测试接口测试用例设计

    千次阅读 2018-03-06 15:53:18
    导语随着测试分析和分层测试的深化,“接口测试”出现在我们视野的频次越来越高。那么接口测的用例设计常用哪些方法呢?本文将详细描述。1 接口测试1.1 接口测试接口:主要是子模块或者子系统间交互并相互作用的部分...
  • 接口测试全流程

    万次阅读 多人点赞 2018-05-28 11:16:07
    1.什么是接口? 2.接口都有哪些类型? 3.接口的本质是什么? 4.... 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些...
  • 接口测试基础

    千次阅读 2017-04-28 15:52:29
    一、粗谈接口测试 接口有两种分类:一种是程序内部的接口,一种是系统对外的接口。目前最常用的两种接口就是webservice接口和http api接口。其中webservice接口是走soap协议通过http传输,请求报文和报文都是xml...
  • 接口响应状态码(大全):

    千次阅读 2020-05-04 16:29:55
    (加粗的为常见状态码) 1.表示临时响应并需要请求者继续执行操作: 100 ==(继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的 第一部分,正在等待其余部分。 101 == (切换协议) 请求者已要求...
  • REST风格接口测试

    千次阅读 2018-11-03 21:40:59
    为什么要做接口测试? 1、很多系统关联都是基于接口来实现的,接口测试可以将复杂的系统关联进行简化。 2、接口功能比较单一,能够较好的进行测试覆盖,也相对来说容易实现自动化持续集成。 3、接口会相对于界面...
  • 接口测试接口测试总结(一)

    千次阅读 2018-07-21 12:12:02
    什么是接口测试? 接口的概念 接口,两个不同系统(或子程序)交接并通过它彼此作用的部分。 接口测试概念 接口测试(Interface Testing)是针对系统间或系统的组件间接口的一种测试,意在测试特定接口在给定输入...
  • 移动端接口测试

    千次阅读 2019-04-08 11:22:22
    什么是接口 •系统S ...对于B功能的测试,就可以理解为是一个接口测试的行为 •提供了一套标准的使用方法 •支持标准形式的接入,就可以使用提供的方法以及对应的功能,并不关心接...
  • 接口测试 - 1

    千次阅读 2018-12-28 18:43:30
    一、为什么学习接口测试 在当前的程序开发中更多的会使用到面向接口进行开发。 二、程序开发中为什么使用接口 a)有了接口之就相当于定义了一套标准,可以规范我们的开发过程。 b)接口可以保证数据安全。 c)接口...
  • 接口测试普及和接口测试实践

    千次阅读 2018-08-13 16:44:52
    这篇文章对接口测试叙述的比较全面,可以了解下 首先,什么是接口呢? 接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。 系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人...
  • 一、基本概念 1.什么是接口测试接口测试是测试系统...接口测试相对于UI来说,更加稳定,也可以说接口测试是一种特殊的单元测试,当一个系统提供了大量的后台服务,有较少或者基本没有页面操作,比较适合开展...
  • TCP/IP协议之常见状态码(SYN,FIN,ACK,PSH,RST)解析(一) 对于软件测试工程师、前后端工程师、网络工程师、运维工程师等都需要对计算机网络基础知识有一定的了解。 多多我最近也在系统学习计算机网络知识,为了...
  • 资料准确性 HTTP状态码 响应时间 API返回任何错误时的错误代码 授权检查 非功能测试,例如性能测试,安全性测试 用于API测试的工具: 用于API测试的一些工具如下: Postman Katalon Studio SoapUI Assertible ...
  • 怎样做接口测试

    千次阅读 2019-03-04 10:21:53
    扫盲内容: 1.什么是接口? 2.接口都有哪些类型?...接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点,定义特定的交互点,然后通过这些交互点来,通过一些特殊的规则也就是协议...
  • 接口测试之——Charles抓包及常见问题解决 转自简书薪火_ https://www.jianshu.com/p/831c0114179f 简介 Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包...
  • 接口测试 总结(什么是接口测试

    千次阅读 2018-08-13 15:27:47
    总结起来就是 后台写的接口只是接口走通了,不代表逻辑也是通的 ... 接口测试不是目的,接口自动化才是最终结果   今天被打败了,竟然有人问我接口测试怎么测,本文转载自(http://blog.csdn.net/jiary520131...
  • 接口测试详细讲解

    千次阅读 多人点赞 2019-04-19 15:19:37
    超详细——接口测试总结与分享  金字塔模型回顾  金字塔模型  通过之前对金字塔结构的学习,大概了解到了金字塔模型想告诉我们的几个道理:  1.越底层,越稳定。  金字塔主要观点认为单元测试的稳定性高...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,501
精华内容 30,200
关键字:

接口测试常见状态码