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

目标:优化框架场景

  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)

运行结果

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

{{变量名}}

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

加的两行代码是:

#导入这个模板--固定的
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--就会执行断言失败

相关推荐
聚名网2 分钟前
服务器如何划分空间?
运维·服务器
华纳云IDC服务商37 分钟前
如何自动解决服务器弹性伸缩问题?
运维·服务器
soragui1 小时前
【ChatGPT】OpenAI 如何使用流模式进行回答
linux·运维·游戏
Logintern092 小时前
Linux如何设置redis可以外网访问—执行使用指定配置文件启动redis
linux·运维·redis
娶不到胡一菲的汪大东2 小时前
Linux之ARM(MX6U)裸机篇----1.开发环境搭建
linux·运维·服务器
vvw&2 小时前
如何在 Ubuntu 22.04 上安装和使用 Composer
linux·运维·服务器·前端·ubuntu·php·composer
Hi202402172 小时前
ubuntu22.04上安装win10虚拟机,并采用noVNC+frp,让远程通过web访问桌面
运维·kvm·云桌面
几维安全3 小时前
如何通过运行时威胁洞察提升反欺诈策略
运维·网络·安全
soragui4 小时前
【Ubuntu】如何轻松设置80和443端口的防火墙
linux·运维·ubuntu
网络安全queen4 小时前
【D03】SNMP、NETBIOS和SSH
运维·网络·web安全·ssh