【接口自动化_07课_Pytest+Excel+Allure完整框架集成_下】

news2024/11/24 14:45:43

目标:优化框架场景

1. 生成对应的接口关联【重点】

2. 优化URL基础路径封装【理解】

3. 利用PySQL操作数据库应用【理解】--- 怎么用python连接数据库、mysql

4. 通过数据库进行数据库断言【重点】

5. 通过数据库进行关联操作【重点】

一、接口关联:(测试业务场景)

登录成功 --- 加入购物车成功(没有token)

1. 登录成功之后需要提取数据 ---

格式:{“变量名”:“jsonpath值”} {"VAR_TOKEN":"$..data.token","MSG":"$.msg"}

提取数据方法--- 提取出来进行存储 -- all_var

1. 方法 ---数据存储到公共的变量all_var当中。

all_var = {}

exdata = {"VAR_TOKEN":"$..data.token","MSG":"$.msg"}

for key, value in exdata.items():  
    valueJson = value+"提取出来的值"
    all_var.update(
        {key: valueJson}
    )

print(all_var)

 运行结果

2. 加入购物车需要引用这个数据

{{变量名}}

代码层面需要修改,增加一句代码即可。

加的两行代码是:

#导入这个模板--固定的
from jinja2 import Template


#  Template(数据A)  这个数据A必须是字符串的格式,所以是数据A = str(数据B)类型转化
#  render()  可以把  render(数据D),通过花括号{}+变量名={{变量名}}替换到 Template(数据A的模板里)
#  eval()里面是字典的格式

CaseData = eval(Template(str(CaseData)).render(self.all_var))


一共就上面两句

实际应用:

@pytest.mark.parametrize("CaseData", AllCaseData)
    def testData(self, CaseData):
        print("当前执行的测试用例接口:", CaseData)
        self.dynamic_title(CaseData)
        CaseData = eval(Template(str(CaseData)).render(self.all_var))

 简单应用的例子:

from jinja2 import Template

all_var = {"VAR_TOKEN": "4534131231231321321", "BOOK_ID": 178}
CaseData = {"url": "http://novel.hctestedu.com/book/queryBookDetail/{{BOOK_ID}}", "params": '{"token":"{{VAR_TOKEN}}"}'}
CaseData2 = eval(Template(str(CaseData)).render(all_var))  # 变量渲染--其实就是数据替换
print(CaseData2)

二、接口风格:

1、传统api 

发送请求: get 、post (居多)

http://localhost:8080/admin/getUser (查询用户) --- get请求

http://localhost:8080/admin/addUser (新增用户) --- post请求

http://localhost:8080/admin/updateUser (更新用户)--- post请求

http://localhost:8080/admin/deleteUser (删除用户)--- pos请求

2、restFul风格

一. 什么是Restful风格
1.1 概念
RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用 XML 格式定义或 JSON 格式定义。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,使用JSON格式的REST风格的API具有简单、易读、易用的特点。

1.是一种风格,不是协议规定,这种风格更简介美观
2.基于HTTP,可以使用 XML 格式定义或 JSON 格式定义,前后端分离时代都用json传递数据了
————————————————

                        
原文链接:https://blog.csdn.net/weixin_43189971/article/details/126024564

灵活的应用请求方法

GET http://localhost:8080/admin/user/10(查询用户)

POST http://localhost:8080/admin/user (新增用户)

PUT http://localhost:8080/admin/user (更新用户)

DELETE http://localhost:8080/admin/user (删除用户)

http://novel.hctestedu.com/book/queryBookDetail/178

178 --- {书籍的ID}

修改数据成功之后(获取书籍ID ),调用查看详情的接口(引用ID)

http://novel.hctestedu.com/book/queryBookDetail/{{BOOK_ID}}

三、数据库操作

数据库的提取:

  1. 连接数据库
  2. 什么情况下进行数据的提取--比如注册完毕,进行提取;新增数据完毕、进行提取,
  3. sqlExData 字段 :思路和响应提取完全一样,只是一个是写jsonpath 一个是写sql而已。

1、数据库模块

1)数据库连接和操作

# 连接数据库

# 1. 知道数据库用的什么第三方模块 - pymysql
# 2. 数据库的连接信息是什么?
# 主机(host,注意没有www):shop-xo.hctestedu.com
# 端口:3306
# 用户名:api_test
# 密码:Aa9999!
# 数据库名:shopxo_hctested

