接口串联
在做一些有业务关联的接口时 需要接口之间进行数据传递。
这两个接口在做测试的时候,需要接口串联, 每次生成的topic_id值都不一样,需要动态从上游接口中提取出来传递给下游接口。
函数内部定义的变量
# 定义变量aa = 10def f1():a = 20 # 函数内部定义变量 aprint(f"f1-a {a}")if __name__ == '__main__':f1()
代码执行结果为20
因为f1 函数内部 a=20 执行函数的时候,如果函数内部定义的有变量,函数在运行的过程中,会优先使用函数内部定义的变量。 所以执行结果为20。
# 定义变量aa = 10def f1():a = 20 # 函数内部定义变量 a 这个 a的值 只在 函数内有效。print(f"f1-a {a}")print(f"文件中的a的值 {a}") # 10if __name__ == '__main__':f1()
# 定义变量aa = 10def f1():a = 20 # 函数内部定义变量 a 这个 a的值 只在 函数内有效。print(f"f1-a {a}")def f2():print(f"a的值为 {a}")# print(f"文件中的a的值 {a}") # 10if __name__ == '__main__':f1()f2() # 10 取文件中定义的a的值
字典值跨函数使用
# 随机函数import random# 定义字典 可以通过修改 key 对应的valuedata = {"rn": None}def f1():# 随机生成一个数字num = random.randint(1,100000)# 修改字典中 rn字段的值data["rn"] = numprint(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())# 从返回结果中提起 话题的idtid = 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())# 从结果中提取 评论idrid = r.json()["reply_id"]# 将提取到的值更新到字典中test_data["reply_id"] = riddef 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_phoneimport 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 numdef 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 randomdef 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 randomdef 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()
这样做 每次都要读写文件 比较麻烦。
