Postman接口测试、Python接口自动化测试

接口自动化测试笔记,自用

来源:https://www.bilibili.com/video/BV1Cs4y1C73Hp=45&vd_source=37bf552472afa993fb78c918d1dea2bc

目录

一、Postman接口测试

1.postman自动关联

1)创建环境并选择

2)使用自动关联技术,登录成功

1、设置提取环境变量-验证码uuid

2、登录接口引用变量

2.postman批量执行

3.接口用例设计

1)单接口测试用例-登录

1、提取测试点

2、设计测试用例

3、执行测试用例(建立测试集)

2)单接口测试用例-根据id

1、路径参数Path Parameters

2、查询参数Query Parameters

4.postman断言

1)响应状态码断言

2)包含指定字符串断言

3)JSON断言指定变量

5.postman参数化

二、接口自动化测试(Python)

1.搭建自动化测试环境

1)接口自动化流程

2)核心技术

2.接口自动化框架

1)框架

2)思路

3)搭建基础框架

3.Requests-登录接口

1)Requests介绍

2)Requests发送请求

3)Response查看响应

4)示例=登录接口自动化

4.接口优化-接口对象层

1)接口对象封装

2)测试脚本层

3)PyCharm选择pytest框架执行

4)文件上传接口

5.单接口自动化测试

1)Python常见断言方式

2)登录-单接口测试

3)登录-数据驱动实现

4)登录-json文件实现数据驱动

1、准备json文件

2、读取json文件,转为列表

3、调用方法获取调整后的json数据

6.项目配置文件config

7.Allure测试报告 

1)Allure介绍

2)生成测试结果文件(json文件)

3)使用allure命令生成在线报告


一、Postman接口测试

1.postman自动关联

登录时需要手动填入验证码,可以设置公共数据在容器中

1)创建环境并选择

2)使用自动关联技术,登录成功

需求:
1、验证码接口:/captcha

2、登录接口:sys/login

3、登录接口请求体uuid字段→验证码接口返回uuid字段

操作:

1、设置提取环境变量-验证码uuid
//验证码接口响应体中提取uuid
var jsonData = pm.response.json()
//设置环境变量保存uuid
pm.environment.set("uuid", jsonData.uuid)

2、登录接口引用变量
//引用
key:{{变量名}}

需求:

 登录后获取列表

1、登录接口:/login

2、获取列表接口:admin/selectAll

3、获取列表请求token字段->登录接口返回token字段

2.postman批量执行

作用:通过运行测试集的方式批量运行测试用例。

需求:用户登录->查询列表->新增

步骤:
1、点击测试集中的“Run”按钮,批量运行测试用例②
2、弹出Collection Runner窗口,点击运行按钮③
3、查看测试结果

3.接口用例设计

1)单接口测试用例-登录

优先级:业务->正向->逆向

1、提取测试点

2、设计测试用例

按照:id、模块名称、优先级、用例名称、接口名称、前置条件、请求url、请求方法、请求头、请求参数类型、请求参数、预期结果、实际结果

3、执行测试用例(建立测试集)

2)单接口测试用例-根据id

-注意请求参数格式

1、路径参数Path Parameters

2、查询参数Query Parameters
  • 这些参数附加在 URL 的末尾,通常用于过滤、排序或分页等目的。它们以 ? 开始,多个参数之间用 & 分隔。
  • 示例:GET /users?age=25&sort=asc,其中 age 和 sort 是查询参数

4.postman断言

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

1)响应状态码断言
//断言响应状态码为200
pm.test("Status code is 200", function () {pm.response.to.have.status(200);
});
2)包含指定字符串断言
//断言响应数据中包含admin
pm.test("Body matches string", function () {pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
3)JSON断言指定变量
//断言json返回数据中msg值为“成功”
pm.test("Your test name", function () {var jsonData = pm.response.json();pm.expect(jsonData.value).to.eql(100);
});

5.postman参数化

场景:测试脚本中仅测试数据不一样,使用参数化提高脚本复用
步骤:
1、测试数据保存在数据文件单独维护

2、引用数据文件实现脚本循环调用

-创建json格式的测试数据(包含输入数据和预期结果)

-在Tests中引入数据变量

-Runn中选择json文件

-批量执行查看是否通过


二、接口自动化测试(Python)

1.搭建自动化测试环境

1)接口自动化流程

