接口自动化-代码实现

news2024/9/19 22:11:29

接口自动化基础

1、接口自动化测试

  • 接口自动化:使用工具或代码代替人对接口进行测试的技术
  • 测试目的: 防止开发修改代码时引入新的问题
  • 测试时机:
    • 开发进行系统测试转测前,可以先进行接口自动化脚本的编写
    • 开发进行系统测试转测后,优先进行系统测试用例的执行,再进行接口自动化脚本的编写

2、接口自动化测试流程

1)选取自动化测试用例

  • 优先级高(先实现业务流程用例、后实现单接口用例)
  • 功能稳定

2)搭建自动化测试环境

  • 核心技术
    • 编程语言:Python
    • 测试框架:pytest
    • 接口请求:requests
      • 安装:pip3 install requests
      • 验证:pip3 show requests

3)搭建自动化测试框架
4)代码实现自动化
5)输出测试报告
6)实现持续集成

3、接口自动化测试框架

1)接口自动化框架

接口自动化框架就是基于应用服务器和数据库进行case管理,具体包含API封装、数据库封装、测试数据参数化和代码优化断言封装等

2)接口自动化框架设计思路

  1. 搭建集成框架——定义项目目录结构
  2. 通用功能类封装——封装通用功能如:数据库工具等
  3. 接口对象封装与调用——封装接口API对象+PyTest框架编写测试脚本
  4. 测试数据参数化——测试数据json文件设计、参数化实现
  5. 用例组织运行——组织测试用例运行,生成测试报告

3)搭建基础框架—定义项目目录结构

在这里插入图片描述

  • api——封装接口信息
  • scripts——编写测试脚本
  • data——存放测试数据
  • report——存放测试报告
  • common——存放通用工具类
  • config.py——定义项目配置信息
  • pytest.ini——pytest配置文件

Requests库

1.介绍
  • requests库:python中的“浏览器”,基于urllib的HTTP库
  • 安装:pip install requests
  • 操作步骤
    • 导包
    • 发送接口请求
    • 查看响应数据
2.Requests发送请求

1)requests处理json类型

requests.请求方法(url, params=None, data=None, json=None, headers=None)
  • 常见方法:get,post,put,delete
  • url:请求的url地址
  • params:请求的查询参数
  • data:请求体为form表单参数
  • json:请求体为json参数
  • headers:请求头参数

2)requests处理multipart/form-data类型

requests.请求方法(url, data=None, json=None, headers=None, files=None)
  • files:上传的文件
3.Requests查看响应
属性/方法说明
response.status_code状态码
response.json()json形式的响应内容
response.text文本形式的响应内容
response.url请求url
response.encoding查看响应头部字符编码
response.headers头信息
response.cookiescookies信息
登录接口调试-登录
  • 需求:使用requests访问登录接口,并查看响应结果
  • 接口信息
    • url:http://kdtx-test.itheima.net/api/login
    • 方法:post
    • 请求数据
      • 请求头:Content-Type:application/json
      • 请求体:{“username”:“admin”,“password”:“HM_2023_test”,“code”:“2”,“uuid”:“验证码接口返回结果中的数据值”}
# 需求:登录成功

# 导包
import requests

# 发送请求
url = "http://kdtx-test.itheima.net/api/login"
header_data = {
    "Content-Type": "application/json"
}
login_data = {
    "username": "admin",
    "password": "HM_2023_test",
    "code": 2,
    "uuid": "26bdc08fac934d6b805e49645b2701ae"
}
response = requests.post(url=url, headers=header_data, json=login_data)

# 查看响应
print(response.status_code)
print(response.json())

接口对象封装

1、接口自动化代码核心思想?
核心思想:代码分层思想

  • 测试脚本层
    • 重点关注测试数据准备和断言
    • 重点关注业务流程的处理
    • 直接调用接口对象层发送请求
  • 接口对象层
    • 根据接口API文档封装
    • 重点关注如何调用接口
    • 请求参数从测试脚本层传递
    • 接口响应结果返回给脚本层
      2、代码中如何解决接口之间的数据依赖?
      使用python中变量或属性传递接口依赖数据
      例如:
      #提取登录成功之后的token数据并保存在类的属性中TestContractBusniess.token = res_l.json().get("token")
      3、Requests中如何处理multipart/form-data请求数据?
