目录
介绍
接口测试的目标
- 验证功能:确保接口能正确处理请求并返回正确的结果。
- 性能验证:检查接口响应时间和吞吐量。
- 安全性验证:确保接口能防止攻击,如 SQL 注入、XSS 等。
- 稳定性和兼容性:验证接口在不同环境和负载下的表现。
常见的接口测试类型
- 功能测试:检查接口是否按文档要求执行特定操作。
- 性能测试:测试接口在高并发、负载下的响应能力。
- 安全性测试:确保接口有足够的权限控制和加密措施。
- 稳定性测试:测试接口在长时间运行或网络波动下的表现。
接口测试常用工具
- Postman:手动测试和自动化接口测试。
- Requests:Python 库,用于发送 HTTP 请求并验证响应。
- SoapUI:支持 REST 和 SOAP 的接口测试工具。
- JMeter:性能测试工具,也适用于接口测试。
一、准备工作
1.部署项目
https://download.youkuaiyun.com/download/m0_52861000/90171333
或者
https://pan.baidu.com/s/1_wsdkc-ziVW83zdToK_bVQ?pwd=cmss 提xx取码: cmss项目部署操作:
项目访问链接:
2.pycharm里面要下载相关的模块
requests:pychram设置--python解释器--添加-搜索requests--选择任意版本进行下载
selenium
python的自动化selenium安装配置(包含谷歌的chromedriver)_安装好 selenium 库并配置好 chrome 浏览器驱动-优快云博客
二、实操例子
(一)类的定义
这个类使用 unittest
框架来进行接口测试,它定义了一些测试用例,比如登录、查询用户、添加用户等。每个测试用例都模拟了对某些接口的请求和验证。
import requests
import unittest
class CMS_test(unittest.TestCase):
#在所有测试方法之前执行一次,通常用来进行环境设置或初始化操作
@classmethod
def setUpClass(cls) -> None:
print("类开始")
#在所有测试方法执行完后执行一次,通常用来进行资源清理操作
@classmethod
def tearDownClass(cls) -> None:
print("类结束")
#在每个测试方法之前执行一次
@classmethod
def setUp(self) -> None:
print("--start") #每个测试方法开始时打印此信息
#每个测试方法结束后执行一次
@classmethod
def tearDown(self) -> None:
print("--end--") #每个测试方法结束时打印此信息
(二)登录接口
这个方法用于模拟登录接口的请求。登录成功后,我们会返回响应的 Cookie,这个 Cookie 之后可以用来发起需要登录状态的请求(例如查询用户列表、添加用户等)。
#接口一;登录接口
def test01_login(self):
#登录接口的url地址
url = 'http://192.168.121.112:8080/cms/manage/loginJump.do'
#登录请求需要传递的数据,通常包括用户名和密码,抓包获取
data={'userAccount': 'admin','loginPwd': '123456'}
#请求头,告诉服务器我们发送的是表单数据,这个也在抓包信息里面
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
#发送post请求,模拟登录
resp=requests.post(url=url,data=data,headers=headers)
#打印响应接口的json数据(登录结果)
print(resp.json())
#返回响应的的cookies 用于后续的接口调用
return resp.cookies
运行结果
{'code': '200', 'msg': '登录成功!', 'model': {}}
(三)查询用户接口
#查询用户接口
def test02_queryUserList(self):
#查询用户的接口url,抓取的数据
user_url='http://192.168.121.112:8080/cms/manage/queryUserList.do'
#请求体,告诉服务器我们发送的是表单数据,抓取的数据
headers={'Content-Type': 'application/x-www-form-urlencoded'}
#查询用户时需要传递的参数,抓取的数据
data={'startCreateDate':'','endCreateDate':'','&searchValue':'','page':1}
#使用test01_login方法获得登录后的cookies
cookies=self.test01_login()
#发送post请求,查询用户信息
resp=requests.post(url=user_url,headers=headers,data=data,cookies=cookies)
#打印接口返回的数据
print(resp.json())
(四)添加用户
def test03_saveSysUser(self):
# 添加用户接口的 URL 地址
url = 'http://192.168.121.112:8080/cms/manage/saveSysUser.do'
# 请求头,告诉服务器我们发送的是表单数据
headers = {'Content-type': 'application/x-www-form-urlencoded'}
# 添加用户时需要传递的数据
data = {
'id': '', # 新用户的 ID,添加时通常为空
'userName': 'admin_04', # 用户名
'userSex': '1', # 用户性别,1 表示男性
'userMobile': '13467782300', # 用户手机号
'userEmail': '343 @ qq.com', # 用户邮箱
'userAccount': 'admin_04', # 用户账号
'loginPwd': '123456', # 用户密码
'confirmPwd': '123456' # 确认密码,通常与密码一致
}
# 使用 test01_login 方法获取登录后的 cookies
cookies = self.test01_login()
# 发送 POST 请求,创建用户
resp = requests.post(url=url, headers=headers, data=data, cookies=cookies)
# 打印接口返回的 JSON 数据(操作结果)
print(resp.json())
(五)修改密码
def test04_updateLoginPwd(self):
# 修改密码接口的 URL 地址
url = 'http://192.168.121.112:8080/cms/manage/updateLoginPwd.do'
# 请求头,告诉服务器我们发送的是表单数据
headers = {'Content-type':'application/x-www-form-urlencoded'}
# 修改密码时需要传递的数据
data = {
'id': '4', # 用户 ID
'loginPwd': '123456', # 新密码
'loginPwd2': '123456' # 确认新密码
}
# 使用 test01_login 方法获取登录后的 cookies
cookies = self.test01_login()
# 发送 POST 请求,修改密码
resp = requests.post(url=url, headers=headers, data=data, cookies=cookies)
# 打印接口返回的 JSON 数据(操作结果)
print(resp.json())
(六)添加栏目接口
def test05_saveModuleCategory(self):
# 添加栏目接口的 URL 地址
url = 'http://192.168.121.112:8080/cms/manage/saveModuleCategory.do'
# 请求头,告诉服务器我们发送的是表单数据
headers = {'Content-type':'application/x-www-form-urlencoded'}
# 添加栏目时需要传递的数据
data = {
'id': '', # 新栏目的 ID,添加时通常为空
'categoryName': '2', # 栏目名称
'parentId': '', # 父栏目 ID,通常为空表示顶级栏目
'categoryCode': '2', # 栏目编码
'categoryDesc': '2', # 栏目描述
'keyTitle': '2', # SEO 标题
'keyWords': '2', # SEO 关键字
'keyDesc': '2' # SEO 描述
}
# 使用 test01_login 方法获取登录后的 cookies
cookies = self.test01_login()
# 发送 POST 请求,创建栏目
resp = requests.post(url=url, headers=headers, data=data, cookies=cookies)
# 打印接口返回的 JSON 数据(操作结果)
print(resp.json())
七、调用
用main方法进行调用这个类去运行就好了