当前位置: 首页 > news >正文

接口自动化-代码实现

接口自动化基础

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)# 断言响应状态码为200assert 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

相关文章:

接口自动化-代码实现

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

如何查看linux大文件

文章目录 一、查看存储情况二、查看指定路径下的文件大小查看临时文件和日志的大小 三、查找home目录下文件大小大于100M的大文件四、查看INNODE使用情况五、查看进程使用情况查看所有进程查看特定进程杀死相关进程 六、清除缓存操作七、 查看docker的硬盘占用情况详细查看 一、…...

生成式人工智能服务大模型备案答疑

问:大模型备案范围 答:利用生成式人工智能技术向中华人民共和国境内公众提供生成文本、图片、音频、视频等内容的服务,适用本办法。 未向境内公众提供生成式人工智能服务的,不适用本办法的规定。 ps:生成式人工智能…...

QT-贪吃蛇小游戏

QT-贪吃蛇小游戏 一、演示效果二、核心代码三、下载链接 一、演示效果 二、核心代码 #include "Food.h" #include <QTime> #include <time.h> #include "Snake.h"Food::Food(int foodSize):foodSize(foodSize) {coordinate.x -1;coordinate.…...

虚幻5|AI视力系统,听力系统,预测系统(1)视力系统

继宠物伴随系统初步篇后续 虚幻5|AI巡逻宠物伴随及定点巡逻—初步篇-CSDN博客 一&#xff0c;听力系统 1.打开宠物ai的角色蓝图 2.选中ai感知组件 右侧细节&#xff0c;找到ai感知&#xff0c;添加感知配置&#xff0c;我们需要的是ai视力配置 3.选中左侧创建的ai感知组件&…...

IC rankIC

IC IC衡量的是预测值和实际值之间的相关系数 计算公式为&#xff1a;IC Pearson(R(predicted),R(actual)) 取值范围&#xff1a;[-1, 1]&#xff0c;其中1表示完全相关&#xff0c;也就是预测值和实际值完全一样。0表示完全不相关&#xff0c;-1表示&#xff0c;反向相关 ra…...

Windows服务器IIS7下如何查看真实报错原因

背景 IIS7默认为友好报错&#xff0c;或只报错代码。如500错误&#xff0c;401错误等。根据这些错误无法定位真实原因&#xff0c;故而需要显示真实的错误信息。 解决方案 以500错误为例说明。 1、打开IIS,点全局设置中的"错误页"(注意必须是全局网站)。 2、右击50…...

深度学习设计模式之策略模式

文章目录 前言一、介绍二、特点三、详细介绍1.核心组成2.代码示例3.优缺点优点缺点 4.使用场景 总结 前言 策略模式定义一系列算法&#xff0c;封装每个算法&#xff0c;并使它们可以互换。 一、介绍 策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&…...

Linux 下安装miniconda(少走弯路)

Miniconda 和 Conda 都是用于管理 Python&#xff08;及其他语言&#xff09;环境和包的工具。 conda对于我来说是太臃肿了&#xff0c;很多的包我不会使用&#xff0c;所以选择安装miniconda是一个较好的选择。 下面是linux安装miniconda的实际操作。 在以下的网站&#xf…...

java ssl使用自定义证书

1.证书错误 Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 2.生成客户端证书 openssl x509 -in <(openssl s_client -connect 192.168.11.19:8101 -prexit 2>/dev/null) -ou…...

【ARM+Codesys 客户案例 】基于RK3568/A40i/STM32+CODESYS开发的控制器在自动输送分拣系统上的应用,支持定制

2021年“京东618” 累计下单金额超3438亿元,再次刷新纪录! 从下单到收货&#xff0c;各种货品均可在短短几天内通过四通八达的物流网络送达全国任何一个家庭。电子商务和快递物流的迅猛发展对仓储、分拣、配送效率和准确性均提出了更高的要求&#xff0c;加速了智能物流的发展。…...

C++ 设计模式(1. 单例模式)

单例模式是一种创建型设计模式&#xff0c; 它的核心思想是保证一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。 特点 全局访问点的意思是&#xff0c;为了让其他类能够获取到这个唯一实例&#xff0c;该类提供了一个全局访问点&#xff08;通常是一个静态…...

算法笔记|Day31动态规划IV

算法笔记|Day31动态规划IV ☆☆☆☆☆leetcode 1049.最后一块石头的重量II题目分析代码 ☆☆☆☆☆leetcode 494.目标和题目分析代码 ☆☆☆☆☆leetcode 474.一和零题目分析代码 ☆☆☆☆☆leetcode 1049.最后一块石头的重量II 题目链接&#xff1a;leetcode 1049.最后一块石…...