2)核心技术

编程语言:python

测试框架:pytest

接口请求:requests

​#安装pytest框架
pip install pytest
#安装request请求
pip install requests#验证
pytest --version
pip show requests

2.接口自动化框架

1)框架

2)思路

3)搭建基础框架

-定义项目目录结构

  

3.Requests-登录接口

1)Requests介绍

Requests库::python中的“浏览器”,基于urllib的HTTP库

#安装
pip3 install requests#验证
pip3 show requests

操作步骤:
导包 -> 发送接口请求 -> 查看响应数据

2)Requests发送请求

3)Response查看响应

4)示例=登录接口自动化

注意:报错不兼容中文编码

解决方法:在文件前面添加以下代码

# -*- coding:utf8 -*-

4.接口优化-接口对象层

登录后的token需保存在公共区域

1)接口对象封装

-api层-接口封装层

#login.py
# -*- coding:utf8 -*-
# 接口信息# 登录:
# 地址:http://localhost:9090/login
# 方法:POST
# 请求数据:
# 请求体:
# {    "username": "admin2","password": "admin2","role":"ADMIN" }
# 需要使用的测试数据是从测试用例传递的、接口方法被调用时需要返回对应的响应结果#导包
import requests
#创建接口类
class LoginAPI:#初始化def __init__(self):#指定url信息self.url_login = "http://localhost:9090/login"#登录返回响应数据def login(self, test_data):return requests.post(self.url_login, json=test_data)
#selectAll.py
# -*- coding:utf8 -*-
# 接口信息# 查询所有:
# 地址:http://localhost:9090/admin/selectAll
# 方法:GET
#接口封装:核心在于依据接口文档实现接口信息封装、重点关注接口如何被调用# 导包
import requests
#创建接口类
class SelectAllAPI:def __init__(self):#指定urlself.url_selectAll = "http://localhost:9090/admin/selectAll"def select_all(self, token):#查询所有返回的响应数据return requests.get(url = self.url_selectAll, headers = {"token": token})
2)测试脚本层

-scripts层-脚本测试层

#test02_selectAll.py
# -*- coding:utf8 -*-
#测试查询全部
#导包
from api.login import LoginAPI
from api.selectAll import SelectAllAPI# 创建测试类
class TestSelectAll:# 初始化token = None# 前置处理def setup_method(self):#实例化接口对象self.login_api = LoginAPI()self.select_all_api = SelectAllAPI()# 后置处理def teardown_method(self):pass# 1.登录成功def test01_login_success(self):# 登录login_data = {"username": "admin2","password": "admin2","role":"ADMIN"}#调用登录接口res_l = self.login_api.login(test_data = login_data)print(res_l.status_code)print(res_l.json())#提取登录成功之后的token数据并保存在类的属性中TestSelectAll.token = res_l.json().get("data").get("token")print(TestSelectAll.token)# 2.查询所有成功def test02_select_all_success(self):#调用查询所有接口response = self.select_all_api.select_all(token = TestSelectAll.token)print (response.status_code)print (response.json())
3)PyCharm选择pytest框架执行

4)文件上传接口

-接口封装

# upload.py
# 上传文件
# 地址:http://localhost:9090/files/upload
# 方法:POST
# 请求头:{ "Content-Type": "multipart/form-data", "token" : xxx}
# 请求体:{ "file": "xxxx" }
#接口封装:核心在于如何读取文件数据#导包
import requests
#创建接口类
class UploadAPI:# 初始化def __init__(self):self.url_upload = "http://localhost:9090//files/upload"# 上传文件接口def upload(self, test_data, token):return  requests.post(url = self.url_upload, files = {"file": test_data}, headers = {"token": token})

-关键测试脚本

# 2.上传文件成功def test02_upload_success(self):#读取jpg文件数据 r为读 b为字节f = open("../data/avatar01.jpg", "rb")response = self.upload_api.upload(test_data=f, token=TestSelectAll.token)print(response.json())

5.单接口自动化测试

1)Python常见断言方式

1、相等断言: asset test_data == 'xxx'

2、包含断言:assert 'xxx' in test_data

2)登录-单接口测试

-测试脚本

