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

server/2024/11/29 22:32:51/

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

{

        "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/server/146008.html

相关文章

Jetpack业务架构(ViewModel)

ViewModel是Jetpack AAC的重要组件,同时也有一个同名抽象类。 ViewModel,意为 视图模型,即为界面准备数据的模型。简单理解就是,ViewModel为UI层提供数据。 1ViewModel使用: ①思路: 导入依赖 继承ViewMo…

2024.11.28(作业)

思维导图 功能函数声明文件 #ifndef _FUN_H__ #define _FUN_H__ #include <myhead.h>#define MAX 50 //数组大小 #define QAZ 20 //长度和字符串大小typedef int datatype; //数据元素类型//2.1 定义顺序表类型 typedef struct {datatype data[MAX];int len; }S…

【Linux】Linux进程控制

【Linux】Linux进程控制 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 1. 进程创建 1.1 初始 fork 函数 1.2 写时拷贝 2. 进程终止 2.1 进程退出场景 2.2 进程常见退出方法…

3.10 内核 BUG_ON() at xfs_vm_writepage() -> page_buffers()

目录 前言 问题分析 page buffers创建 page buffers丢失 Write-Protect Dirty Page w/o Buffers 问题解决 前言 这个问题发生在3.10.0-514.el7上&#xff0c;并且在RHEL的知识库中快速找到了对应的案例以及解决方案&#xff0c;但是&#xff0c;理解问题如何发生和解决…

用于自然语言处理的循环神经网络RNN

前一篇&#xff1a;《人工智能模型学习到的知识是怎样的一种存在&#xff1f;》 序言&#xff1a;在人工智能领域&#xff0c;卷积神经网络&#xff08;CNN&#xff09;备受瞩目&#xff0c;但神经网络的种类远不止于此。实际上&#xff0c;不同类型的神经网络各有其独特的应用…

【青牛科技】D2761音频限幅器,适合在个人电脑、便携式音响等系统中作音频限幅用。

概述&#xff1a; D2761是为保护扬声器所设计的音频限幅器&#xff0c;其限幅值可通过外接电阻来调节&#xff0c;适合在个人电脑、便携式音响等系统中作音频限幅用。D2761采用SSOP10、MSOP10、TSSOP14的封装形式封装。 主要特点&#xff1a;  工作电压范围宽&#xff1a;2.…

uniapp开发支付宝小程序自定义tabbar样式异常

解决方案&#xff1a; 这个问题应该是支付宝基础库的问题&#xff0c;除了依赖于官方更新之外&#xff0c;开发者可以利用《自定义 tabBar》曲线救国 也就是创建一个空内容的自定义tabBar&#xff0c;这样即使 tabBar 被渲染出来&#xff0c;但从视觉上也不会有问题 1.官方文…

QT 实现组织树状图

1.实现效果 在Qt中使用QGraphicsItem和QGraphicsScene实现树状图,你需要创建自定义的QGraphicsItem类来表示树的节点,并管理它们的位置和连接,以下是实现效果图。 2.实现思路 可以看见,上图所示,我们需要自定义连线类和节点类。 每个节点类Node,需要绘制矩形框体文字…