当前位置: 首页 > article >正文

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

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

{

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

}

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

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

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

生成一个变量渲染的文件

变量渲染:

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

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

需要导入对应的包

from jinja2 import Template

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

from http.client import responses

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 = '{{name}},{{age}}'
    context = {'name':'王二'}
    ret = var_rendering(target,context)
    print(ret)

te_var_rendering()

返回结果 

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

我们在添加以写数据

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

from utils_file.variable_rendering import var_rendering

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

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

var_rendering(request_data,g_test().show_dict())  

别忘了导入全局变量的包

from global_files.global_variable import g_test

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

这里token的获取注意一下

那这样渲染就完成啦!~

我们运行一下 看一下结果

附代码:

渲染文件

# 渲染
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文件

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)
        # 获取我们的相应数据.msg
        mag_ret = test_key.ex_jsondata(ex_value='$..msg',var_name='msg_results')
        print("当前提取的数据为:", mag_ret)
        # 根据对应的.msg进行断言处理
        assert mag_ret == "登录成功", f'错误,我们当前返回的值是:{mag_ret}'
        # 获取token
        token_ret = test_key.ex_jsondata(ex_value='$..token',var_name='token')[0]
        print("当前提取的数据为:", token_ret)
        return token_ret




用例2文件


# 用例文件
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.kler.cn/a/414750.html

相关文章:

  • 华为E9000刀箱(HWE9000V2)服务器硬件监控指标解读
  • js中判断数组和判断对象的方法
  • podman 源码 5.3.1编译
  • 【论文阅读】Federated learning backdoor attack detection with persistence diagram
  • CTF之密码学(键盘加密)
  • CA系统(file.h---申请认证的处理)
  • React Native 调试指南
  • 飞塔防火墙只允许国内IP访问
  • IDEA Mac快捷键(自查询使用)
  • 什么是代理,nodenginx前端代理详解
  • 【摸鱼】Docker配置主从mysql数据库环境
  • Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计
  • QT6学习第六天 初识QML
  • 详解 PyTorch 中的 DataLoader:功能、实现及应用示例
  • 如何手动设置ubuntu服务器的ip、子网掩码、网关、DNS
  • JavaScript实用工具lodash库
  • Qt MinGW环境下使用CEF
  • 数据挖掘/深度学习-高校实训解决方案
  • Qt—QLabel 使用总结
  • 使用ENSP实现OSPF
  • 68000汇编实战01-编程基础
  • 如何分析Windows防火墙日志
  • Vue前端开发-动态插槽
  • net 站点安全 OwaspHeaders.Core
  • 抓包之查看websocket内容
  • 深入解析音视频流媒体SIP协议交互过程