接口测试基础知识

一、什么是接口

对系统内部或者外部提供数据服务的事物,我们管它叫接口。
对外数据服务:天气预报、热点新闻、疫情数据。某个或者某几个机构专门收集这些信息,并向外通过api(接口的方式)暴露数据服务。
对内数据服务:子系统之间、模块与模块之间、的数据服务接口,提供api暴露服务
接口的形式:HTTP/WEB SERVICE/SOCKET/RMI/...
HTTP接口:本质上是一个URL(网络资源地址),资源(数据):网页、数据(JSON , XML, ...)

二、怎样测试接口

借助一款工具(类似于浏览器),对URL进行访问,并对访问的结果进行分析,对比是否与需求中描述的一致。
需求分析(分析接口文档:通常包含:URL、鉴权、参数、返回值)、测试用例(按照之前的测试理论部分涉及到的方法论,从功能、性能、稳定性、安全性)、
测试执行:借助工具(编写测试脚本)、记录缺陷、测试报告...

接口分析

实际结果是否与预期一致。由于UI测试的结果一目了然可以直接得到结论,但接口测试是基于HTTP协议的,所以测试结果分析本质上是分析HTTP协议

三、计算机网络的基本概念

1.将多台机器连接在一起,实现数据的共享,计算机资源的共享...
2.数据传输,机器之间的访问(寻址)TCP/IP的产生
3.TCP/IP是一个协议族,是在OSI网络7层概念的基础之上简化网络模型为4层(应用层、传输层、网络层、数据链路层)

网络分层的目的,由于网络上进行数据的传输、寻址是比较复杂的过程,所以为了简化问题,提高效率,提高稳定性,保证安全性,将网络分层,每层之间做自己擅长的事情

传输层:TCP (C/S, B/S, web服务)| UDP(即时通讯)

应用层:HTTP

三次握手,建立连接,四次挥手断开连接(具体内容百度)

Request

Request 即请求,由客户端向服务端发出,可以将Request划分成四部分内容:

Request Method:请求方式
Request URL:请求连接
Request Headers:请求头
Request Body:请求体

四、GET和POST

Postman:是一款非常流行的接口测试工具。接口测试,本质上就是通过HTTP协议发送请求,获得服务端的应答,分析服务端的应答与我们的预期是否一致。

在测试过程中Postman就相当于是客户端。在UI测试(系统测试|功能测试),是在浏览器上进行测试,测试接口时使用postman

浏览器无法发送get之外的请求,无法通过body传递数据。

第一部分:Postman接口测试实践

使用Postman接口测试通常分为3步

1.创建集合(Collections)

2.创建请求(Request)

3.执行请求的相应断言(Assert)

集合:

类似于文件夹,用于管理接口测试的脚本。实战中的话,会按照自己测试的子系统|系统模块对集合命名。例如:测试的模块是YSHOP后台子系统,商品管理模块,那么就可以创建集合YSHOP后台/商品管理模块。

创建请求:

一个请求代表一个测试用例

请求方式:GET|POST

URL:接口服务的地址[参数],通常post请求不会再URL中携带参数

参数(数据):get请求携带的数据叫参数,post请求中携带的数据叫表单数据(在Postman中,请求页面的body中输入数据键值对),表单数据有两种最常用的编码方式:form-data(提交到服务器的数据可以包含文本,键值对,也可以包含附件),form-urlencode(提交到服务器的数据会采用和url中提交的数据一致)

认证:由于接口可以通过URL来访问,为了加强请求的限制就有了认证的必要。

OAuth, base Auth, 通常认证的方式为客户端提交服务端发送的票据,或者服务端预订义好的用户名密码。

执行请求对相应分析:

对相应的分析通过编写“代码”在postman请求部分tests页标签中断言,执行测试用例,当测试用例运行出现断言失败则意味着有bug,对bug进行分析并提交问题单。

Tests:

Tests是请求发出并得到响应后,开辟了一个编程环境(沙箱)。所以在该区域中可以获取到request和response的所有数据,进行事后分析。

Console:

控制台,常常用来跟踪输出程序在运行过程中的细节信息,程序在运行过程中的结果的输出

pm.test();