CSS文字方向控制属性text-orientation

在CSS中&#xff0c;text-orientation 属性主要用于控制文本的方向&#xff0c;特别是当文本被设置为垂直排列时。这个属性主要用于东亚语言的排版&#xff0c;比如中文、日文和韩文&#xff0c;这些语言在垂直书写时&#xff0c;字符的排列方向可能与拉丁文字不同。 text-ori…...

配置typora上传图片到Chevereto图床

目录 一、下载安装PicGo二、配置PicGo三、配置Typora 一、下载安装PicGo PicGo下载地址点击进入 进入官网后点击下载&#xff0c;会跳转到GitHub,如图,选择对应的操作系统版本下载 下载完成后单击安装&#xff08;本文已windows系统为例&#xff09; 二、配置PicGo 点击插件设…...

Java面试八股之如何保证消息队列中消息不重复消费

如何保证消息队列中消息不重复消费 要保证消息队列中的消息不被重复消费&#xff0c;通常需要从以下几个方面来着手&#xff1a; 消息确认机制&#xff1a; 对于像RabbitMQ这样的消息队列系统&#xff0c;可以使用手动确认&#xff08;manual acknowledge&#xff09;机制来…...

0.91寸OLED迷你音频频谱

一、简介 音频频谱在最小0.91寸OLED 屏幕上显示&#xff0c;小巧玲珑 二、应用场景 本模块为音频频谱显示模块&#xff0c;用来获取声音频谱并展示频谱&#xff0c;跟随音乐声音律动 三、产品概述 基于主控芯片设计的将声音采集分析频谱&#xff0c;显示到0.91寸OLED的功能…...

机器学习--特征工程常用API

1. DictVectorizer - 字典特征提取 DictVectorizer 是一个用于将字典&#xff08;如Python中的字典对象&#xff09;转换为稀疏矩阵的工具&#xff0c;常用于处理类别型特征。 DictVectorizer(sparseTrue, sortTrue, dtype<class numpy.float64>)参数&#xff1a; spar…...

块级LoRA:个性化与风格化在文本到图像生成中的新突破

人工智能咨询培训老师叶梓 转载标明出处 文本到图像生成技术的核心目标是教会预训练模型根据输入的文本提示生成具有特定主题和风格的新颖图像。尽管已有多种微调技术被提出&#xff0c;但它们在同时处理个性化和风格化方面仍存在不足&#xff0c;导致生成的图像在个人身份和风…...

redis的数据结构——压缩表(Ziplist)

压缩表(Ziplist)是Redis中一种紧凑的数据结构,主要用于节省内存。它通常被用于存储少量的字符串或小整数,尤其在列表类型(List)和哈希类型(Hash)中。当数据量较小或数据本身占用内存较少时,Redis会选择用压缩表来存储数据,以减少内存开销。 压缩表的基本结构 压缩表…...

探索未知,悦享惊喜 —— 您的专属盲盒一番赏小程序盛大开启

在这个充满奇遇与惊喜的时代&#xff0c;每一份未知都蕴藏着无限可能。为了将这份独特的乐趣带到您的指尖&#xff0c;我们精心打造了“悦赏盲盒”小程序&#xff0c;一个集潮流、趣味、收藏于一体的全新互动平台&#xff0c;让每一位用户都能享受到拆盲盒的乐趣&#xff0c;发…...

dompdf导出pdf中文乱码显示问号?

环境&#xff1a;PHP 8.0 框架&#xff1a;ThinkPHP 8 软件包&#xff1a;phpoffice/phpword 、dompdf/dompdf 看了很多教程&#xff08;包括GitHub的issue、stackoverflow&#xff09;都没有解决、最终找到解决问题的根本&#xff01; 背景&#xff1a;用Word模板做转PDF…...

韩顺平Java-第二十四章:MYSQL基础篇

一 数据库 1 数据库简单原理图 2 使用命令行窗口连接MYSQL数据库 &#xff08;1&#xff09;mysql -h 主机名 -P 端口 -u 用户名 -p密码&#xff1b; &#xff08;2&#xff09;登录前&#xff0c;保证服务启动。 3 MySQL三层结构 &#xff08;1&#xff09;所谓安装MySQL数…...

【动态规划算法题记录】最长/最大 问题汇总 (leetcode)

目录 32. 最长有效括号思路代码 300. 最长递增子序列思路代码 674. 最长连续递增序列思路1&#xff1a;双指针代码1&#xff1a;双指针思路2&#xff1a;dp代码2&#xff1a;dp 718. 最长重复子数组思路1&#xff1a;dp代码1&#xff1a;dp思路2&#xff1a;dp优化代码2&#x…...

