接口串联

函数之间不能直接传递数据,使用字典格式

定义函数,函数内的变量只能在函数内部有效。
可以通过字典格式的数据来进行参数传递

  1. import random
  2. # 定义一个字典
  3. test_data = {
  4. "num": 0 # num 默认值为0
  5. }
  6. def test_f1():
  7. # 生成一个随机0-10的数据
  8. n = random.randint(0,100)
  9. print(f'生成随机值 {n}')
  10. # 将生成的值n 放在字典的num字段中
  11. test_data["num"] = n # 上游设置参数
  12. # 现在test_data的值
  13. print(test_data)
  14. def test_f2():
  15. # f2 我想使用f1中的token,不能直接引用
  16. # 通过字典中的值来引用
  17. print(f'f2里面使用f1中的n的值:{test_data["num"]} ') # test_data["num"]} 下游引用参数

这里因为要同时执行这两个函数,才能进行上下游传递参数。
运行的时候,在文件上执行。
image.png

运行完成之后,可以看到对应的执行结果。
image.png

实例

根据上面的这个测试样例,现在将新丰商城的登录成功之后的token值进行上下游传参。

上游设置参数

  1. """
  2. 接口地址: http://49.233.108.117:28019/swagger-ui.html#/
  3. """
  4. import requests
  5. base_url = "http://49.233.108.117:28019"
  6. # 定义测试数据
  7. testdata={
  8. "token":None, # token 作为参数传递的token值
  9. "good_id": 0, # 最为商品id 上下游传参
  10. }
  11. def test_register():
  12. """
  13. 测试注册用户
  14. :return:
  15. """
  16. register_url = base_url+"/api/v1/user/register"
  17. jsondata = {
  18. "loginName": "13310001229",
  19. "password": "123456"
  20. }
  21. # 发送json格式数据
  22. r = requests.post(url=register_url,json=jsondata)
  23. # 打印状态码
  24. print(r.status_code)
  25. # 打印返回结果
  26. print(r.json())
  27. # 添加对应的断言
  28. assert r.status_code == 200
  29. assert r.json()["message"] == 'SUCCESS'
  30. def test_login():
  31. """
  32. 测试登录
  33. :return:
  34. """
  35. login_url = base_url+"/api/v1/user/login"
  36. login_data = {
  37. "loginName": "13310001229",
  38. "passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"
  39. }
  40. r = requests.post(url=login_url,json=login_data)
  41. print(r.status_code)
  42. print(r.json())
  43. # 登录成功之后,将token 值从返回结果中提取出来
  44. tokendata = r.json()["data"]
  45. # 将值更新到 字典中
  46. testdata["token"] = tokendata

image.png

下游接口引用变量

image.png
下游中使用到token的地方 统一使用
testdata[“token”] 的方式来访问。

  1. """
  2. 接口地址: http://49.233.108.117:28019/swagger-ui.html#/
  3. """
  4. import requests
  5. base_url = "http://49.233.108.117:28019"
  6. # 定义测试数据
  7. testdata={
  8. "token":None, # token 作为参数传递的token值
  9. "good_id": 0, # 最为商品id 上下游传参
  10. }
  11. def test_register():
  12. """
  13. 测试注册用户
  14. :return:
  15. """
  16. register_url = base_url+"/api/v1/user/register"
  17. jsondata = {
  18. "loginName": "13310001229",
  19. "password": "123456"
  20. }
  21. # 发送json格式数据
  22. r = requests.post(url=register_url,json=jsondata)
  23. # 打印状态码
  24. print(r.status_code)
  25. # 打印返回结果
  26. print(r.json())
  27. # 添加对应的断言
  28. assert r.status_code == 200
  29. assert r.json()["message"] == 'SUCCESS'
  30. def test_login():
  31. """
  32. 测试登录
  33. :return:
  34. """
  35. login_url = base_url+"/api/v1/user/login"
  36. login_data = {
  37. "loginName": "13310001229",
  38. "passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"
  39. }
  40. r = requests.post(url=login_url,json=login_data)
  41. print(r.status_code)
  42. print(r.json())
  43. # 登录成功之后,将token 值从返回结果中提取出来
  44. tokendata = r.json()["data"]
  45. # 将值更新到 字典中
  46. testdata["token"] = tokendata
  47. def test_search():
  48. search_url = base_url+"/api/v1/search"
  49. # 定义信息头
  50. header_data ={
  51. "token":testdata["token"]
  52. }
  53. # 请求参数
  54. query_data={
  55. "keyword":"iphone"
  56. }
  57. # 发送get请求 params 请求参数, headers 信息头
  58. r = requests.get(url=search_url,params=query_data,headers=header_data)
  59. # 状态码
  60. print(r.status_code)
  61. # 返回结果
  62. print(r.json())
  63. print(r.request.headers)
  64. def test_add_cart():
  65. add_cart_url = base_url+"/api/v1/shop-cart"
  66. header_data = {
  67. "token": testdata["token"],
  68. }
  69. post_data = {
  70. "goodsCount": 1,
  71. "goodsId": 10278
  72. }
  73. # 发送post请求
  74. r = requests.post(url=add_cart_url,headers=header_data,json=post_data)
  75. print(r.status_code)
  76. print(r.json())
  77. # 查看信息头 ,请求body 数据 r.request.body
  78. print(r.request.headers,r.request.body)

