欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 艺术 > 【接口自动化_07课_Pytest+Excel+Allure完整框架集成_下】

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

2024/11/30 6:56:56 来源:https://blog.csdn.net/weixin_42333261/article/details/140418549  浏览:    关键词:【接口自动化_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)

 运行结果

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 Templateall_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_hctestedimport 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--就会执行断言失败 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com