接口自动化测试

接口测试基础

1 认识接口测试

1、接口测试

  • 接口:系统之间数据交互的通道。
    • 硬件接口
    • 软件接口
  • 接口测试:基于不同的输入参数,校验接口响应数据与预期数据是否一致。
  • 接口测试需要学
    1.接口测试用例设计
    2.工具实现接口测试
    3.代码实现接口测试
    image

2、接口测试流程

1.接口文档分析
2.设计测试用例
3.脚本开发
4.执行脚本
5.缺陷跟踪
6.测试报告

2 HTTP协议

1、URL

  • URL:是互联网上标准资源的地址,一般称为统一资源定位符。
  • 组成:协议:// hostname[:port] / path / [? 查询参数1 & 查询参数2]
    image

2、HTTP协议

  • HTTP:超文本传输协议,基于请求与响应的应用层协议。
  • 作用:规定了客户端与服务器之间信息传递规范,是二者共同遵守的协议。
  • 组成:
    • HTTP请求:定义请求数据格式
      • 请求行、请求头、请球体
    • HTTP响应:定义响应数据格式
      • 状态行、响应头、响应体
  • HTTP请求-请求行
    • 位置:请求数据第一行
    • 作用:说明请求方法、访问的资源、协议版本
      image
    • 常用请求方法:
      • GET:从服务器获取资源
      • POST:在服务器新建一个资源
      • PUT:在服务器更新资源
      • DELETE:从服务器删除资源
  • HTTP请求-请球头
    • 位置:请求数据第二行到空白行之间
    • 作用:通知服务器客户端请求信息
    • 特点:请求头部由键值对组成,每行一对
      image
    • Content-Type:请求体数据类型
      • text/html:HTML格式
      • image/jpeg:jpg图片格式
      • application/json:JSON数据格式
      • application/x-www-form-urlencoded: 表单默认的提交数据格式
      • multipart/form-data:在表单中进行文件上传时使用
  • HTTP请求-请求体
    • 位置:空白行之后的内容
    • 作用:传输数据实体
    • 注意:请求体常在POST、PUT方法中使用
    • 常配合的请求头:Content-Type和Content-Length
      image
    • 请求报文中可以没有请求体数据
  • HTTP响应-状态行
    • 位置:响应数据第一行
    • 作用:描述服务器处理结果
    • 内容:状态行由协议版本号、状态码、状态消息组成
      image
    • 状态码:三位数字组成,第一个数字定义响应类别
      • 1XX:指示信息
      • 2XX:成功
      • 3XX:重定向
      • 4XX:客服端错误
      • 5XX:服务端错误
  • HTTP响应-常见响应状态码
    image
  • HTTP响应-响应头
    • 位置:第二行开始到空白行之间
    • 作用:描述客户端要使用的一些附加信息
    • 特点:响应头由键值对组成,每行一对
      image
  • HTTP响应-响应体
    • 位置:响应数据空白行之后
    • 作用:服务器返回的数据实体
    • 特点:由图片、json、xml、html等多种类型
      image

3 接口规范

  • 作用:让前端开发与后端接口开发人员更好的配合,提高工作效率
  • 常见接口规范:
    • 传统接口风格
    • RESTful接口风格
      image
  • 传统接口风格
    • 示例:对用户进行操作的相关接口,包括增删改查
      image
  • RESTful
    • RESTful:一种网络应用程序的设计风格和开发方式,提供了一组设计原则和约束条件。
    • 示例:
      image
    • 特点:
      • 请求API的URL用来定位资源
      • 通过标准HTTP方法对资源进行增删改查操作
      • 利用HTTP状态码返回状态信息
  • 传统风格和RESTful区别:
    image

Postman实现接口测试

1 合同新增业务

  • 先测试业务流程,确保核心功能正常
    image

1、找业务路径

image

2、解析接口文档

  • ① 分析接口之间的依赖关系
    ② 分析接口请求(如:URL、请求方法、请求头、请求参数类型、请求参数等)
    ③ 分析接口响应(如:响应状态码、响应数据等)
    image

3、编写接口测试用例

image

2 登录接口调试

1、Postman介绍

2、登录接口调试-获取验证码

3、登录接口调试-登录

  • 需求:使用Postman访问登录接口,并查看响应结果。
  • 说明:
  • 实现步骤:
  1. 设置请求方式
  2. 输入接口地址
  3. 点击发送请求
  4. 查看响应结果
    image
  • 如何使用Postman发送请求并查看响应结果?
    ① 设置请求方法
    ② 设置URL
    ③ 设置请求头
    ④ 设置请求数据
    ⑤ 点击Send发送请求
    ⑥ 查看响应状态码
    ⑦ 查看响应体数据

3 登录接口自动关联

  • 问题:每次登录之前都需要手动复制验证码数据
  • 思路:
    image
  • 注意:编写代码之前需要手动提前创建并选择对应的环境
  • 环境创建与选择
    image
    image

