首页 > 其他分享 >15.宠物商店 接口自动化测试实战

15.宠物商店 接口自动化测试实战

时间:2024-01-17 18:13:24浏览次数:34  
标签:15 pet self 宠物 接口 宠物商店 日志 id

目录

 
  • 被测产品
  • 需求说明
  • 相关知识点
  • 接口自动化测试实战

被测产品

 
  • PetStore 宠物商城:
    • 一个在线的小型的商城。
    • 主要提供了增删查改等操作接口。
    • 结合 Swagger 实现了接口的管理。

需求说明

 
  • 完成宠物商城宠物管理功能接口自动化测试。
    • 编写自动化测试脚本。
    • 完成复杂断言。

相关知识点

 
形式章节描述 
知识点 代理配置 利用代理分析测试脚本,排查请求错误  
知识点 多层嵌套响应断言 利用 jsonpath 进行多层嵌套的响应断言  

实战思路

 
@startmindmap
scale 10
* 实战思路
** 需求分析
** 接口测试用例设计
** 编写接口自动化测试脚本
*** 脚本优化-配置代理查看接口数据
*** 脚本优化-添加日志
*** 脚本优化-使用 jsonpath 断言
** 生成测试报告
@endmindmap

需求分析

 
  • 被测产品:宠物商店系统 - 宠物管理。
  • 宠物商店接口文档:https://petstore.swagger.io/
  • 宠物管理业务场景:
    • 添加宠物。
    • 查询宠物信息。
    • 修改宠物信息。
    • 删除宠物。
scale 10
autonumber
participant 测试人员  as tester
participant 宠物管理模块  as pet
participant 宠物商店  as petStore

tester -> pet: 编写脚本
pet -> petStore: 添加宠物
pet -> petStore: 查询添加后宠物
customer -> tester: 测试断言
pet -> petStore: 修改宠物信息
pet -> petStore: 查询添加后宠物
customer -> tester: 测试断言
pet -> petStore: 删除宠物
pet -> petStore: 查询添加后宠物
customer -> tester: 测试断言

宠物管理接口业务流程测试用例

 

 

编写自动化测试脚本思路

 
@startmindmap
scale 10
* 思路
** 获取接口信息
*** swagger 接口文档
*** 前端抓包
** 单步调通接口
** 根据业务流程串联起来
** 添加断言,确认流程正常
@endmindmap

编写自动化测试脚本

 
class TestPetstorePetmanager:

    def setup_class(self):
        self.base_url = "https://petstore.swagger.io/v2/pet"
        self.search_url = self.base_url + "/findByStatus"
        self.pet_id = 9223372000001084222
        pet_status = "available"
        self.pet_info = {
            "id": self.pet_id,
            "category": {
                "id": 1,
                "name": "cat"
            },
            "name": "miao",
            "photoUrls": [
                "string"
            ],
            "tags": [
                {
                    "id": 5,
                    "name": "cute"
                }
            ],
            "status": pet_status
        }
        self.search_param = {
            "status": pet_status
        }
        self.update_name = "miao-hogwarts"
        self.update_info = {
            "id": self.pet_id,
            "category": {
                "id": 1,
                "name": "cat"
            },
            "name": self.update_name,
            "photoUrls": [
                "string"
            ],
            "tags": [
                {
                    "id": 5,
                    "name": "cute"
                }
            ],
            "status": pet_status
        }
        self.delete_url = self.base_url + f"/{self.pet_id}"

    def test_pet_manager(self):

        # 新增宠物
        add_r = requests.post(self.base_url, json=self.pet_info)
        # 状态断言
        assert add_r.status_code == 200
        # 修改宠物
        update_r = requests.put(self.base_url, json=self.update_info)
        # 状态断言
        assert update_r.status_code == 200
        # 删除宠物
        delete_r =requests.delete(self.delete_url)
        # 状态断言
        assert delete_r.status_code == 200

脚本优化 - 配置代理查看接口数据

 
  • 在脚本中配置代理。
  • 抓包查看接口测试中的接口请求和响应数据。
proxy = {
    "http": "http://127.0.0.1:8888",
    "https": "http://127.0.0.1:8888"
}

requests.post(url, json=pet_info, proxies=proxy, verify=False)

脚本优化 - 添加日志

 
  • 新建日志配置。
  • 在用例中使用配置好的日志实例。
# 配置日志
import logging
import os

from logging.handlers import RotatingFileHandler

# 绑定绑定句柄到logger对象
logger = logging.getLogger(__name__)
# 获取当前工具文件所在的路径
root_path = os.path.dirname(os.path.abspath(__file__))
# 拼接当前要输出日志的路径
log_dir_path = os.sep.join([root_path, '..', f'/logs'])
if not os.path.isdir(log_dir_path):
    os.mkdir(log_dir_path)
# 创建日志记录器,指明日志保存路径,每个日志的大小,保存日志的上限
file_log_handler = RotatingFileHandler(os.sep.join([log_dir_path, 'log.log']), maxBytes=1024 * 1024, backupCount=10)
# 设置日志的格式
date_string = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter(
    '[%(asctime)s] [%(levelname)s] [%(filename)s]/[line: %(lineno)d]/[%(funcName)s] %(message)s ', date_string)
