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命令生成在线报告
相关推荐
awonw8 小时前
[java][框架]springMVC(1/2)
测试工具·postman
钱钱钱端10 小时前
【压力测试】如何确定系统最大并发用户数?
自动化测试·软件测试·python·职场和发展·压力测试·postman
迃幵chen12 小时前
wireshark-网络分析工具
网络·测试工具·wireshark
孤蓬&听雨14 小时前
RabbitMQ自动发送消息工具(自动化测试RabbitMQ)
分布式·测试工具·自动化·rabbitmq·自动发送消息
土小帽软件测试14 小时前
jmeter基础01-2_环境准备-Mac系统安装jdk
java·测试工具·jmeter·macos·软件测试学习
qq_4337169517 小时前
测试分层:减少对全链路回归依赖的探索!
自动化测试·软件测试·功能测试·测试工具·回归·pytest·postman
qq_4337169518 小时前
Postman断言与依赖接口测试详解!
自动化测试·软件测试·功能测试·测试工具·mysql·接口测试·postman
如光照18 小时前
Linux与Windows中的流量抓取工具:wireshark与tcpdump
linux·windows·测试工具·网络安全
土小帽软件测试19 小时前
jmeter基础03_汉化jmeter界面
测试工具·jmeter·软件测试学习
小白~小黑21 小时前
软件测试基础十二(python变量进阶)
python·功能测试·测试工具·自动化