pm.test("断言标题",function(){
    //编写具体的断言内容
});

pm.test("返回码为200",function(){
    //取出请求响应的对象
    var rp = pm.response;
    //取出响应头
    pm.response.headers;
    //取出响应状态
    pm.response.status;
    //取出响应体
    pm.response.json();

    //具体的断言
    pm.expect(pm.response.status).to.equals("ok");

    //找response中的内容(属性)
    //先打印response,看看包含了哪些内容
    //用.属性名的方法获取response中的内容
    response.属性(code)
});

断言三大工具:

pm.test();意思是声明开始断言,可以对断言的内容命名,以及在function(){}中具体的来编写断言

pm.expect(value1).to断言(value2):意思是value1是不是期盼的value2

pm.response.to.have.断言( ):直接通过response断言,而无需通过pm.expect来断言。

pm.response.to.have.status(200)

pm.response.to.have

五、接口测试化

1.变量

占位符,指向一个具体的“值”,后续在其他地方可以方便的通过占位符使用到具体的值。

定义变量:

变量名(占位符)= 变量值(值)

如:host = https://petstore.swagger.io

使用变量:{{host}}

一次定义,多次使用。带来的好处就是简化“值”的使用;当具体的值需要改变的时候只需要修改变量定义部分,变量的使用者不需要做任何的修改。

可以将上一个请求中的结果定义成变量,并在下一个请求中使用

变量的作用域:

作用域,即变量的有效范围。

本地 -- 在resquest中有效。只能在“代码”中设置

pm.varibles.set("变量名","变量值");

本地变量的作用域

全局 -- 所有的环境,所有的集合

集合 -- 集合中可以用,在postman中无法通过图形界面设置,需要在Prescript中,通过代码方式来定义。所以,需要先发送定义集合变量的请求,达到设置集合变量的目的。一旦集合变量设置好后,可以在当前集合中使用该变量(跨集合无法使用)

环境 -- 在具体的环境中有效。可以在postman的图形界面设置(眼睛)。

数据

globals.set("a","1");

优先级:本地>环境>集合>全局

难点(定义---使用):

定义:眼睛(图形),代码(Pre-request|tests)

使用:URL参数部分,body表单部分

代码中定义变量:

pm.作用域.set("变量名","变量值");
作用域:
全局:globals
环境:envirements
集合:collectionVariable
本地:variable

使用

在图形界面中使用变量{{变量名}}

代码中使用变量

pm.作用域.set("变量名");

无论用什么方式定义的变量都可以用图形或者代码获取,只要没有超出作用域。

总结

Jmeter

1、用户变量

定义变量:右键--前置处理器--用户参数

作用域: 当变量在“线程组”中定义,变量的作用域为当前线程组 当变量在“测试计划”中定义,变量的作用域为全局

使用变量:${变量名}

2、函数变量

定义函数变量:jmeter内置了函数,供使用者调用

作用域:全局 使用函数变量:${__函数名(参数值,......)}

URL的组成:

协议://域名|IP+端口/服务路径?参数(参数名=参数值) https://httpbin.org/get?param1=123&param2=abc

3、Beanshell设置变量

定义变量:右键--前置处理器--Beanshell per...

写代码:vars.put("变量名","变量值");

作用域:当前线程有效 使用变量:${变量名}

4、csv变量

准备工作:创建一个csv文件(纯文本文件.csv)

定义变量:右键--配置文件--csv data ...... 定义变量名,多个变量名用逗号分隔

作用域:当前线程组有效 使用变量:${变量名}

5、Cookie

就是客户端的容器。里面存放的是服务端产生的数据。cookie的内容保存在客户端,下次发起请求是携带上,方便服务端验证身份

特征:服务端产生,服务端自己消费,客户端存储

本质:HTTP协议是一种无状态的协议,而使用者(软件使用者)的操作往往需要保留状态。,所以,服务器通过cookie保存状态。

jmeter中默认并不保存服务端产生的cookie,如果需要保存cookie,则添加“HTTP COOKIES管理器”

http cookie 管理器,往往只需要添加进来,不需要做其他的设置。

配置元件(csv数据管理,cookie,http默认值,http信息头)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值