一、接口测试基本概念:
1.什么是接口:
应用程序中的第三方登录、支付
2.接口测试
是测试系统内部各个组件间接口,以及系统之间与外部之间的交互点
一般用于多系统间交互开发
3.接口测试的主要测试点
数据的交互
过程的管理和控制
系统间的逻辑依赖关系
4.与界面功能测试相比
没有具体的界面;
只需接口的说明(地址、请求方式、返回值及说明、发送请求时参数说明)
5.接口测试必须满足的条件:
接口的功能说明;
接口地址;
接口请求方式;
请求参数、类型、请求参数说明;
返回参数说明。
6.接口信息获取渠道
从标准文档
7.测试用例设计方法
与功能测试方法没区别。
1、 分析需求(接口文档进行分析和阅读)
2、 设计用例,只写预期结果,不写实际结果
二、HTTP协议详解
1.HTTP协议
HTTP协议是Hyper Text Transfer Protocol(超文本 传输协议)的缩写;
是用于从万维网(WWW:World Wide Web )服务 器传输超文本到本地浏览器的传送协议;
HTTP是一个基于TCP/IP通信协议来传递数据 (HTML 文件, 图片文件, 查询结果等)。
2.HTTP的特性
无连接、无状态、媒体独立的
3.HTTPS简介
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目 标的HTTP通道,简单讲是HTTP的安全版。
HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏 览器和服务器之间的通信加密。
4.HTTP和HTTPS的区别:
https协议需要ca证书,免费的整数很少,需要交费;
https需要具有安全性的ssl加密传输协议;
http和https连接方式不同,前者:80,后者:443;
https协议是由ssl+http协议构建的可进行加密传输、身份认证的网路传输,比http协议安全。
5.http协议的请求
基本格式:
请求行(request line)、请求头部(header)、空行和请求数据四 个部分组成
请求方式:
get(获取实体主体)、post(会引起资源的增加或者更新)、head、options、connect、put、delete、trace
6.http响应
基本格式:
状态行、响应头、空行、响应正文
响应状态码分类:
1**:信息,服务器收到请求,需要请求者继续执行操作
2** :成功,操作被成功接收并处理
3** :重定向,需要进一步的操作以完成请求
4** :客户端错误,请求包含语法错误或无法完成请求
5**: 服务器错误,服务器在处理请求的过程中发生了错误
常见状态码:
200 -请求成功
301 -资源被永久转移到其它URL
404 -请求的资源(网页等)不存在
500 -内部服务器错误
三、Postman工具应用
能够用语言描述每个postman操作步骤的过程
1.创建请求和测试集合
2.发送一个没有参数的get请求
1)创建一个请求
2)选择和设置请求的方式为get
3)在URL输入框中输入请求地址
4)发送请求
3.发送一个带参数的get请求-Params
1)创建一个请求
2)选择和设置请求的方式为get
3)在URL输入框中输入请求地址
4)在Postman的Params中设置参数的key和value
5)发送请求
4.发送一个带参数的post请求
1)创建一个请求
2)选择和设置请求的方式为post
3)在URL输入框中输入请求地址
4)在Postman的body中设置参数的key和value 选择参数的组织形式(form-data,x-www-form-urlencoded,raw)
5)发送请求
5.参数化的实现
请求中将常量改为变量:{ {}}
1) 先把请求创建好
2) 将请求中需要进行参数化的数据,设置为参数变量{ {}}
3) 准备好数据文件(text或者CSV文件,CSV文件中,第一行应该是参数变量的名称)
4) 打开runner模块 选择被参数化的Collection或者folder
5) 设置循环次数,设置请求的间隔时间,
6) 设置参数数据文件和数据格式
7) 预览运行形式
8) 运行集合测试
9) 查看结果
6.断言
在test模块实现断言
断言的代码由js语言开发的
postman有内置的断言语言和测试点
测试人员自己有时也需要单独编写和修改断言脚本
对于返回值为json的数据(简单数据和复杂数据)要能够分析数据
7.其他的
环境变量的应用-环境变量、全局变量
导出postman代码-code模块
四、requests库的应用:
能够用语言描述requests库在接口测试中的应用
1.安装和配置requests库
Pip install requests (安装位置:/Lib/site-packages/的目录)
2.requests包
1) request:请求。专门发送请求的模块
2) Response:响应。专门接收服务器的响应内容。
3) Session:会话。专门用来接收应用服务器的返回session。
4) Cookies:服务器返回给客户端浏览器的缓存数据。保存用户登陆信息和其他验证身份的信息。
5) HTTP请求的各种方法:get、post、delete、head、options、put、
6) Status_codes:获取HTTP响应的状态码
3.使用Postman进行接口测试和requests进行接口测试的几个区别:
1) requests更加灵活。对于响应的结果,想看什么才看什么。,不想看的就不显示
2) Postman更加方便。不写代码是最大的优势。
3) Requests进行参数化,纯代码完成;Postman可以纯手工点击完成。
4.使用requests发送请求
1) 没有参数的get请求的发送。只需要使用requests.get(url)即可完成
2) 携带请求头部信息(数据)发送get请求。提前定义好一个表示请求头部信息的字典,发送请求的时候,将头部信息以参数的方式传递,使用requests.get(url=tar_url,headers=需要携带的头部信息)
注意:所有请求的头部信息都是字典,都可以提前定义好,发送请求的时候都可以如此方法携带和传递。
5.对响应值的接收和分析:
状态码、编码格式、text、content、json()
import requests
"""
状态码
响应头:
文件的编码信息
输出相应内容的文本值
"""
# 单独定义一个变量,保存url地址
url_get="https://www.baidu.com"
r=requests.get(url=url_get)
# r=requests.get("https://www.baidu.com")
print(r.status_code)
print(r.headers['content-type'])
print(r.encoding)
print(r.text)
print(r.content)
3.创建请求:请求的方法、请求地址、请求的参数(get-params)
Post请求的参数data,请求头可以用json
import requests
# 定义url
tar_url = "https://www.baidu.com"
# 定义头部信息
headers = {
"Host":"www.baidu.com","Referer":"https://www.baidu.com"}
r = requests.get(url=tar_url,params=headers)
print(r.status_code)
print(r.encoding)
print(r.headers["Server"])
import requests
"""
1.使用post形式
2.使用请求头 content-type application/x-www-form-urlencoded
3.
"""
# 定义url
tar_url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
toubu={
'content-type':'application/x-www-form-urlencoded'
}
canshu={
"q":"promise","from":"auto","to":"zh",
"appid":20200211000382774,"salt":19981114,
"sign":"833476f0165b5419a5ceaa54e94b5364"}
r=requests.get(url=tar_url,json=toubu,params=canshu)
print(r.status_code)
print(r.json())
print(r.text)
print(r.encoding)
- request+unittest+HTMLTestRunner结合编写测试项目
import requests
import unittest
from HTMLTestRunner import HTMLTestRunner
"""
1.使用unittest框架
2.对接口测试脚本进行组织管理
"""
class Vtex(unittest.TestCase):
def setUp(self):
print("测试开始执行")
# 获取最热主题
def test_hot(self):
hot_url = "https://www.v2ex.com/api/topics/hot.json"
res = requests.get(url=hot_url)
print(res.status_code)
print(res.encoding)
print(res.text)
# 获取最新主题
def test_new(self):
new_url = "https://www.v2ex.com/api/topics/latest.json"
res = requests.get(url=new_url)
print(res.status_code)
print(res.encoding)
print(res.text)
# 获取节点信息
def test_node(self):
node_url = "https://www.v2ex.com/api/nodes/show.json"
canshu = {
"name": "python"
}
res = requests.get(url=node_url, params=canshu)
print(res.status_code)
print(res.encoding)
print(res.text)
# 获取用户主页的参数用户 和 id
def test_user(self):
user_url = "https://www.v2ex.com/api/members/show.json"
canshu = {
"id": 1, "username": "Livid"
}
res = requests.get(url=user_url, params=canshu)
print(res.status_code)
print(res.text)
print(res.encoding)
def tearDown(self):
print("测试执行结束")
suite = unittest.TestSuite()
suite.addTest(Vtex("test_hot"))
suite.addTest(Vtex("test_new"))
suite.addTest(Vtex("test_node"))
suite.addTest(Vtex("test_user"))
fp = open("test.html", "wb")
runner = HTMLTestRunner(stream=fp, title="测试用例", description="用例执行情况")
# 创建测试用例
runner.run(suite)
fp.close()
五、抓包工具-Fiddler
只是用于数据抓包;可以借鉴抓包工具的特性完成手工测试无法完成的事情-让请求发送暂停、修改
1、设置HTTPS代理-默认情况下,Fiddler不支持HTTPS协议的数据捕获
2、在主界面中常用的模块:
1> 请求信息统计-Statistics
2>请求信息的详细检查-Insapectors
3>数据过滤-Filter:
局域网额和互联网的过滤
主机/服务器的过滤
客户端进程的过滤
请求信息的过滤
断点功能
响应信息过滤:状态码、内容大小和形式进行过滤
响应头进行过滤
六、JMeter工具
在接口测试方面:必须能够用语言描述其操作
1、搭建和配置JMeter运行环境:
Java开发环境支持-安装JDK。;并且配置JDK环境变量;
直接解压缩JMeter即可;
在JMeter的bin目录中,运行jmeter.bat(Apache JMeter.jar)完成Windows版的启动.
2、应用JMeter
最基本的应用
测试计划
计划之下创建线程组
线程组中添加取样器
线程组中添加监听器
最齐全的应用
除了基本应用外,额外添加-断言-响应断言
参数化
3、断言的设置
设置断言的应用范围
验证的内容
设置匹配模式,包括匹配时的逻辑条件
设置期望/断言的内容(可以是单个的,也可是多个);如果考虑逻辑条件的话,断言内容的数量需要注意
4、设置参数化
设置好csv表格
使用函数助手功能-__CSVRead
将生成的变量引用代码复制和添加到JMeter请求中
设置线程数量-和参数的数量保持一致
5、发送各种请求
get-无参数
get请求-有参数
post请求-有参数(启用专门post请求数据的格式)
6、录制脚本
录制脚本:第三方工具-badboy;自身的技术
badboy-安装和应用----主要作用就在于录制脚本
将badboy脚本导出为JMeter可执行的文件-.jmx
JMeter直接打开badboy录制的脚本,进行适当的修改即可