基本概念
接口上下游传参 一般就是值 多个接口串联

上面三个接口 就有很强的关联性
- 注册用户
- 用户登录
- 搜索商品
登录成功之后,会返回 token 值
token 每次登录成功 — 每次都不一样。
在搜索商品的时候 需要使用到 token值。
处理注册接口与登录接口
将注册使用的手机号和 登录使用的手机号 统一放在最外层。
import randomimport requestsimport hashlibdef get_phone():"""生成随机的11位手机号码手机号的前缀; ['13','17','18','15']后面需要随机生成 9位数。:return:"""# 手机号码前缀 从列表中随机选择其中的一个值pre_phone = random.choice(['13','17','18','15'])# 随机的一个值nums = ""for i in range(9):# 每次随机的时候 生成 0-9 之间的一个数字num = random.randint(0,9)# 每次生成一个新的随机值 做一次拼接nums = nums + str(num)# 前缀和后面的值拼接在一起 组成手机号return pre_phone+nums# 将公共使用的手机号码放在最外层phone = get_phone()def test_register():"""注册用户:return:"""url = "http://49.233.108.117:28019/api/v1/user/register"body_data = {"loginName": phone, # 通过调用函数 生成手机号码"password": "123456"}print(f'现在进行注册:用户名{phone},密码为123456')# 发送 json 格式 post请求r = requests.post(url, json=body_data)# 状态码print(r.status_code)print(r.json())def test_login():"""用户登录:return:"""passwd = hashlib.md5('123456'.encode()).hexdigest()url = "http://49.233.108.117:28019/api/v1/user/login"body_data = {"loginName": phone,"passwordMd5": passwd # 使用md5 加密之后的密文进行登录}print(f'现在进行登录: 用户名为 {phone},加密之后的密码 {passwd}')r = requests.post(url, json=body_data)print(r.status_code)print(r.json())def test_search():"""搜索商品:return:"""if __name__ == '__main__':test_register()test_login()
上下游参数关联
上面的注册和登录例子 使用的都是 同一个手机号码。 只需要将手机号码设置到函数外面即可。
如果 上一个接口的出参 作为 下一个接口的入参,这种类型的接口处理起来就需要别的操作的。
代码示例
n = 0def f1():n = 1print(n)def f2():print(n)if __name__ == '__main__':f1() # 1f2() # 0
如果我想将f1 中的值 传递给 f2
可以借助 字典数据类型进行参数的传递
import randomtestdata = {"f1":0}def f1():n = random.randint(100,999)print(n)# 将n的随机值 赋给 字典中的 f1testdata['f1'] = ndef f2():"""我希望在这个函数中引用 f1 函数中生成 随机值:return:"""# 取到的值 与 f1 中的值是一样的print(testdata['f1'])if __name__ == '__main__':f1()f2()
搜索商品
根据接口文档,搜索商品 在 信息头中添加token 值,token是从登录接口中,每次登录,返回的token值都不一样。
搜索商品接口
请求方式 :GET
请求路径:http://49.233.108.117:28019/api/v1/search
请求参数:
{"keyword":"商品名"}
请求headers
{"token":"登录接口返回的token值"}
Python代码
在函数外部定义字典数据类型,在字典中定义 token字段
登录成功之后 更新字典中的token的值。
后面的接口中使用 需要使用到token 直接引用 字典中token。
import randomimport requestsimport hashlib# 设置初始的测试数据,token值默认为Nonetestdata = {"token":None}def get_phone():"""生成随机的11位手机号码手机号的前缀; ['13','17','18','15']后面需要随机生成 9位数。:return:"""# 手机号码前缀 从列表中随机选择其中的一个值pre_phone = random.choice(['13','17','18','15'])# 随机的一个值nums = ""for i in range(9):# 每次随机的时候 生成 0-9 之间的一个数字num = random.randint(0,9)# 每次生成一个新的随机值 做一次拼接nums = nums + str(num)# 前缀和后面的值拼接在一起 组成手机号return pre_phone+nums# 将公共使用的手机号码放在最外层phone = get_phone()def test_register():"""注册用户:return:"""url = "http://49.233.108.117:28019/api/v1/user/register"body_data = {"loginName": phone, # 通过调用函数 生成手机号码"password": "123456"}print(f'现在进行注册:用户名{phone},密码为123456')# 发送 json 格式 post请求r = requests.post(url, json=body_data)# 状态码print(r.status_code)print(r.json())def test_login():"""用户登录:return:"""passwd = hashlib.md5('123456'.encode()).hexdigest()url = "http://49.233.108.117:28019/api/v1/user/login"body_data = {"loginName": phone,"passwordMd5": passwd # 使用md5 加密之后的密文进行登录}print(f'现在进行登录: 用户名为 {phone},加密之后的密码 {passwd}')r = requests.post(url, json=body_data)print(r.status_code)print(r.json())print("登录成功的token值:",r.json()["data"])# 将获取到的token值更新在 字典中testdata['token'] = r.json()['data']def test_search():"""搜索商品:return:"""url = "http://49.233.108.117:28019/api/v1/search"qury_data = {"keyword":"iphone"}header = {"token": testdata['token'] # 引用登录成功之后更新的token值}print(f'现在搜索商品,使用信息头: {header}')r = requests.get(url,params=qury_data,headers=header)print('搜索结果',r.json())if __name__ == '__main__':test_register()test_login()test_search()
也是使用 字典数据类型的方式,将值放在字典,
登录成功之后 更新字典的值
搜索接口中 引用已经更新好的值。
python 类代码
import randomimport requestsimport hashlibdef get_phone():"""生成随机的11位手机号码手机号的前缀; ['13','17','18','15']后面需要随机生成 9位数。:return:"""# 手机号码前缀 从列表中随机选择其中的一个值pre_phone = random.choice(['13','17','18','15'])# 随机的一个值nums = ""for i in range(9):# 每次随机的时候 生成 0-9 之间的一个数字num = random.randint(0,9)# 每次生成一个新的随机值 做一次拼接nums = nums + str(num)# 前缀和后面的值拼接在一起 组成手机号return pre_phone+numsclass TestConfigData:# 类变量的方式获取 手机号PHONE = get_phone()# 设置初始的tokenTOKEN = Noneclass TestShopApi:def test_register(self):"""注册用户:return:"""url = "http://49.233.108.117:28019/api/v1/user/register"body_data = {"loginName": TestConfigData.PHONE, # 通过调用函数 生成手机号码"password": "123456"}print(f'现在进行注册:用户名{TestConfigData.PHONE},密码为123456')# 发送 json 格式 post请求r = requests.post(url, json=body_data)# 状态码print(r.status_code)print(r.json())def test_login(self):"""用户登录:return:"""passwd = hashlib.md5('123456'.encode()).hexdigest()url = "http://49.233.108.117:28019/api/v1/user/login"body_data = {"loginName": TestConfigData.PHONE,"passwordMd5": passwd # 使用md5 加密之后的密文进行登录}print(f'现在进行登录: 用户名为 { TestConfigData.PHONE},加密之后的密码 {passwd}')r = requests.post(url, json=body_data)print(r.status_code)print(r.json())print("登录成功的token值:", r.json()["data"])# 将登录成功的token 值更新到类变量中TestConfigData.TOKEN = r.json()['data']def test_search(self):"""搜索商品:return:"""url = "http://49.233.108.117:28019/api/v1/search"qury_data = {"keyword": "iphone"}header = {# 使用类变量 获取最新的token值"token": TestConfigData.TOKEN}print(f'现在搜索商品,使用信息头: {header}')r = requests.get(url, params=qury_data, headers=header)print('搜索结果', r.json())if __name__ == '__main__':t1 = TestShopApi()t1.test_register()t1.test_login()t1.test_search()
思维导图

