接口串联
函数之间不能直接传递数据,使用字典格式
定义函数,函数内的变量只能在函数内部有效。
可以通过字典格式的数据来进行参数传递
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 requests
base_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 == 200
assert 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 requests
base_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 == 200
assert 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
def 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.body
print(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 requests
import random
from common.utils import get_phone
base_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 == 200
assert 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 == 200
assert r.json()["message"] == 'SUCCESS'
# 登录成功之后,将token 值从返回结果中提取出来
tokendata = r.json()["data"]
# 将值更新到 字典中
testdata["token"] = tokendata
def 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"] == 200
assert r.json()["message"] == 'SUCCESS'
# 随机选择商品id
allgoods = r.json()["data"]["list"]
# 循环列表
goodsids = []
for good in allgoods:
# 打印每个商品的id
print(good["goodsId"])
# 每次循环,将取到的商品id 放到列表中
goodsids.append(good["goodsId"])
# 循环完成之后,随机选择一个
gid = random.choice(goodsids)
# 将商品id作为上游接口
testdata["good_id"] = gid
def 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.body
print(r.request.headers,r.request.body)
# 添加断言
assert r.json()["resultCode"] == 200
assert r.json()["message"] == 'SUCCESS'