欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > pyhton+yaml+pytest+allure框架封装-全局变量渲染

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

2024/11/30 8:25:52 来源:https://blog.csdn.net/weixin_46096113/article/details/144065045  浏览:    关键词: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 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)

好我们来进行测试一下

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


# 用例文件
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}'

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

版权声明:

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

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