#test04_login
# 登录单接口测试
# 导包
from api.login import LoginAPI
from script.test01_login import response# 创建测试类
class TestLoginAPI:#初始化token = None#前置处理def setup_method(self):self.login_api = LoginAPI()#后置处理def teardown_method(self):pass#1. 登录成功def test01_login_success(self):login_data = {"username": "admin2","password": "admin2","role": "ADMIN"}#调用接口response = self.login_api.login(test_data=login_data)#断言 状态码为200assert 200 == response.status_code#断言 响应数据中包含"token"assert "token" in response.text#断言 响应json数据中“msg"值为”成功"assert "成功" == response.json().get("msg")#2. 登录失败(用户名为空)def test02_without_username(self):login_data = {"username": "","password": "admin","role":"ADMIN"}# 调用接口response = self.login_api.login(test_data=login_data)# 断言 状态码为200assert 200 == response.status_code# 断言 响应数据中包含"4001"assert "4001" in response.text# 断言 响应json数据中“msg"值为”参数缺失"assert "参数缺失" == response.json().get("msg")#2. 登录失败(未注册用户名)def test02_username_no_register(self):login_data = {"username": "admin3","password": "admin","role": "ADMIN"}# 调用接口response = self.login_api.login(test_data=login_data)# 断言 状态码为200assert 200 == response.status_code# 断言 响应数据中包含"5004"assert "5004" in response.text# 断言 响应json数据中“msg"值为”用户不存在"assert "用户不存在" == response.json().get("msg")#3. 登录失败(用户密码为空)def test03_without_password(self):login_data = {"username": "admin","password": "","role": "ADMIN"}# 调用接口response = self.login_api.login(test_data=login_data)# 断言 状态码为200assert 200 == response.status_code# 断言 响应数据中包含"4001"assert "4001" in response.text# 断言 响应json数据中“msg"值为”参数缺失"assert "参数缺失" == response.json().get("msg")#4. 登录失败(用户与密码不匹配)def test04_not_matched(self):login_data = {"username": "admin","password": "admin1","role": "ADMIN"}# 调用接口response = self.login_api.login(test_data=login_data)# 断言 状态码为200assert 200 == response.status_code# 断言 响应数据中包含"5003"assert "5003" in response.text# 断言 响应json数据中“msg"值为”账号或密码错误"assert "账号或密码错误" == response.json().get("msg")

-断言结果

3)登录-数据驱动实现

数据驱动:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化测试设计模式。

步骤:

1、导包 import pytest

2、编写测试数据(输入值和预期结果)注意:要用[ ( ), ( ), ..]

3、在测试方法上引入参数化(@pytest.mark.parametrize( , ) )注意:变量与值一一对应!

# test05_login_params
# 登录单接口测试-数据驱动
# 导包
from api.login import LoginAPI
import pytest#测试数据
test_data = [("admin", "admin", 200, "token", "成功"),("", "admin", 200, "4001", "参数缺失"),("admin3", "admin", 200, "5004", "用户不存在"),("admin", "", 200, "4001", "参数缺失"),("admin", "admin1", 200, "5003", "账号或密码错误")
]
# 创建测试类
class TestLoginAPI:#初始化token = None#前置处理def setup_method(self):self.login_api = LoginAPI()#后置处理def teardown_method(self):pass#循环测试方法@pytest.mark.parametrize("username, password, status, code, msg", test_data)def test_login(self, username, password, status, code, msg):login_data = {"username": username,"password": password,"role": "ADMIN"}#调用接口response = self.login_api.login(test_data=login_data)#断言 状态码为200assert status == response.status_code#断言 响应数据中包含"token"assert code in response.text#断言 响应json数据中“msg"值为”成功"assert msg == response.json().get("msg")

4)登录-json文件实现数据驱动

数据驱动好处:

①以测试数据驱动脚本执行

②维护焦点从脚本转向测试数据文件

③增强代码的可维护性

步骤:

1、准备json文件
//login.json
[{"username": "admin","password": "admin","status": 200,"code": "token","msg": "成功"},{"username": "","password": "admin","status": 200,"code": "4001","msg": "参数缺失"},{"username": "admin3","password": "admin","status": 200,"code": "5004","msg": "用户不存在"},{"username": "admin","password": "","status": 200,"code": "4001","msg": "参数缺失"},{"username": "admin","password": "admin1","status": 200,"code": "5003","msg": "账号或密码错误"}
]
2、读取json文件,转为列表
import json#读取json文件
def build_data(json_file):# 定义空列表test_data = []# 打开json文件with open(json_file, "r", encoding='UTF-8') as f:# 加载json文件数据json_data = json.load(f)# 循环遍历测试数据for case_data in json_data:# 转换数据格式 [{},{}] ==> [(),()]username = case_data.get('username')password = case_data.get('password')status = case_data.get('status')code = case_data.get('code')msg = case_data.get('msg')#加入列表test_data.append((username, password, status, code, msg))# 返回处理之后的测试数据return test_data

