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](#1、路径参数Path Parameters)

[2、查询参数Query 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
javascript 复制代码
//验证码接口响应体中提取uuid
var jsonData = pm.response.json()
//设置环境变量保存uuid
pm.environment.set("uuid", jsonData.uuid)
2、登录接口引用变量
javascript 复制代码
//引用
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,其中 agesort 是查询参数

4.postman断言

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

1)响应状态码断言
javascript 复制代码
//断言响应状态码为200
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
2)包含指定字符串断言
javascript 复制代码
//断言响应数据中包含admin
pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});
3)JSON断言指定变量
javascript 复制代码
//断言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

python 复制代码
​#安装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库

python 复制代码
#安装
pip3 install requests

#验证
pip3 show requests

操作步骤:

导包 -> 发送接口请求 -> 查看响应数据

2)Requests发送请求
3)Response查看响应
4)示例=登录接口自动化

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

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

python 复制代码
# -*- coding:utf8 -*-

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

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

1)接口对象封装

-api层-接口封装层

python 复制代码
#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)
python 复制代码
#selectAll.py
# -*- coding:utf8 -*-
# 接口信息

# 查询所有:
# 地址:http://localhost:9090/admin/selectAll
# 方法:GET
#接口封装:核心在于依据接口文档实现接口信息封装、重点关注接口如何被调用

# 导包
import requests
#创建接口类
class SelectAllAPI:
    def __init__(self):
        #指定url
        self.url_selectAll = "http://localhost:9090/admin/selectAll"

    def select_all(self, token):
        #查询所有返回的响应数据
        return requests.get(url = self.url_selectAll, headers = {"token": token})
2)测试脚本层

-scripts层-脚本测试层

python 复制代码
#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)文件上传接口

-接口封装

python 复制代码
# 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})

-关键测试脚本

python 复制代码
# 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)登录-单接口测试

-测试脚本

python 复制代码
#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)
        #断言 状态码为200
        assert 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)
        # 断言 状态码为200
        assert 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)
        # 断言 状态码为200
        assert 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)
        # 断言 状态码为200
        assert 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)
        # 断言 状态码为200
        assert 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( , ) )注意:变量与值一一对应!

python 复制代码
# 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)
        #断言 状态码为200
        assert status == response.status_code
        #断言 响应数据中包含"token"
        assert code in response.text
        #断言 响应json数据中"msg"值为"成功"
        assert msg == response.json().get("msg")
4)登录-json文件实现数据驱动

数据驱动好处:

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

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

③增强代码的可维护性

步骤:

1、准备json文件
javascript 复制代码
//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文件,转为列表
python 复制代码
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

python 复制代码
# 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 配置文件

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

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

3)使用allure命令生成在线报告
相关推荐
niuniu_66616 小时前
简单的自动化场景(以 Chrome 浏览器 为例)
运维·chrome·python·selenium·测试工具·自动化·安全性测试
niuniu_6661 天前
Selenium 性能测试指南
selenium·测试工具·单元测试·测试·安全性测试
莓事哒1 天前
selenium和pytessarct提取古诗文网的验证码(python爬虫)
爬虫·python·selenium·测试工具·pycharm
软件测试曦曦2 天前
如何使用Python自动化测试工具Selenium进行网页自动化?
自动化测试·软件测试·python·功能测试·测试工具·程序人生·自动化
互联网杂货铺2 天前
黑盒测试、白盒测试、集成测试和系统测试的区别与联系
自动化测试·软件测试·python·功能测试·测试工具·单元测试·集成测试
Feng.Lee2 天前
聊一聊缓存如何进行测试
功能测试·测试工具·缓存
爱学测试的雨果2 天前
Postman —— postman实现参数化
软件测试·功能测试·测试工具·lua·postman
互联网杂货铺2 天前
如何用Postman实现自动化测试?
自动化测试·软件测试·python·测试工具·测试用例·接口测试·postman
niuniu_6662 天前
安全性测试(Security Testing)
测试工具·单元测试·appium·测试·安全性测试
薄荷你玩_3 天前
简单粗暴,用浏览器调试端口绕过Selenium/Playwright/Puppeteer检测
selenium·测试工具