接口测试--理论篇+JSON基础(详解)

        这里是接口测试理论篇,博主的微信是qing_an_an,公众号是Sea_Cha,欢迎一起入坑。

        先学习理论,再去实践,这样有助于加深印象,不然就是学完就忘了,不仅仅是自己,也有很多加我的朋友,都是这么一回事,所以理论加实践也是不够的,只有不断的学习,不断的实践。才是真理,自己才能不那么容易忘记。

        加了博主的朋友如果有什么需要的帮助随时都可以留言,私信我,能力之内,能帮则帮。

什么是接口测试

                接口测试:是对系统或组件之间的接口进行测试,主要校验数据的交换、传递和控制管理 过程,以及相互逻辑依赖关系

什么是接口自动化

        接口自动化测试:让程序代替人为对接口项目进行自动化验证测试的过程

        接口测试是一种功能测试,也是一种自动化测试。

        功能测试的角度上说只要管输入数据后得到的输出结果是怎么样的,从执行方式上来讲接口必须要借助工具来实现。

        接口测试与性能测试之间存在接口性能测试,主要通过jmeter来进行压测。

接口测试的意义

        接口测试可以测试一些界面测试非常难以实现或无法测试的范围,接口测试直接测试后端服务,更加接近服务器上运行代码,也更能发现影响范围广泛的bug。

        接口测试的实现方式主要有两种:

                工具:jmeter、postman

                代码:Python+requests

        两者有何不同呢?

        工具:更容易上手;测试数据不好控制;不方便测试加密接口;扩展能力不足。

        代码:比较难;测试数据容易控制;可以使用加密函数对接口加密;容易扩展。

        两者之间还是有很大的难易程度区分的。

接口测试原理

        接口测试是基于协议进行测试的,实际上是黑盒测试,基本的测试思路是通过输入和输出来判断被测系统或对象的逻辑是否符合用户需求。

HTTP协议

        HTTP协议也叫超文本传输协议,Hyper Text Transfer Protocol的缩写,用于从万维网(www)服务器传输超文本到本地浏览器的传输协议。

        HTTP是一个基于TCP/IP通信协议(建立连接-3次会话-断开连接-4次会话)来传递数据(HTML文件、 图片、查询结果等)。

        HTTP也有两个最重要的特点:

                简单快速、灵活、无连接、无状态

                1、无连接:限制每次连接时处理一个请求。

                2、无状态:对于事物处理没有记忆能力,意思就是如果后续处理需要前面的信息,则必须 要重传,这样可能导致每次传输的数据量增大。

HTTP组成

         http消息类型有两种:

                1. 请求:由客户端发送,用来触发一个服务器上的动作

                        请求由三个部分组成:请求行、请求头、请求体

                2. 响应:来自服务器的应答

                        响应也由三个部分组成:状态行、响应头、响应正文

请求行

        我们先来说说请求行:一般指的是请求包中的第一行内容

        通常包含:

                1. 请求方法( request method ):重点(get/post/head...)

                2. 请求路径( request path ):就是URL的PATH部分

                3. 协议版本(protocol/version):包括协议和版本号HTTP...

 请求头

         请求头部:紧接着请求行(即第一行)之后的部分,用来说明服务器要使用的附加信息, 主要是为了去完成通信的控制

         请求头的名称一般都是由http协议提前约定好的,具有通信效果,一般不能自定义

请求体

        请求主体。是指第一个空行之后的内容,可以添加任意的数据。

         这里的空行是必须的,一般来说body就是空的。post方法才会产生body内容。

HTTP响应组成

        HTTP响应也由四个部分组成:

                1. 状态行(response line)

                2. 消息报头/响应头( response header )

                3. 空行

                4. 响应正文/响应报文(response body)

状态行

        通常就是响应数据包中的第一行。由HTTP协议/版本号, 状态码, 状态消息三部分组成。

状态码

        由三位数字组成,第一个数字定义了响应的类别,共分五种类别1**,2**,3**,4**,5**。

        其中1**代表信息,服务器收到请求,需要请求者继续执行操作。

        2**代表请求成功,操作被成功接收处理。

        3**代表重定向,需要进一步的操作以完成请求。

        4**客户端错误,请求包含语法错误或无法完成请求。

        5**服务器错误,服务器在处理请求的过程中发生了错误。

        我们来看看常见的状态码:

         常用的状态码这些,还有许多不是常用的这里就不一一做介绍了,有兴趣的朋友可以加博主的微信,一起发你了解。

响应头

       第二行和第三行为消息报头,用来说明客户端要使用的一些附加信息。例如 服务器类型,响应报文格式。

         这里会告诉你响应的时间,采用什么样的数据类型等详细信息。响应头会有很多的参数,每种参数代表的意思也各不同,能看懂个大概也是不错的。

响应正文

        空行后面的html部分为响应正文。表示服务器返回给客户端的文本信息,这里也有必须值得注意的地方就是消息报头后面的空行是必须的,即使第四部分的返回数据为空,也必须有空行

         这里看的是CSDN的抓包,html部分都是属于响应正文的部分

HTTP无状态

        http协议本身是无状态的,但是在实际的web开发中常有一些操作需要有状态。比如想要 访问一些私人访问权限的文章,或者这种操作需要明确当前用户身份。为了解决无状态带来的鉴权问题,一般有以下几种解决方 案:cookie、session、token。