使用自动关联技术,实现登录成功

  • 需求:
    1、验证码接口:/api/captchaImage
    2、登录接口:/api/login
    3、登录接口请求体uuid字段 → 验证码接口返回uuid字段
  • 分析:
    ①验证码接口响应体中提取uuid
    var jsonData=pm.response.json();
    
    ②设置环境变量保存uuid
    pm.environment.set("var_name",value);
    
    ③登录接口引用uuid
    请求参数中引用:{{var_name}}
    

4 添加课程接口调试

image

5 上传合同接口调试

image
image

  • Postman如何提交multipart/form-data请求数据 ?
    ① 设置请求方法
    ② 设置URL
    ③ 设置请求头
    ④ 设置请求数据
    【body → form-data → file选择上传文件】
    ⑤ 点击Send发送请求
    ⑥ 查看响应状态码
    ⑦查看响应体数据

6 新增合同接口调试

1、添加合同接口调试

image

2、查询合同列表接口调试

image

  • Postman如何提交查询参数
    ①设置在URL中
    ②设置Params区域

7 批量执行

image

Postman批量执行

  • 作用:通过运行测试集的方式批量运行测试用例
  • 步骤:
    ① 点击测试集中的“Run”按钮,批量运行测试用例
    ② 弹出Collection Runner窗口,点击运行按钮
    ③ 查看测试结果
    image
    image
    image

8 登录接口测试

接口用例设计思路

image

image

1、提取测试点

image

2、设计测试用例

image

3、使用Postman进行接口测试

  • 步骤:
    ① 点击测试集中的“Add folder”添加文件夹管理测试用例
    ② 点击文件夹上的“Add Request”添加请求实现测试用例
    image
    image

9 Postman断言

1、Postman断言介绍

  • 作用:让Postman工具代替人工自动判定预期结果和实际结果是否一致。
  • 用法:
    image

2、Postman断言

响应状态码断言
  • 模板名称:Status code: Code is 200
  • 模板内容:
    image
包含指定字符串断言
  • 模板名称:Response body: Contains string
  • 模板内容:
    image
JSON数据断言
  • 模板名称:Response body: JSON value check
  • 模板内容:
    image

①断言响应状态码为200

pm.test("断言响应状态码为200",function(){
	pm.response.to.have.status(200);
});

②断言响应数据中包含'成功'

pm.test("断言响应数据中包含'成功'",function(){
	pm.except(pm.response.text()).to.include('成功')
});

③断言JSON数据中msg值为'操作成功'

pm.text("断言JSON数据中msg值为'操作成功'",function(){
	var jsonData=pm.response.json();
	pm.except(jsonData.msg).to.eql('操作成功')
});

10 参数化

Postman参数化介绍

  • 场景:测试脚本中仅测试数据不一样,使用参数化提高脚本复用。
  • 步骤:
    ① 测试数据保存在数据文件单独维护
    ② 引用数据文件实现脚本循环调用
    image

Postman参数化实现

  • 准备数据文件
    image
  • 引用数据文件数据
    1.请求参数中获取
    {{}}引用相关对象的key eg:{{username}}
    2.代码中获取
    Postman内置data对象引用key eg:data.status
  • 选择数据文件:运行测试集时选择数据文件
    image

image

  1. 参数化的作用是什么?
    提高测试脚本复用性
  2. Postman如何实现参数化?
    ① 准备数据文件
    ② 引用数据文件
    • 请求参数中获取:{{变量名}}
    • 代码中获取:data.变量名
    ③ 批量执行测试用例

11 课程添加

image
image

1、提取测试点

image

2、设计测试用例

image

3、使用Postman进行接口测试

  • 步骤:
    ① 点击测试集中的“Add folder”添加文件夹管理测试用例
    ② 点击文件夹上的“Add Request”添加请求实现测试用例
    image
    image

12 查询课程列表

image
image

1、提取测试点

image

2、设计测试用例

image

13 课程修改

image
image

1、提取测试点

image

2、设计测试用例

image

14 课程删除

image
image

1、提取测试点

image

2、设计测试用例

image

代码实现接口自动化测试

1 接口自动化基础

1、接口自动化测试

  • 接口自动化:使用工具或代码代替人对接口进行测试的技术。
  • 测试目的:防止开发修改代码时引入新的问题。
  • 测试时机:
    • 开发进行系统测试转测前,可以先进行接口自动化脚本的编写。
    • 开发进行系统测试转测后,优先进行系统测试用例的执行,再进行接口自动化脚本的编写
      image

2、接口自动化测试流程

image

  • 选取自动化测试用例
    • 优先级高(先实现业务流程用例、后实现单接口用例)
    • 功能稳定
      image
      image
  • 搭建自动化测试环境
    image
  1. 什么时候开展接口自动化测试?
    开发提测前,优先开展接口自动化测试;
    开发提测后,优先开展系统测试、后开展接口自动化测试。
  2. 如何开展接口自动化测试?
    ① 选取自动化测试用例
    ② 搭建自动化测试环境
    ③ 搭建自动化测试框架
    ④ 代码实现自动化
    ⑤ 输出测试报告
    ⑥ 实现持续集成