# 读取文件
f = open("test.pdf", "rb")
# 设置请求数据
response = requests.post(url=xxx, files={"file": f}

数据驱动

数据驱动:以测试数据驱动脚本执行,维护焦点从脚本转向测试数据的一种自动化测试设计模式
好处:代码与测试数据分离,增强代码的可维护性

如何实现?

pytest中parametrize装饰器

  • 作用:遍历所有测试数据并运行测试方法
  • 语法
    • @pytest.mark.parametrize(②保存数据参数名, ①测试数据)
      def test_method(self, ③参数名)
      pass
  • 示例
    • test_data=[(“manager”, “123456),(”",“123456”),(“itheima”,“123456”)]
    • @pytest.mark.parametrize(“mobile, password”, test_data)
      def test_method(self, mobile, password)
      pass
json文件实现数据驱动

1)json文件记录测试数据

[
  {
    "username": "admin",
    "password": "HM_2023_test",
    "status": 200,
    "message": "成功",
    "code": 200
  },
  {
    "username": "",
    "password": "HM_2023_test",
    "status": 200,
    "message": "错误",
    "code": 500
  },
  {
    "username": "admin111",
    "password": "HM_2023_test",
    "status": 200,
    "message": "错误",
    "code": 500
  }
]

2)封装读取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")
            message = case_data.get("message")
            code = case_data.get("code")
            test_data.append((username, password, status, message, code))
    # 返回处理后的测试数据
    return test_data

3)测试用例方法中利用参数化取出测试数据

# 登录成功
    @pytest.mark.parametrize("username, password, status, message, code", build_data(json_file=config.BASE_PATH + "/data/login.json"))
    def test01_login_success(self, username, password, status, message, code):
        login_data = {
            "username": username,
            "password": password,
            "code": 2,
            "uuid": TestLoginAPI.uuid
        }
        response = self.login_api.login(test_data=login_data)
        # 断言响应状态码为200
        assert status == response.status_code
        # 断言响应数据包含’成功‘
        assert message in response.text
        # 断言响应json数据中的code值
        assert code == response.json().get("code")

项目配置文件

用于维护项目相关的基本信息,如:URL、项目路径等

# 导包
import os
# 定义环境域名
BASE_URL = "http://kdtx-test.itheima.net"
# 统一文件路径
BASE_PATH = os.path.dirname(__file__)
print(BASE_PATH)

当测试用例代码中需要用到url或项目路径时,如:

self.url_verify = config.BASE_URL + "/api/captchaImage"
json_file=config.BASE_PATH + "/data/login.json"

Allure测试报告

  • 介绍
    • 能生成美观易读的报告
    • 支持多种开发语言,如java、python等
    • 能快速上手
  • 操作步骤
    • 生成测试结果文件(json文件)
    • 使用allure命令生成在线报告
  • 帮助文档:https://docs.qameta.io/allure
1)生成测试结果文件

使用步骤:

  1. 将pytest配置文件中的命令行参数加上如下代码

    --alluredir report
    
  2. 编写好测试脚本后,在命令行行中运行pytest

    [pytest]
    addopts =-s --alluredir report
    testpaths=./scripts
    python_files = test*.py
    python_classes = Test*
    python_functions = test*
    
  3. 程序运行结束后,会在项目的report目录中生成一些json文件

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

安装:
1.https://github.com/allure-framework/allure2/releases 下载 allure
2.解压缩安装包到一个不包含中文路径的目录
3.将压缩包内的 bin 目录配置到 path 系统环境变量
4.右键我的电脑 - 属性 - 高级设置 - 环境变量 - 找到系统环境变量的path项 - 增加 allure到bin目录
5.在命令行中输入 allure--version 命令,能显示allure版本信息,即为成功