# 日志输出到控制台的句柄
stream_handler = logging.StreamHandler()
# 将日志记录器指定日志的格式
file_log_handler.setFormatter(formatter)
stream_handler.setFormatter(formatter)
# 为全局的日志工具对象添加日志记录器
# 绑定绑定句柄到logger对象
logger.addHandler(stream_handler)
logger.addHandler(file_log_handler)
# 设置日志输出级别
logger.setLevel(level=logging.INFO)

脚本优化 - 使用 jsonpath 断言

 
  • 使用 jsonpath 实现多层嵌套响应的断言。
jsonpath.jsonpath(r.json(), "$..id")

生成测试报告

 
  • 安装 allure 相关依赖。
# 生成报告信息
pytest --alluredir=./report
# 生成报告在线服务,查看报告
allure serve ./report/

总结

 
  • 通过 Swagger 文档获取接口信息。
  • 使用 Requests 发出请求。
  • 添加代理,抓包查看接口请求和响应数据。
  • 使用 Jsonpath 提取复杂结构响应数据,然后进行断言。
  • 添加 Log 日志。
  • 生成 Allure 测试报告。

标签:15,pet,self,宠物,接口,宠物商店,日志,id
From: https://www.cnblogs.com/csfsz/p/17970667

相关文章

  • 05.接口请求体 - JSON
    目录 接口请求体JSON格式请求体介绍如何构造JSON格式请求体接口请求体简介 进行HTTP请求时,发送给服务器的数据。数据格式类型可以是JSON、XML、文本、图像等格式。请求体的格式和内容取决于服务器端API的设计和开发人员的要求。飞书接口文档常用接......
  • 06.接口响应断言
    目录 接口断言使用场景响应结果对象响应结果断言接口断言使用场景 问题:如何确保请求可以发送成功。如何保证符合业务需求。解决方案:通过获取响应信息,验证接口请求是否成功,是否符合业务需求。Requests中的响应结果对象 importrequestsfro......
  • 洛谷题单指南-模拟和高精度-P1563 [NOIP2016 提高组] 玩具谜题
    原题链接:https://www.luogu.com.cn/problem/P1563题意解读:本题关键在于根据小人的朝向和寻找的方向来确定数组下标的变化。用数组存储小人,intd[]存朝向,inta[]存名称,朝向和寻找方向有4种组合:朝向(0:向内,1:向外)  寻找方向(0:左,1:右)  数组下标操作00顺时针寻找,下标递减......
  • Postman接口测试的工具使用
    postman下载:https://www.postman.com/downloads/下载后双击即可安装,安装后需要创建账号,登录后可以在不同平台同步数据。postman主要功能说明postman主要模块功能介绍点击最上面的测试集的添加目录图标,来新增一个根目录,这样等于新建了一个项目.可以将一个项目或一个模块的用......
  • 使用API接口获取拼多多商品详情
    随着电商行业的快速发展,越来越多的电商平台涌现出来,为消费者提供了丰富的商品选择。拼多多作为国内知名的电商平台之一,拥有庞大的商品库和优惠活动,吸引了大量的用户。本文将详细介绍如何通过调用API接口获取拼多多商品详情,帮助开发者快速实现拼多多商品信息的获取和展示。一、API接......
  • SpringBoot使用jwt实现接口带令牌访问
    1、 添加依赖<dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>${jwt.version}</version></dependency>2、先定义一个用户实体@Data@TableName("t_user")publicclass......
  • xdctf2015_pwn200
    xdctf2015_pwn20032位泄露了ibcmain函数中输入vuln函数中存在溢出漏洞非常常规的泄露libc,直接上代码frompwnimport*elf=ELF('./bof')Lib=ELF('/lib/i386-linux-gnu/libc.so.6')io=process('./bof')padding=b'A'*112payload1=padding+......
  • 1.15每日总结
    行与缩进python最具特色的就是使用缩进来表示代码块,不需要使用大括号 {} 。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。实例如下:实例(Python3.0+)ifTrue:print("True")else:print("False")以下代码最后一行语句缩进数的空格数不一致......
  • 15、nginx的rewrite机制
    1.概述Rewrite主要的功能就是实现URL的重写。Nginx的Rewrite规则采用PCRE(PerlCompatibleRegularExpressions)Perl兼容正则表达式的语法进行规则匹配。通过Rewrite规则,可以实现规范的URL、根据变量来做URL转向及选择配置。例如,一些使用MVC框架的程序只有一个入口,可以通过......
  • 软件测试|探索Flask接口路由技术:构建灵活可拓展的Python应用
    什么是路由路由是将URL地址与应用程序中的函数相映射的过程。当用户在浏览器中输入特定的URL地址时,Flask会调用与该地址相匹配的函数并返回相应的结果。路由的应用场景在Web应用程序都通过路由技术使用URL链接来控制网页显示的内容,只要知道URL链接,即使没有主页导航也可......