import pymysql

# 1. 配置数据库连接信息并连接
connection = pymysql.connect(
    host='shop-xo.hctestedu.com',  # 数据库地址
    port=3306,
    user='api_test',  # 数据库用户名
    password='Aa9999!',  # 数据库密码
    db='shopxo_hctested',  # 数据库名称
    # charset = 'utf8 -- UTF-8 Unicode'  #设置编码格式
)

这个需要写到配置文件里,作为数据库连接的常量

可以在关键字驱动里引用数据库连接的常量

 2)创建游标--操作数据库

# 创建游标对象,使用它进行操作 ---相当于操作员
cursor = connection.cursor()

3)SQL链表查询

# SQL语句 (链表查询一定要会)
sql = "SELECT id,username,nickname FROM sxo_user where username='hami'"

4) 使用游标对象操作SQL

# 使用游标对象去执行操作SQL
cursor.execute(sql)


# 得到结果集的下一行
result = cursor.fetchone()
print(result)  # 返回的元组格式。

5)关闭数据库连接

# 关闭数据库连接
cursor.close()

 tips:

Ctrl + Shift + u   可以来回切换大小写

HHTTP  -  http

2、数据提取

  1. 什么情况下进行数据的提取--比如注册完毕,进行提取;新增数据完毕、进行提取,
  2. sqlExData 字段 :思路和响应提取完全一样,只是一个是写jsonpath 一个是写sql而已。

从json提取,变成sql提取

{"name":"SELECT username FROM sxo_user WHERE username='hami'",

"id":"SELECT id FROM sxo_user WHERE username='hami'"}

3、数据库断言:

常用场景:新建用户数据-- 用户表:用户, 新建书籍--- 书籍表:书籍

excel :多2个字段

期望结果:{"id":75,"name":"hami"}

实际结果:{"name":"SELECT username FROM sxo_user WHERE username='hami'",

"id":"SELECT id FROM sxo_user WHERE username='hami'"}

{"id":75,"name":"hami"}

assert 期望结果== 实际结果

期望结果-75 ,可以断言成功

把这个改为89--就会执行断言失败 

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

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

相关文章

深入浅出mediasoup—协议交互

本文主要分析 mediasoup 一对一 WebRTC 通信 demo 的协议交互,从协议层面了解 mediasoup 的设计与实现,这是深入阅读 mediasoup 源码的重要基础。 1. 时序图 下图是 mediasoup 客户端-服务器协议交互的总体架构,服务器是一个 Node.js 进程加…

Django学习第一天(如何创建和运行app)

前置知识: URL组成部分详解: 一个url由以下几部分组成: scheme://host:port/path/?query-stringxxx#anchor scheme:代表的是访问的协议,一般为http或者ftp等 host:主机名,域名,…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(三)基变换与坐标变换;微分方程;李群和李代数;雅可比矩阵

一、基变换与坐标变换 字小,事不小。 因为第一反应:坐标咋变,坐标轴就咋变呀。事实却与我们想象的相反。这俩互为逆矩阵。 第一次读没有读明白,后面到事上才明白。 起因是多传感器标定:多传感器,就代表了多个坐标系,多个基底。激光雷达和imu标定。这个标定程序,网上,…

秒杀优化: 记录一次bug排查

现象 做一人一单的时候,为了提升性能,需要将原来的业务改造成Lua脚本加Stream流的方式实现异步秒杀。 代码改造完成,使用Jmeter进行并发测试,发现redis中的数据和预期相同,库存减1,该用户也成功添加了进去…

HarmonyOS鸿蒙应用开发-ZRouter让系统路由表变得更简单

介绍 ZRouter是基于Navigation系统路由表和Hvigor插件实现的动态路由方案。 系统路由表是API 12起开始支持的,可以帮助我们实现动态路由的功能,其目的是为了解决多个业务模块(HAR/HSP)之间解耦问题,从而实现业务的复…

NoSQL之Redis非关系型数据库

目录 一、数据库类型 1)关系型数据库 2)非关系型数据库 二、Redis远程字典服务器 1)redis介绍 2)redis的优点 3)Redis 为什么那么快? 4)Redis使用场景 三、Redis安装部署 1&#xff0…

社交圈子小程序搭建-源码部署-服务公司

