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

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

{

"name": "thread",

"value": "4986-MainThread",

"status": "framework",

"start": "pytest",

"stop": "language",

}

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

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

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

生成一个变量渲染的文件

变量渲染:

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

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

需要导入对应的包

from jinja2 import Template

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

python 复制代码
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)

好我们来进行测试一下

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)
        # 获取我们的相应数据.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文件

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}'

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

相关推荐
eclipsercp31 分钟前
PyQt5:Python GUI开发的超级英雄
开发语言·python·qt
木有会1 小时前
【mac】终端左边太长处理,自定义显示名称(terminal路径显示特别长)
macos
codists1 小时前
《Django 5 By Example》阅读笔记:p339-p358
python·django
檀越剑指大厂1 小时前
【Python系列】异步 Web 服务器
服务器·前端·python
m0_676099581 小时前
数据结构--创建链表--Python
数据结构·python·链表
_im.m.z1 小时前
Mac配置和启动 Tomcat
java·macos·tomcat·ssm框架
丁总学Java2 小时前
在 Mac(ARM 架构)上安装 JDK 8 环境
arm开发·macos·架构
搬砖的果果2 小时前
HTTP代理是什么,主要用来干嘛?
网络·python·网络协议·tcp/ip·http
白初&2 小时前
文件上传代码分析
java·c++·python·php·代码审计
koko爱英语2 小时前
Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1
测试工具·jmeter·macos