接口串联
在做一些有业务关联的接口时 需要接口之间进行数据传递。
这两个接口在做测试的时候,需要接口串联, 每次生成的topic_id值都不一样,需要动态从上游接口中提取出来传递给下游接口。
函数内部定义的变量
# 定义变量a
a = 10
def f1():
a = 20 # 函数内部定义变量 a
print(f"f1-a {a}")
if __name__ == '__main__':
f1()
代码执行结果为20
因为f1 函数内部 a=20 执行函数的时候,如果函数内部定义的有变量,函数在运行的过程中,会优先使用函数内部定义的变量。 所以执行结果为20。
# 定义变量a
a = 10
def f1():
a = 20 # 函数内部定义变量 a 这个 a的值 只在 函数内有效。
print(f"f1-a {a}")
print(f"文件中的a的值 {a}") # 10
if __name__ == '__main__':
f1()
# 定义变量a
a = 10
def f1():
a = 20 # 函数内部定义变量 a 这个 a的值 只在 函数内有效。
print(f"f1-a {a}")
def f2():
print(f"a的值为 {a}")
# print(f"文件中的a的值 {a}") # 10
if __name__ == '__main__':
f1()
f2() # 10 取文件中定义的a的值
字典值跨函数使用
# 随机函数
import random
# 定义字典 可以通过修改 key 对应的value
data = {
"rn": None
}
def f1():
# 随机生成一个数字
num = random.randint(1,100000)
# 修改字典中 rn字段的值
data["rn"] = num
print(f'f1 生成随机数字 {num}')
def f2():
"""
需要将 f1函数中生成 随机数字 传递过来,进行使用。
:return:
"""
print(f'f2 使用f1生成的随机数字:{data["rn"]}')
if __name__ == '__main__':
f1()
f2()
字典类型中数据 是可变类型。主要就是通过使用这种可变方式的特性,在上游接口中更改字典中对应字段的值,在下游接口中引用字典字段的值。 通过字典数据的方式来进行参数串联。
接口中的参数串联
利用字典的特性,实现CNnode 主要接口的参数串联。
"""
cnode 社区接口作业
"""
import requests
# 定义请求地址前缀
baseurl = "http://47.100.175.62:3000/api/v1"
token = "e80fce05-b85c-445e-a26e-66172deffb24"
# 预先定义字典格式的数据
test_data={
"topic_id":"", # 需要进行上下游传参的字段 初始值为 空字符串
"reply_id":"" # 评论id 需要进行上下游传参, 初始值设置为 空字符
}
def test_add_topic():
"""
创建话题
:return:
"""
url = baseurl+"/topics"
body_data = {
"accesstoken": token,
"title":"hehehehehehe",
"tab":"ask",
"content":"xxxxxxxxxxxx"
}
r = requests.post(url,json=body_data)
print("新建主题:",r.status_code,r.json())
# 从返回结果中提起 话题的id
tid = r.json()["topic_id"]
# 将提取出来的值tid 更新到 外边定义的字典中 test_data[”topic_id”]
test_data["topic_id"] = tid # 上游更新值
def test_edit_topic():
"""
编辑话题
:return:
"""
url = baseurl + "/topics/update"
body_data = {
"accesstoken": token,
# "topic_id":"625cc91ceb0fc111c4a0d584",
"topic_id": test_data["topic_id"] , # 通过字典 topic_id 字段引用最新的值。
"title": "hehehehehehe",
"tab": "ask",
"content": "xxxxxxxxxxxx"
}
r = requests.post(url, json=body_data)
print("编辑主题:", r.status_code, r.json())
def test_collect_topic():
"""
收藏话题
:return:
"""
url = baseurl + "/topic_collect/collect"
body_data = {
"accesstoken": token,
# "topic_id":"625cc91ceb0fc111c4a0d584"
"topic_id": test_data["topic_id"]
}
r = requests.post(url, json=body_data)
print("收藏主题:", r.status_code, r.json())
def test_uncollect_topic():
"""
取消收藏
:return:
"""
url = baseurl + "/topic_collect/de_collect"
body_data = {
"accesstoken": token,
# "topic_id": "625cc91ceb0fc111c4a0d584"
"topic_id": test_data["topic_id"]
}
r = requests.post(url, json=body_data)
print("取消主题:", r.status_code, r.json())
def test_reply_topic():
"""
评论话题
:return:
"""
url = baseurl + "/topic/625cc91ceb0fc111c4a0d584/replies"
body_data = {
"accesstoken": token,
"content": "helloworld"
}
r = requests.post(url, json=body_data)
print("新建评论:", r.status_code, r.json())
# 从结果中提取 评论id
rid = r.json()["reply_id"]
# 将提取到的值更新到字典中
test_data["reply_id"] = rid
def test_up():
"""
点赞
:return:
"""
# url = baseurl + "/reply/625cca2ceb0fc111c4a0d5e4/ups"
# 引用变量
url = baseurl + f'/reply/{test_data["reply_id"]}/ups'
body_data = {
"accesstoken": token
}
r = requests.post(url, json=body_data)
print("为评论点赞:", r.status_code, r.json())
if __name__ == '__main__':
print("现在开始进行cnode社区主要接口流程测试:")
test_add_topic()
test_edit_topic()
test_collect_topic()
test_uncollect_topic()
test_reply_topic()
test_up()
新丰商城中接口串联
# 导入生成的手机号
from common.utils import generate_phone
import requests
# 1. 设置手机号 后面函数中使用手机号 都从这里获取
phone = generate_phone()
# 定义字典
test_data = {
"token":None, # 存放token
"goodsid":None
}
# 用户注册
def test_register():
url = "http://49.233.108.117:28019/api/v1/user/register"
body_data = {
"loginName": phone,
"password": "123456"
}
print(f"使用数据进行注册:{body_data}")
r = requests.post(url,json=body_data)
# 打印请求的信息头
print("注册的请求头", r.request.headers)
# 打印返回结果
print("注册结果", r.json())
# 用户登录
def test_login():
url = "http://49.233.108.117:28019/api/v1/user/login"
body_data = {
"loginName": phone,
"passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"
}
print(f'使用数据进行登录 {body_data}')
r = requests.post(url,json=body_data)
# 打印出响应状态码 服务器返回结果
print("登录结果返回结果",r.status_code,r.json())
# 登陆成功 之后将token 设置变量 r.json()["data"] 返回结果中的token值
test_data["token"] = r.json()["data"] # 更改testdata["token"] 的值
def test_search():
url = "http://49.233.108.117:28019/api/v1/search"
query_data={
"keyword":"iphone"
}
token_header={
"token": test_data["token"] # 引用testdata["token"] 值
}
print('查询结果中的请求头',token_header)
r = requests.get(url,params=query_data,headers=token_header)
print('查询结果: ',r.json())
if __name__ == '__main__':
# 注册和登录的时候需要使用到同一个手机号码
test_register()
test_login()
test_search()
其他上下游传参方式
使用return返回值
# 随机函数
import random
# # 定义字典 可以通过修改 key 对应的value
# data = {
# "rn": 0
# }
def f1():
# 随机生成一个数字
num = random.randint(1,100000)
# 修改字典中 rn字段的值
# data.append(num)
print(f'f1 生成随机数字 {num}')
return num
def f2():
"""
需要将 f1函数中生成 随机数字 传递过来,进行使用。
:return:
"""
num = f1()
print(f'f2 使用f1生成的随机数字:{num}')
def f3():
"""
需要将 f1函数中生成 随机数字 传递过来,进行使用。
:return:
"""
num = f1()
print(f'f3 使用f1生成的随机数字:{num}')
if __name__ == '__main__':
f1()
f2()
f3()
使用global 关键字
global 可以将局部变量设置为全局变量
# 随机函数
import random
def f1():
global num # 将局部变量设置全局变量
# 随机生成一个数字
num = random.randint(1,100000)
print(f'f1 生成随机数字 {num}')
def f2():
"""
需要将 f1函数中生成 随机数字 传递过来,进行使用。
:return:
"""
print(f'f2 使用f1生成的随机数字:{num}')
if __name__ == '__main__':
f1()
f2()
global 可以将局部变量设置为全局变量。
缺点就是 你在写代码引用变量的时候,不会有代码提示, 容易写错。
通过文件存储
将参数写入文件中。
# 随机函数
import random
def f1():
# 随机生成一个数字
num = random.randint(1,100000)
# 将数据写入到 文件中
with open('./data.txt',mode='w') as file:
file.write(str(num))
print(f'f1 生成随机数字 {num}')
def f2():
"""
需要将 f1函数中生成 随机数字 传递过来,进行使用。
:return:
"""
with open('./data.txt',mode='r') as file:
num = file.read()
print(f'f2 使用f1生成的随机数字:{num}')
if __name__ == '__main__':
f1()
f2()
这样做 每次都要读写文件 比较麻烦。
最后
建议大家使用字典的方式。