消息通知:当有新的消息、评论或回复时,用户需要收到系统的推送通知,以便及时查看和回复 活动发布与参加:用户可以在社交圈子中发布各种类型的活动,如聚餐、旅游、运动等。其他用户可以参加这些活动,并与组织者进行交流和沟通 社交…

ML.Net 学习之使用经过训练的模型进行预测

什么是ML.Net:(学习文档上摘的一段:ML.NET 文档 - 教程和 API 参考 | Microsoft Learn 【学习入口】) 它使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。 借助此功能,可以使用应用程序的可用数据进行自…

运行 npm install 报错-4048

我在已经开发中的项目,执行 npm install 命令时,出现报错: 并且之前在帖子中提到的报错类型还不一样(帖子内容如下): 运行 npm run dev 总报错_运行npm run dev报错-CSDN博客 该报错内容主要为权限导致的&…

使用集成线性 LED 驱动器替代分立 LED 电路设计

在转向灯、刹车灯和尾灯等汽车照明中,LED 电路设计通常采用分立元件,如双极结晶体管 (BJT)。分立元件之所以突出有几个常见原因:它们简单、可靠且便宜。然而,随着 LED 数量和项目要求的增加,重新考虑离散设计可能是值得…

双边性:构建神经网络的新方法

正如承诺的那样,这是最近我遇到的最有趣的想法之一的第二部分。如果你错过了,请务必观看本系列的第一部分 - 神经科学家对改进神经网络的看法 - 我们讨论了双边性的生物学基础以及我们大脑的不对称性质如何带来更高的性能。 在这篇文章中,我…

<数据集>AffectNet表情识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:29752张 标注数量(xml文件个数):29752 标注数量(txt文件个数):29752 标注类别数:7 标注类别名称:[anger,contempt,disgust,fear,happy,neutral,sad,surprise] 序号类…

如何使用大语言模型绘制专业图表

过去的一年里,我相信大部分人都已经看到了大语言模型(后文简称LLM)所具备的自然语言理解和文本生成的能力,还有很多人将其应用于日常工作中,比如文案写作、资料查询、代码生成……今天我要向大家介绍LLM的一种新使用方式——绘图。这里说的绘…

HydraRPC: RPC in the CXL Era——论文阅读

ATC 2024 Paper CXL论文阅读笔记整理 问题 远程过程调用(RPC)是分布式系统中的一项基本技术,它允许函数在远程服务器上通过本地调用执行来促进网络通信,隐藏底层通信过程的复杂性简化了客户端/服务器交互[15]。RPC已成为数据中心…

Transformer-Bert---散装知识点---mlm,nsp

本文记录的是笔者在了解了transformer结构后嗑bert中记录的一些散装知识点,有时间就会整理收录,希望最后能把transformer一个系列都完整的更新进去。 1.自监督学习 bert与原始的transformer不同,bert是使用大量无标签的数据进行预训…

Spring 整合MongoDB xml解析

beans引用 xmlns:mongo"http://www.springframework.org/schema/data/mongo"xsi:schemaLocation"http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd " 具体…

学习使用Sklearn【LDA】线性判别分析,对iris数据分类!

数据集、代码均来自kaggle。地址:https://www.kaggle.com/datasets/himanshunakrani/iris-dataset?resourcedownload 🚀 揭示线性分类器的力量:线性判别分析的探索 欢迎来到线性分类器的世界和线性判别分析(LDA)的迷人领域!🌟在本笔记本中…

在服务器调用api操作rabbitmq

不同的rabbitmq版本可能api不同,仅做参考,RabbitMQ 3.7.18。同时,我基本没看官方api文档,根据rabbitmq客户端控制台调用接口参数来决定需要什么参数。例如: 1、添加用户 curl -u 用户名:密码 -H “Content-Type: a…

[亲测可用]俄罗斯方块H5-网页小游戏源码-HTML源码

本站的HTML模板资源:所见文章图片即所得,搭建和修改教程请看这篇文章:https://yizhi2024.top/8017.html

Maven 的模块化开发示例

Maven 的模块化开发是一种非常有效的软件开发方式,它允许你将一个大型的项目分割成多个更小、更易于管理的模块(modules)。每个模块都可以独立地构建、测试和运行,这不仅提高了开发效率,也便于团队协作和项目的维护。以…