注意!报错gbk编码,需添加 encoding='UTF-8'

3、调用方法获取调整后的json数据

6.项目配置文件config

# config.py
# 存放被测试项目基本信息,如URL地址等# 导包
import os# 设置项目环境域名
BASE_URL= "http://localhost:9090"# 获取项目根路径
BASE_PATH= os.path.dirname(__file__)
print(BASE_PATH)

7.Allure测试报告 

1)Allure介绍

-能生成美观易读的报告

-支持多种开发语言,如java、python等

-能快速上手

安装allure和allure-pytest

2)生成测试结果文件(json文件)

①修改 pytest.ini 配置文件

#pytest.ini
[pytest]
#指定存放结果报告的目录为 report
addopts = -s --alluredir report
#指定测试文件的位置
testpaths = ./script
#指定要运行的测试文件
python_files = test*.py
#指定要运行的测试类
python_classes = Test*
#指定要运行的测试方法
python_functions = test*

②运行pytest命令产生测试结果文件

3)使用allure命令生成在线报告

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1537616.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

iPhone 上丢失了重要的联系人?如何恢复已删除的 iPhone 联系人

丢失 iPhone 上的联系人可能会带来灾难。无论是一份很棒的新工作机会、潜在的恋爱对象,还是您一直想打电话的老朋友,如果您打开“联系人”应用时看到空白,这绝不是好事。不过,一切并非全无,仍然可以通过备份或专业软件…

月薪14K的网安公司,来做一下笔试题呀~

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 网络安全简介…

【Linux】基础IO认识(2)

基础IO认识(2) 1、补充系统调用1、1、read调用1、2、stat 2、重定向2、1、文件描述符的分配规则2、2、实现重定向(dup2) 3、缓冲区的理解3、1、缓冲区典型实例3、2、缓冲区代码形式展示 4、深化和实践利用4、1、在shell中加入重定向4、2、简单实现库的封…

模拟火车世界5/Train Sim World 5 (容量289GB)百度网盘下载

版本介绍 Build.15665692|容量289GB|官方简体中文|支持键盘.鼠标.手柄 游戏介绍 来《模拟火车世界5》里,全世界的铁路尽属于你!在标志性的特色城市中,驾驶列车穿越铁轨,飞驰在 3 条全新线路上,用新的角色迎接新的挑战…

教师薪酬管理系统的设计与实现

摘 要 传统信息的管理大部分依赖于管理人员的手工登记与管理,然而,随着近些年信息技术的迅猛发展,让许多比较老套的信息管理模式进行了更新迭代,老师信息因为其管理内容繁杂,管理数量繁多导致手工进行处理不能满足广…

【FreeRL】Rainbow_DQN的实现和测试

文章目录 前言环境1 PER note2 C51 note3 Noisy note4 Rainbow note其他 前言 具体代码实现见:https://github.com/wild-firefox/FreeRL/blob/main/DQN_file/DQN_with_tricks.py 将其中所有的trick都用上即为Rainbow_DQN。 效果如下:(学习曲…

vue 案例使用

el-switch 按键的使用 <el-switchclass"switchStyle" v-model"boolValue" :active-value"1" :inactive-value"0" active-text"ON" inactive-text"OFF" active-color"#13ce66" inactive-color&qu…

明星御用剪辑师亲授:PR剪辑技巧大全

在这个视频内容大爆炸的时代&#xff0c;一个好的剪辑工具就如同一位得力的助手&#xff0c;能让你在视频制作的道路上事半功倍。今天&#xff0c;就让我来为大家揭秘几款PR剪辑工具&#xff0c;它们各具特色&#xff0c;能够帮助你轻松应对各种剪辑需求。让我们开始吧&#xf…

kali——tshark的使用