2 接口自动化测试框架

1、接口自动化框架

image

2、接口自动化框架设计思路

image

3、搭建基础框架-定义项目目录结构

image

3 Requests库

1、Requests介绍

  • Requests库:python中的“浏览器”,基于urllib的HTTP库
  • 安装:
    pip3 install requests
    
  • 验证:
    pip3 show requests
    
  • 操作步骤:
    ① 导包
    ② 发送接口请求
    ③ 查看响应数据

2、Requests发送请求

image

3、Response查看响应

image

image
image
image

4 接口对象封装

image

  • 接口对象封装
    image

image

1、接口对象层

#请求
import requests
#创建接口类
class LoginAPI:
	#初始化
	def __init__(self):
		self.url_verify="http://kdtx-test.itheima.net/api/captchaImage"
		self.url_login="http://kdtx-test.itheima.net/api/login"
	#获取验证码接口
	def get_verify_code(self):
		return requests.get(url=self.url_verify)
	#登录接口
	def login(self,test_data):
		return requests.post(url=self.url_login,json=test_data)

2、测试脚本层

#导包
from api.login import Login.API
#创建测试类
class TestBusinessContract:
	#前置处理
	def setup(self):
		#实例化接口对象
		self.login_api=LoginAPI()
	#登录成功
	def test01_login_success(self):
		#获取验证码
		res_v=self.login_api.get_verify_code()
		print(res_v.status_code)
		print(res_v.json())
		#登录
		login_data={"username":"admin","password":"admin123","code":"2","uuid":res_v.json().get("uuid")}
		res_l=self.login_api.login(test_data=login_data)
		print(res_l.status_code)
		print(res_l.json())
  1. 接口对象封装的核心思想?
    代码分层思想
    ① 接口对象层(重点关注接口封装调用)
    ② 测试脚本层(重点关注测试数据准备、断言及业务处理等)

5 合同新增业务

image

1、接口对象层

#请求
import requests
#创建接口类
class CourseAPI:
	#初始化
	def __init__(self):
		self.url_add_course="http://kdtx-test.itheima.net/api/clues/course"
	#课程添加
	def add_course(self,test_data,token):
		return requests.post(url=self.url_add_course,json=test_data,headers={"Authorization":token})

2、测试脚本层

关键代码:
#导包
from api.course import CourseAPS
#创建测试类
class TestContractBusiness:
	#初始化
	token=None
	#前置处理
	def setup(self):
		#实例化接口对象
		self.course_api=CourseAPI()
	#1.登录成功
	def test01_login_success(self):
		...
		#提取登录成功之后的token数据并保存在类的属性中
		TestConntractBusiness.token=res_l.json().get("token")
		print(TestConntractBusiness.token)
	#课程新增成功
	def test02_add_course(self):
		add_data={"name":"测试开发提升课01","subject":"6","price":899,"applicablePerson":"2","info":"测试开发01"}
		response=self.course_api.add_course(test_data=add_data,token=TestConntractBusiness.token)
		print(response.json())

image
image

1、接口对象层

import requests

class ContractAPI:
	def __init__(self):
		self.url_upload="http://kdtx-test.itheima.net/api/common/upload"
	def upload_contract(self,test_data,token):
		return requests.post(url=self.url_upload,files={"file":test_data},headers={"Authorization":token})

2、测试脚本层

关键代码:
from api.contract import ContractAPI

class TestContractBusiness:
	token=None
	def setup(self):
		self.contract_api=ContractAPI()
	def test01_login_success(self):
		...
		TestContractBusiness.token=res_l.json().get("token")
	def test03_upload_contract(self):
		f=open("../data/test.pdf","rb")
		response=self.contract_api.upload_contract(test_data=f,token=TestContractBusiness.token)
		print(response.json())

image

6 登录接口测试

  • 需求:
    • 完成测试脚本的业务实现
    • 针对响应结果进行断言
      image
  • Python常见断言方式有:
    • 相等断言(assert test_data=='xxx')
    • 包含断言(assert 'xxx' in test_data)

7 数据驱动

image

  • 如何实数据驱动
    image

image
image

8 课程管理

image
image
image
image

9 项目配置文件

image
image
image

10 Allurre报告

image

1、生成测试结果文件

安装:pip install allure-pytest
使用步骤:
1.将pytest配置文件中的命令行参数加上如下代码
	--alluredir report
2.编写好测试脚本后,在命令行中运行pytest
	[pytest]
	addopts=-s --alluredir report
	testpaths=./scripts
	python_files=test*.py
	python_classes=Test*
	python_functions=test*
3.程序运行结束后,会在项目的report目录中生成一些json文件

2、使用allure生成在线报告

image
image

image

posted @ 2023-08-31 16:07  lemonHZZ  阅读(196)  评论(0)    收藏  举报