接口串联
函数之间不能直接传递数据,使用字典格式
定义函数,函数内的变量只能在函数内部有效。
可以通过字典格式的数据来进行参数传递
import random# 定义一个字典test_data = {"num": 0 # num 默认值为0}def test_f1():# 生成一个随机0-10的数据n = random.randint(0,100)print(f'生成随机值 {n}')# 将生成的值n 放在字典的num字段中test_data["num"] = n # 上游设置参数# 现在test_data的值print(test_data)def test_f2():# f2 我想使用f1中的token,不能直接引用# 通过字典中的值来引用print(f'f2里面使用f1中的n的值:{test_data["num"]} ') # test_data["num"]} 下游引用参数
这里因为要同时执行这两个函数,才能进行上下游传递参数。
运行的时候,在文件上执行。
运行完成之后,可以看到对应的执行结果。
实例
根据上面的这个测试样例,现在将新丰商城的登录成功之后的token值进行上下游传参。
上游设置参数
"""接口地址: http://49.233.108.117:28019/swagger-ui.html#/"""import requestsbase_url = "http://49.233.108.117:28019"# 定义测试数据testdata={"token":None, # token 作为参数传递的token值"good_id": 0, # 最为商品id 上下游传参}def test_register():"""测试注册用户:return:"""register_url = base_url+"/api/v1/user/register"jsondata = {"loginName": "13310001229","password": "123456"}# 发送json格式数据r = requests.post(url=register_url,json=jsondata)# 打印状态码print(r.status_code)# 打印返回结果print(r.json())# 添加对应的断言assert r.status_code == 200assert r.json()["message"] == 'SUCCESS'def test_login():"""测试登录:return:"""login_url = base_url+"/api/v1/user/login"login_data = {"loginName": "13310001229","passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"}r = requests.post(url=login_url,json=login_data)print(r.status_code)print(r.json())# 登录成功之后,将token 值从返回结果中提取出来tokendata = r.json()["data"]# 将值更新到 字典中testdata["token"] = tokendata

下游接口引用变量

下游中使用到token的地方 统一使用
testdata[“token”] 的方式来访问。
"""接口地址: http://49.233.108.117:28019/swagger-ui.html#/"""import requestsbase_url = "http://49.233.108.117:28019"# 定义测试数据testdata={"token":None, # token 作为参数传递的token值"good_id": 0, # 最为商品id 上下游传参}def test_register():"""测试注册用户:return:"""register_url = base_url+"/api/v1/user/register"jsondata = {"loginName": "13310001229","password": "123456"}# 发送json格式数据r = requests.post(url=register_url,json=jsondata)# 打印状态码print(r.status_code)# 打印返回结果print(r.json())# 添加对应的断言assert r.status_code == 200assert r.json()["message"] == 'SUCCESS'def test_login():"""测试登录:return:"""login_url = base_url+"/api/v1/user/login"login_data = {"loginName": "13310001229","passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"}r = requests.post(url=login_url,json=login_data)print(r.status_code)print(r.json())# 登录成功之后,将token 值从返回结果中提取出来tokendata = r.json()["data"]# 将值更新到 字典中testdata["token"] = tokendatadef test_search():search_url = base_url+"/api/v1/search"# 定义信息头header_data ={"token":testdata["token"]}# 请求参数query_data={"keyword":"iphone"}# 发送get请求 params 请求参数, headers 信息头r = requests.get(url=search_url,params=query_data,headers=header_data)# 状态码print(r.status_code)# 返回结果print(r.json())print(r.request.headers)def test_add_cart():add_cart_url = base_url+"/api/v1/shop-cart"header_data = {"token": testdata["token"],}post_data = {"goodsCount": 1,"goodsId": 10278}# 发送post请求r = requests.post(url=add_cart_url,headers=header_data,json=post_data)print(r.status_code)print(r.json())# 查看信息头 ,请求body 数据 r.request.bodyprint(r.request.headers,r.request.body)
运行🎈🎈
在文件上右键 —执行。
可以看到执行结果
登录生成的token
搜索中使用到token
添加购物车使用token
附件
今天项目代码
2022-05-20-code.zip
作业
- 注册接口 使用随机的手机号码
- 登录和注册使用同一个手机号
- test_search 搜索接口中从返回的结果中随机选择一个商品id 作为上游参数
- test_add_cart 添加购物车接口 中使用上游的商品id
- 每个接口根据业务添加对应的断言。
参考答案
"""接口地址: http://49.233.108.117:28019/swagger-ui.html#/"""import requestsimport randomfrom common.utils import get_phonebase_url = "http://49.233.108.117:28019"# 定义测试数据testdata={"token":None, # token 作为参数传递的token值"good_id": 0, # 最为商品id 上下游传参}# 获取手机号码phone = get_phone()def test_register():"""测试注册用户:return:"""register_url = base_url+"/api/v1/user/register"jsondata = {"loginName": phone,"password": "123456"}# 发送json格式数据r = requests.post(url=register_url,json=jsondata)# 打印状态码print(r.status_code)# 打印返回结果print(r.json())# 添加对应的断言assert r.status_code == 200assert r.json()["message"] == 'SUCCESS'def test_login():"""测试登录:return:"""login_url = base_url+"/api/v1/user/login"login_data = {"loginName": phone,"passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"}r = requests.post(url=login_url,json=login_data)print(r.status_code)print(r.json())# 添加断言assert r.status_code == 200assert r.json()["message"] == 'SUCCESS'# 登录成功之后,将token 值从返回结果中提取出来tokendata = r.json()["data"]# 将值更新到 字典中testdata["token"] = tokendatadef test_search():search_url = base_url+"/api/v1/search"# 定义信息头header_data ={"token":testdata["token"]}# 请求参数query_data={"keyword":"iphone"}# 发送get请求 params 请求参数, headers 信息头r = requests.get(url=search_url,params=query_data,headers=header_data)# 状态码print(r.status_code)# 返回结果print(r.json())print(r.request.headers)assert r.json()["resultCode"] == 200assert r.json()["message"] == 'SUCCESS'# 随机选择商品idallgoods = r.json()["data"]["list"]# 循环列表goodsids = []for good in allgoods:# 打印每个商品的idprint(good["goodsId"])# 每次循环,将取到的商品id 放到列表中goodsids.append(good["goodsId"])# 循环完成之后,随机选择一个gid = random.choice(goodsids)# 将商品id作为上游接口testdata["good_id"] = giddef test_add_cart():add_cart_url = base_url+"/api/v1/shop-cart"header_data = {"token": testdata["token"],}post_data = {"goodsCount": 1,"goodsId": testdata["good_id"]}# 发送post请求r = requests.post(url=add_cart_url,headers=header_data,json=post_data)print(r.status_code)print(r.json())# 查看信息头 ,请求body 数据 r.request.bodyprint(r.request.headers,r.request.body)# 添加断言assert r.json()["resultCode"] == 200assert r.json()["message"] == 'SUCCESS'