目录 前言 使用方法 tshark提取流量为文档 前言 tshark 是一个命令行的网络分析工具&#xff0c;它用于捕获和分析网络流量。它支持多种网络协议&#xff0c;包括 TCP、UDP、ICMP 等。Tshark 可以用于调试网络问题、进行安全审计、分析应用程序性能等。 在 Kali Linux 中&…

绿咖啡豆缺陷检测系统源码分享

绿咖啡豆缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

ubuntu虚拟机装载共享文件夹导致的诡异错误

最近使用vmware station 15 安装了 ubuntu22.04 的虚拟机。在装载共享文件夹不久后便会出现诡异的错误。目前在网络上好像没有人把这归结到装载共享文件夹的问题上&#xff0c;故以供参考。 第一次&#xff1a; 在装载之后大概第二次开机&#xff0c;出现报错界面。 提示蓝牙…

驱动器磁盘未格式化恢复实战

驱动器磁盘未格式化的深度剖析 在日常的数字生活中&#xff0c;驱动器作为数据存储的重要载体&#xff0c;承载着用户无数的珍贵资料。然而&#xff0c;当遇到“驱动器中的磁盘未被格式化”的提示时&#xff0c;这份平静往往会被瞬间打破。这一状况不仅让用户感到困惑和焦虑&a…

精选评测!分享5款AI写论文最好用的软件排名

写作是一项既费时又费力的任务&#xff0c;尤其是对于科研人员来说&#xff0c;撰写论文更是一项必不可少的挑战。幸运的是&#xff0c;现在有多款免费的AI写作工具可以大大简化这一过程。小编精心挑选了5款免费的AI写作工具&#xff0c;旨在帮助大家提高写作效率&#xff0c;让…

word文档的读入(8)

如何读取答题卡中的选择题答案&#xff0c;并把所有的信息导入到Excel表格中&#xff5e; 在初始化了字典中的字段并获取了标准答案和学生答案后&#xff0c;现在只需使用if语句将学生答案studentAnswerOne和标准答案value进行比较。选择题一道题2分&#xff0c;答案正确时&…

pgsql的威胁操作--危险行为

pgsql的威胁操作--危险行为 要在PostgreSQL中列出所有数据库并删除指定的数据库 进入容器Pgsql docker exec -it 04d438beab57 /bin/bash 登录pgsql 使用以下命令登录到PostgreSQL psql -U postgres -h localhost -p 5432 列出数据库详细信息 postgres# \l 这将显示所有…

C语言代码练习(第二十六天)

今日练习&#xff1a; 数据的交换输出输入 n 个数&#xff0c;找出其中最小的数&#xff0c;将它与最前面的数交换后输出这些数 输入一个英文句子&#xff0c;将每个单词的第一个字母改成大写字母 输入一个十进制数 N &#xff0c;将它转换成 R 进制数输出 数据的交换输出输入 …

34.贪心算法1

0.贪心算法 1.柠檬水找零&#xff08;easy&#xff09; . - 力扣&#xff08;LeetCode&#xff09; 题目解析 算法原理 代码 class Solution {public boolean lemonadeChange(int[] bills) {int five 0, ten 0;for (int x : bills) {if (x 5) // 5 元&#xff1a;直接收下…

【Git】将本地项目上传到git | 在IDEA的提交记录中更改 提交的用户名

一:将本地项目上传到git 1:在​gitee​上创建以自己项目名称命名的空项目【注意项目名称与本地项目的文件夹名称一致】 2:进入想上传的项目的文件夹,然后右键点击 3:查看用户名及邮箱 $ git config user.name $ git config user.email4: 配置你的用户名及邮箱【如果有…

李宏毅2023机器学习HW15-Few-shot Classification

文章目录 LinkTask: Few-shot ClassificationBaselineSimple—transfer learningMedium — FO-MAMLStrong — MAML Link Kaggle Task: Few-shot Classification The Omniglot dataset background set: 30 alphabetsevaluation set: 20 alphabetsProblem setup: 5-way 1-sho…

【代码随想录训练营第42期 Day59打卡 - 图论Part9 - Bellman-Ford算法

目录 一、Bellman-Ford算法 定义 特性 伪代码实现 二、经典题目 题目&#xff1a;卡码网 94. 城市间货物运输 I 题目链接 题解&#xff1a; Bellman-Ford算法 三、小结 一、Bellman-Ford算法 定义 Bellman-Ford算法是一个迭代算法&#xff0c;它可以处理包含负权边的…