我们在日常测试中 会有一个接口中多个值的情况 比如这种
{
"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}'
运行文件、全局变量文件、关键字文件 在上一篇中都有哦