pyhton+yaml+pytest+allure框架封装-全局变量渲染

devtools/2024/11/27 19:34:05/

我们在日常测试中 会有一个接口中多个值的情况 比如这种

{

        "name": "thread",
        "value": "4986-MainThread",
        "status": "framework",
        "start": "pytest",
        "stop": "language",

}

那我们上一篇说到 我们封装好了全局变量后需要从上一个接口中的值存入到全局变量中,再从全局变量中获取值给到下一个接口

那我们如果接口中多个值 我们还得一个一个写 真的很麻烦 这时候就用到了我们的变量渲染

我们先创建一个文件夹存放我们的工具类

生成一个变量渲染的文件

变量渲染:

1字符串模版进行参数渲染

2使用jinja2模版引擎(类似flask模版)

需要导入对应的包

from jinja2 import Template

先定义一个方法,渲染的初始值,对应的变量

python">from http.client import responsesfrom jinja2 import Template
# 定义一个方法var_rendering
# target:渲染的初始值 用{{变量名}}
# content:对应的变量
def var_rendering(target,context):# 如果我们的初始值为空 那就返回空if target is None: return None#否则我们就用模版进行替换# 把我们的初始值转换成字符串,然后来进行对应的替换return Template(str(target)).render(context)

好我们来进行测试一下

python">def te_var_rendering():target = '{{name}},{{age}}'context = {'name':'王二'}ret = var_rendering(target,context)print(ret)te_var_rendering()

返回结果 

我们可以看到 name传了值 而age没有值 所以也就不会渲染age的值。

我们在添加以写数据

然后把原来的请求换掉 以字典的拼接的方式赋值给request_data  然后我们把请求数据全部进行渲染一遍,开始导包

python">from utils_file.variable_rendering import var_rendering

把请求数据全部进行渲染一遍 要传两个值 一个是请求数据,一个是全局变量

.show_dict()是g_test全局变量的方法

python">var_rendering(request_data,g_test().show_dict())  

别忘了导入全局变量的包

python">from global_files.global_variable import g_test

然后就可以啦 我们把相关用例都同步更改一下

这里token的获取注意一下

那这样渲染就完成啦!~

我们运行一下 看一下结果

附代码:

渲染文件

python"># 渲染
from jinja2 import Template
# 定义一个方法var_rendering
# target:渲染的初始值 用{{变量名}}
# content:对应的变量
def var_rendering(target,context):# 如果我们的初始值为空 那就返回空if target is None: return None#否则我们就用模版进行替换# 把我们的初始值转换成字符串,然后来进行对应的替换return Template(str(target)).render(context)# 测试一下
def te_var_rendering():target = 'world {{name}},{{age}},{{token}}'context = {'name':'王二','token':'0987545345678'}ret = var_rendering(target,context)print(ret)te_var_rendering()

用例1文件

python">import allure
from utils_file.variable_rendering import var_rendering
from global_files.global_variable import g_test
from key_words.test_keys import Test_Keys
test_key = Test_Keys()@allure.title('登陆成功测试用例')
def test_01_login():with allure.step('第一步,登陆操作'):url = "http://www.hghghhg.com/index.php?s=/login"params = {"application": "app","application_client_ty1pe": "weixin"}data = {'accounts': 'niha','pwd': '12456','type': 'useme'}# 发送请求 拼接成一个字典request_data = {'url':url,'params':params,'data':data}# 把请求数据全部进行渲染一遍 要传两个值 一个是请求数据,一个是全局变量# 返回一个渲染后的数据 -字符串格式request_data = eval(var_rendering(request_data,g_test().show_dict()))ret = test_key.request_post(**request_data)# 获取我们的相应数据.msgmag_ret = test_key.ex_jsondata(ex_value='$..msg',var_name='msg_results')print("当前提取的数据为:", mag_ret)# 根据对应的.msg进行断言处理assert mag_ret == "登录成功", f'错误,我们当前返回的值是:{mag_ret}'# 获取tokentoken_ret = test_key.ex_jsondata(ex_value='$..token',var_name='token')[0]print("当前提取的数据为:", token_ret)return token_ret

用例2文件

python">
# 用例文件
import allure
from utils_file.variable_rendering import var_rendering
from global_files.global_variable import g_test
from key_words.test_keys import Test_Keys
test_key = Test_Keys()@allure.title('加入购物车成功测试用例')
def test_02_addcar():with allure.step('第二步,加入购物车'):url = 'http://www.hshahshhs.com/index.php?s=/save'params = {"application": "app","application_client_type": "weixin",'token': '{{token}}'}data = {"goods_id": "3","spec": [{"type": "3","value": "e34"},],"stock": 1}request_data = {'url':url,'params':params,'data':data}request_data = eval(var_rendering(request_data,g_test().show_dict()))ret = test_key.request_post(**request_data)mag_ret = test_key.ex_jsondata(ex_value='$..msg',var_name='msg_results')print('当前提取数据为:', mag_ret)assert mag_ret == '加入成功', f'失败,返回的的是:{mag_ret}'

运行文件、全局变量文件、关键字文件 在上一篇中都有哦


http://www.ppmy.cn/devtools/137472.html

相关文章

极狐GitLab 17.6 正式发布几十项与 DevSecOps 相关的功能【六】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

Failed to find SV in PRN block of SINEX file (Name svnav.dat)

gamit 精密星历生成失败 gamit svnav.dat没更新 下载svnav.dat.allgnss 重命名成 svnav.dat ,替换到tables,即可。

35 基于单片机的精确电压表DA-AD转换

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,采用DAC0832和ADC0832检测电压,0到8.5V,设计复位电路 LED管显示实际稳压值,初始电压0 二、硬件资源 基于KEIL5编写C代码&#xff0c…

路由传参、搜索、多选框勾选、新增/编辑表单复用

前言: 记录添加运动员页面功能的具体实现 ①由赛事管理页面跳转时路由传参(携带该页面表格中莫某条数据对应的赛事id到另一个页面); ②搜索框实时搜索; ③多选框勾选搜索; ④新增表单和编辑表单复用&a…

【Linux】Linux 内存管理机制

前言 Linux 的内存管理机制是一个复杂而高效的系统,旨在确保系统资源的高效利用,同时提供良好的性能和响应能力。本文主要介绍 Linux 内存管理的主要组件和机制。 虚拟内存 概念: 每个进程在 Linux 中拥有自己的虚拟地址空间,这使得进程之…

OpenCV基本图像处理操作(六)——直方图与模版匹配

直方图 cv2.calcHist(images,channels,mask,histSize,ranges) images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的…

C++ 多态作业练习

作业1、 编写一个英雄类 class Hero{ int atk; int def; int spd; int hp; public: 所有的get set 方法 void equipWeapon(Weapon*) 根据传入的武器不同&#xff0c;英雄获得不同的属性加成 } #include <iostream> #include <cstring&g…

Docker 部署 MongoDB

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f343; vue-uniapp-template &#x1f33a; 仓库主页&#xff1a; GitCode&#x1f4ab; Gitee &#x1f…