Cookie

        是储存在客户端的一串字符,一般说来大小不超过4kb。比如我们常见的记住密码功能,或者 一些基于之前输入的提醒和默认配置,就是通过cookie来实现的。

        cookie简单说来就是一种本地存储方法。但是这里存储的信息常用来进行鉴权操作。

        cookie只能保存文本信息,浏览器可以禁止cookie。cookie的期限可以被自由设定,可以是仅仅一次浏 览起效,也可以长达一年。如果是短期的,那么这些信息会被存储在内存中,如果是长期则会存储在硬盘上。

        注意:

        单纯的采用cookie来认证身份会带来一个比较麻烦的问题,就是伪造比较容易。因为这样处理, cookie中必然要带有身份信息,但是服务器也要解析这个身份信息,所以必然要在原理上支持双向的 编码和解码,那么这个信息很容易被破解和进一步伪造。

Session

          如果想要解决上述cookie伪造的这个问题,我们常用的方案应该是加一个secret,而这个secret应该是 放在服务器上的,服务器返回这样一个带有secret编码的字符串,而在服务器端再带上这个secret反 向解密,如此一来,问题不就解决了,这个就是我们要讲的第二个对象:session。

        session是保存在服务器端的,是跟踪用户的一种上下文保持的机制。当服务器创建了一个session时, 就给客户端发送的响应头中包含了set-cookie字段。浏览器会将set-cookie的字段信息,将其保存在本地,并且之后发送的请求报文都包含了cookie,cookie中包含了set-cookie返回的字段值。

        Session也可以设定有效时间。

Token

        访问令牌access token,用于接口中,用于标识接口调用者的身份、凭证。简单来说就是不要登录。

        目的:减少用户名和密码的传输次数

        token类型:

                1. API Token(接口令牌):用于访问不需要登录的接口

                2. USER Token(用户令牌):用于访问需要用户登录之后的接口

                3. Token的实效性:token可以是一次性的、也可以在一段时间范围内是有效的

                4. Token一般放在请求头headers或者body参数里面。

                一般在接口文档会有说明

Token鉴权流程

        1. 客户端使用用户名跟密码请求登录

        2. 服务端收到请求,去验证用户名与密码

        3. 验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端

        4. 客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里

        5. 客户端每次向服务端请求资源的时候需要带着服务端签发的 Token

        6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回 请求的数据

JSON

        什么是JSON?

        JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation),JSON是轻量级的文本数据交换格式(数据传递)--xml

        JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,JSON 解析器和 JSON 库支持许多不同 的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。

语法规则

        JSON 语法是 JavaScript 对象表示语法的子集。

                1. 数据在名称/值(键值对)对中 如 {"name" : "zs"}

                2. 数据由逗号分隔 如 {"name" : "zs" , ”age”:”18”}

                3. 大括号保存对象 如 {"name" : "zs" , ”age”:”18”}

                4. 中括号保存数组 如 {"score" : [100,80,90]

数据类型

        1. 数字(整数或浮点数) 如:{“age”:18, ”score”:70.5} 注意,数字直接写,不需要带任何符号

        2. 字符串(在双引号中) 如:{“name”:”zs” , ”sex”:”女”} 注意:字符串是用双引号或者单引号引起 来的内容

        3. 逻辑值(true 或 false) 如:{ "flag":true } 注意:true,false,直接写,不需要加引号

        4. 数组(在中括号中) 如 : {"score" : [100,80,90]} 标识符:[],数组类型是有索引值,索 引值是从0开始的

        5. 对象(在大括号中) 如:{ "stu1":{“name”:”zs” , ”sex”:”女”} , "url":"https://www.baidu.com" }

        6. null 如 : {"score" : Null}

JSON对象

        别看JSON跟字典很像,其实还是有一定区别的。

        1. JSON 对象使用在大括号{}中书写。

        2. 对象可以包含多个 key/value(键/值)对,每个 key/value 对使用逗号(,)分割,最后一个键值对不 需要逗号。

        3. key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

        4. key 和 value 中使用冒号(:)分割。

        5. 如:{ "name":"zs" , "sal":10000, "addr":Null}

JSON与字典的区别

        json--key只能是字符串,value:(字符串, 数字, 对象, 数组, 布尔值或 null)

        dict--key可以是数字(整数,浮点数,布尔值),字符串,元组,就是不能为列表 value可以是数字(整数,浮点数,布尔值),字符串,元组,列表,字典

访问JSON对象值      

myobj={"name":"zs","sal":10000,"add":None}
x=myobj["add"]
print(x)

JSON数组

        1. JSON 数组在中括号中书写。

        2. JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

        3. 对象属性的值可以是一个数组 { "name":"网站" , "num":3, "sites":["Google" , "baidu" , "Taobao" ]} JSON数组,存储的是值,不是键值对

访问JSON数组

n = {"name": "qingan", "age": 22, "sites": ["Google", "baidu", "Taobao"]}
x = n["sites"][0]
print(x)

        这里的取值比较特殊,也是可以通过下标取值的方式取到对应的值。还是可以很直观的看懂的。

  • 68
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 85
    评论
评论 85
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清安无别事

慢慢的积累一杯奶茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值