2020 位示图

2020年网络规划设计师上午真题解析36-40_哔哩哔哩_bilibili 假设某计算机的字长为32位&#xff0c;该计算机文件管理系统磁盘空间管理采用位示图&#xff08;bitmap&#xff09;&#xff0c;记录磁盘的使用情况。若磁盘的容量为300GB&#xff0c;物理块的大小为4MB&#xff0c;…...

富格林:防止陷入黑幕欺诈平台

富格林指出&#xff0c;不少投资者因未做好投资准备而不慎误入黑幕欺诈平台&#xff0c;造成了不必要的亏损。投资者在投资前&#xff0c;需要时刻保持警惕&#xff0c;根据市场行情&#xff0c;作出有依据的投资决定&#xff0c;而不是依赖黑幕欺诈平台的噱头进行投资。建议投…...

Cookie、Session 、token

Cookie 优点: 简单易用: 浏览器自动管理 Cookie 的发送和接收。持久性: 可以设置过期时间&#xff0c;使其可以在浏览器关闭后依旧存在。广泛支持: 所有现代浏览器都支持 Cookie。 缺点: 安全性问题: 存储在客户端&#xff0c;容易被查看和篡改。敏感信息不应直接存储在 Co…...

Json-类型映射使用TypeFactory或者TypeReference

当你需要将JSON数据转换为Java中的复杂类型时,可以使用Jackson库中的TypeFactory或 者TypeReference。这两种方式可以帮助你处理复杂的泛型类型,例如 List<Map<String, Object>> 或者 Map<String, List<Object>>。 示例 1: 使用 TypeFactory 和 T…...

Linux shell编程学习笔记73:sed命令——沧海横流任我行(上)

0 前言 在大数据时代&#xff0c;我们要面对大量数据&#xff0c;有时需要对数据进行替换、删除、新增、选取等特定工作。 在Linux中提供很多数据处理命令&#xff0c;如果我们要以行为单位进行数据处理&#xff0c;可以使用sed。 1 sed 的帮助信息&#xff0c;功能&#xff…...

内网渗透之icmp隧道传输

原理 # 为什么要建立隧道 在实际的网络中&#xff0c;通常会通过各种边界设备软/硬件防火墙、入侵检测系统来检查对外连接的情况&#xff0c;如果发现异常&#xff0c;会对通信进行阻断。 ​ # 什么是隧道 就是一种绕过端口屏蔽的方式&#xff0c;防火墙两端的数据包通过防火墙…...

做网站前端和平面配合/班级优化大师下载安装

一、什么是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器操作系统方面保持着强劲的发展势头以外,…...

昌平企业网站建设/百度的代理商有哪些

解决办法 在连接数据库时加上autocommitTrue db pymysql.connect(host“xxx”, user“root”, password“xxx”, db“userprofiles”, charset“utf8”,autocommitTrue) 原因 autocommit的参数必须是True或者False True&#xff1a;在execute时就会立即向数据库发出操作请求…...

网站营销方式/今日十大热点新闻头条

写在前面 本文首发于公众号&#xff1a;符合预期的CoyPan 最近做了一个移动端活动页的需求&#xff0c;大概就是diy一个页面。用户可以对物料进行拖动、缩放、旋转&#xff0c;来达到diy的目的。用DOM来实现是不现实的&#xff0c;我采用了canvas来实现和用户的交互。开发过程中…...

烟台开发区建设业联合会网站/百度助手app下载安装

1696:逆波兰表达式 总时间限制: 1000ms 内存限制: 65536kB描述逆波兰表达式是一种把运算符前置的算术表达式&#xff0c;例如普通的表达式2 3的逆波兰表示法为 2 3。逆波兰表达式的优点是运算符之间不必有优先级关系&#xff0c;也不必用括号改变运算次序&#xff0c;例如(2 …...

c 可以做网站嘛/链接搜索

我们为什么要学习Python编程语言&#xff1f;原因很简单&#xff0c;Python有很多吸引程序员的功能&#xff0c;它易学&#xff0c;面向对象&#xff0c;字节码编译&#xff0c;免费且开源。现在信息更新的非常快速&#xff0c;又迎来了大数据的时代&#xff0c;各行各业如果不…...

建设网站相关法律条文/关键词优化最好的方法

前些天临时给客户做个工具&#xff0c;统计具体时间点各种车型数据的数量及比重&#xff0c;为了显示方便就用C#来做&#xff0c;因为它有现成的reportviwer控件提供了显示&#xff0c;打印&#xff0c;导出功能。原本我以为这个控件是.netframework里的&#xff0c;做完后直接…...