总结:
1)终端输入 pytest 运行
2)终端输入 allure serve report 命令 得到报告

在这里插入图片描述
一些问题:
①allure依赖于jdk环境,需要先安装jdk1.8.0并配置环境变量(按照csdn上的文章配置了半天都没用,最后是直接将bin文件的绝对路径添加到path环境变量中才成功)
②如果在pycharm终端输入allure serve report 报错提示“allure不是内部或外部命令”,可以直接使用allure路径+serve report,即D:\software\allure-2.30.0\bin\allure serve report

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

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

相关文章

Tensorflow实现深度学习案例7:咖啡豆识别

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一、前期工作 1. 导入数据 from tensorflow import keras from tensorflow.keras import layers,models import numpy as np import matplotlib.pyplot as plt import os,PIL,p…

地平线旭日X3开发板--图像获取时间戳问题

需求 需要获得图像接收完成后的帧时间戳。 sensor f37, MIPI 通信 问题 按我的了解,一般是在内核中产生MIPI数据接收完成中断并打印时间戳, 一般是CLOCK_MONOTONIC方式的时间 , X3无法获得MIPI数据接收完成的时间戳。 X3平台HB_VIN_GetC…

4 - Linux远程访问及控制

目录 一、SSH远程管理 1. SSH概述 2.SSH的优点 3.配置OpenSSH客户端 4.sshd服务支持的两种验证方式 5. 使用SSH客户端程序 5.1 ssh - 远程登录 5.2 scp - 远程复制 6.配置密钥对验证 二、TCP Wrappers访问控制 1.TCP Wrappers 概述 2. TCP Wrappers 机制的基本原则 …

MS SQL Server partition by 函数实战二 编排考场人员

目录 需求 输出效果 范例运行环境 表及视图样本设计 功能实现 生成考场数据 生成重复的SQL语句 封装为统计视图 编写存储过程实现统计 小结 需求 假设有若干已分配准考证号的考生,准考证号示例(01010001)共计8位,前4位…

ZeroEA阅读笔记

ZeroEA阅读笔记 摘要 实体对齐(EA)是知识图(KG)研究中的一项关键任务,旨在识别不同知识图谱中的等效实体,以支持知识图谱集成、文本到SQL和问答系统等下游任务。考虑到KG中丰富的语义信息,预训练语言模型(PLM)凭借其卓越的上下文感知编码功…

使用SSMS操作AdventureWorks 示例数据库

简介 AdventureWorks 示例数据库,官方文档:https://learn.microsoft.com/zh-cn/sql/samples/adventureworks-install-configure?viewsql-server-ver16&tabsssms 下载备份文件 OLTP 数据适用于大多数典型的联机事务处理工作负载。数据仓库 (DW) 数据…

网络设备监控工具 PIGOSS BSM 网络设备-Ruijie设备SNMP配置及监控

目录 1. 全局模式 2. 配置SNMP V2 3. 配置SNMP V3 4. 配置SNMP Trap 5. 保存配置 6. 查看配置结果 7. 锐捷设备监控 1. 全局模式 SNMP 的配置工作在网络设备的全局配置模式下完成,在进行SNMP 配置前,请先进入全局配置模式。 Ruijie>enable …

Excel“取消工作表保护”忘记密码并恢复原始密码

文章目录 1.前言2.破解步骤3. 最终效果4.参考文献 1.前言 有时候别人发来的Excel中有些表格不能编辑,提示如下,但是又不知道原始密码 2.破解步骤 1、打开您需要破解保护密码的Excel文件; 2、依次点击菜单栏上的视图—宏----录制宏&#xf…

Spring Boot内嵌Tomcat处理请求的链接数和线程数

Spring Boot内嵌Tomcat处理请求的连接数和线程数 处理请求的连接数和线程数配置 Spring Boot的配置项 #等待连接数 server.tomcat.accept-count100 #最大链连接数 server.tomcat.max-connections8192#最小备用线程数 server.tomcat.threads.min-spare10 #最大工作线程数 ser…