运行🎈🎈

在文件上右键 —执行。
image.png

可以看到执行结果
登录生成的token
image.png
搜索中使用到token
image.png
添加购物车使用token
image.png

附件

今天项目代码
2022-05-20-code.zip

作业

  1. 注册接口 使用随机的手机号码
  2. 登录和注册使用同一个手机号
  3. test_search 搜索接口中从返回的结果中随机选择一个商品id 作为上游参数
  4. test_add_cart 添加购物车接口 中使用上游的商品id
  5. 每个接口根据业务添加对应的断言。

参考答案

  1. """
  2. 接口地址: http://49.233.108.117:28019/swagger-ui.html#/
  3. """
  4. import requests
  5. import random
  6. from common.utils import get_phone
  7. base_url = "http://49.233.108.117:28019"
  8. # 定义测试数据
  9. testdata={
  10. "token":None, # token 作为参数传递的token值
  11. "good_id": 0, # 最为商品id 上下游传参
  12. }
  13. # 获取手机号码
  14. phone = get_phone()
  15. def test_register():
  16. """
  17. 测试注册用户
  18. :return:
  19. """
  20. register_url = base_url+"/api/v1/user/register"
  21. jsondata = {
  22. "loginName": phone,
  23. "password": "123456"
  24. }
  25. # 发送json格式数据
  26. r = requests.post(url=register_url,json=jsondata)
  27. # 打印状态码
  28. print(r.status_code)
  29. # 打印返回结果
  30. print(r.json())
  31. # 添加对应的断言
  32. assert r.status_code == 200
  33. assert r.json()["message"] == 'SUCCESS'
  34. def test_login():
  35. """
  36. 测试登录
  37. :return:
  38. """
  39. login_url = base_url+"/api/v1/user/login"
  40. login_data = {
  41. "loginName": phone,
  42. "passwordMd5": "E10ADC3949BA59ABBE56E057F20F883E"
  43. }
  44. r = requests.post(url=login_url,json=login_data)
  45. print(r.status_code)
  46. print(r.json())
  47. # 添加断言
  48. assert r.status_code == 200
  49. assert r.json()["message"] == 'SUCCESS'
  50. # 登录成功之后,将token 值从返回结果中提取出来
  51. tokendata = r.json()["data"]
  52. # 将值更新到 字典中
  53. testdata["token"] = tokendata
  54. def test_search():
  55. search_url = base_url+"/api/v1/search"
  56. # 定义信息头
  57. header_data ={
  58. "token":testdata["token"]
  59. }
  60. # 请求参数
  61. query_data={
  62. "keyword":"iphone"
  63. }
  64. # 发送get请求 params 请求参数, headers 信息头
  65. r = requests.get(url=search_url,params=query_data,headers=header_data)
  66. # 状态码
  67. print(r.status_code)
  68. # 返回结果
  69. print(r.json())
  70. print(r.request.headers)
  71. assert r.json()["resultCode"] == 200
  72. assert r.json()["message"] == 'SUCCESS'
  73. # 随机选择商品id
  74. allgoods = r.json()["data"]["list"]
  75. # 循环列表
  76. goodsids = []
  77. for good in allgoods:
  78. # 打印每个商品的id
  79. print(good["goodsId"])
  80. # 每次循环,将取到的商品id 放到列表中
  81. goodsids.append(good["goodsId"])
  82. # 循环完成之后,随机选择一个
  83. gid = random.choice(goodsids)
  84. # 将商品id作为上游接口
  85. testdata["good_id"] = gid
  86. def test_add_cart():
  87. add_cart_url = base_url+"/api/v1/shop-cart"
  88. header_data = {
  89. "token": testdata["token"],
  90. }
  91. post_data = {
  92. "goodsCount": 1,
  93. "goodsId": testdata["good_id"]
  94. }
  95. # 发送post请求
  96. r = requests.post(url=add_cart_url,headers=header_data,json=post_data)
  97. print(r.status_code)
  98. print(r.json())
  99. # 查看信息头 ,请求body 数据 r.request.body
  100. print(r.request.headers,r.request.body)
  101. # 添加断言
  102. assert r.json()["resultCode"] == 200
  103. assert r.json()["message"] == 'SUCCESS'