【git命令相关】git上传和删除文件步骤

(一)git登录 1. git bash窗口输入 git config --global user.name "你的Git账号" git config --global user. Email "你的Git邮箱"2. 生成密钥 ssh-keygen -t rsa -C "你的Git邮箱"在此命令执行的返回结果中找到key存放…

海康VisionMaster使用学习笔记11-VisionMaster基本操作

VisionMaster基本操作 VM示例方案 1. 工具拖拽及使用方式 分别从采集和定位栏里拖拽图像源,快速匹配,Blob分析工具 2. 模块连线 依次连线 3.如何订阅 点击快速匹配,可以看到输入源已订阅了图像1的图像,Blob分析类似 4. 方案操作及全局触发 点击快速匹配,创建特征模版,框选…

vue-cli搭建过程,elementUI搭建使用过程

vue-cli vue-cli 官方提供的一个脚手架,用于快速生成一个 vue 的项目模板;预先定义 好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个 骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速。…

深兰科技荣获CFS第十三届财经峰会“2024杰出出海品牌引领奖”

近日,以“向新而行,新质生产力激发新活力”为主题的“CFS2024第十三届财经峰会暨Amazing 2024创新企业家节”在北京隆重开幕。峰会揭晓了第十三届“CFS 2024企业奖”的评选结果,深兰科技凭借自身在AI机器人出口和海外市场开拓等品牌全球化方面…

60KW~180KW一体式充电桩电路方案!

本次小编给大家带来了一款60KW~180KW的一体式充电桩电路方案,本方案包含接线图,电路原理图,PCB图,BOM,协议说明,产品标准等资料! 下载链接!https://t.1yb.co/KW1R 本方案采用STM32F…

std::wcout,std::cout控制台输出中文乱码,std::cerr字符串的字符无效

系列文章目录 文章目录 系列文章目录前言一、中文乱码原因二、解决方法1.如果是windos11下,使用英文语言,需要加以下代码2.如果是中文语言只需要一行关键代码3.如果在异常处理中显示宽字符中文4.完整代码如下:实现文件测试代码输出打印 前言 …

【图像特效系列】图像毛玻璃特效的实践 | 包含代码和效果图

目录 一 毛玻璃特效 1 代码 2 效果图 图像特效系列主要是对输入的图像进行处理,生成指定特效效果的图片。图像素描特效会将图像的边界都凸显出来;图像怀旧特效是指图像经历岁月的昏暗效果;图像光照特效是指图像存在一个类似于灯光的光晕特效,图像像素值围绕光照中心点呈…

极光推送(JPush)携手中大英才,打造智慧教育新模式

随着互联网技术的快速发展,在线教育行业蓬勃兴起,用户对学习体验的要求也越来越高。作为国内领先的职业技能知识培训服务商,中大英才(北京)网络教育科技有限公司(简称“中大英才”)始终致力于为多层次求知学习人士提供专业化、智能化和科学化…

实战演练:通过API获取商品详情并展示

实战演练:通过API获取商品详情并展示,通常涉及以下几个步骤:确定API接口、发送HTTP请求、处理响应数据、以及将数据展示给用户。这里我们以一个假想的商品详情API为例,使用Python语言和requests库来完成这个任务。 步骤 1: 确定A…

DMHS数据同步工具

DMHS数据同步工具 ​ 本章节主要介绍DM数据同步工具DMHS的使用,通过将oracle11g的数据同步到DM8的过程来理解DMHS的功能和作用。 安装前的准备 端口、服务信息 IP地址服务名称版本端口安装路径192.168.19.136OracleOracle11.0.21521/opt/oracle/DMHS源端dmhs_V3…

第100+22步 ChatGPT学习:概率校准 Platt Scaling

基于Python 3.9版本演示 一、写在前面 最近看了一篇在Lancet子刊《eClinicalMedicine》上发表的机器学习分类的文章:《Development of a novel dementia risk prediction model in the general population: A large, longitudinal, population-based machine-learn…