在做接口测试时候, 个别接口需要自定义请求的信息头,比如常用的sessionid 。cookie,客户端类型,都需要放在信息头管理其中。

headers 定制请求信息

比如下面这个接口需要 传入信息头
请求地址: https://movie.douban.com/j/search_subjects
请求方法:GET
请求header:

  1. {
  2. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
  3. }

请求参数:

  1. {
  2. "type": "movie",
  3. "tag": "豆瓣高分",
  4. "page_limit": 50,
  5. "page_start": 0
  6. }

上面的接口需要用到请求头信息。不管是get请求还是post请求,封装请求头信息,统一放在headers参数中。
如果上面这个接口不加信息头。会报错。

  1. def test_with_headers():
  2. url = 'https://movie.douban.com/j/search_subjects'
  3. query_data ={
  4. "type": "movie",
  5. "tag": "豆瓣高分",
  6. "page_limit": 50,
  7. "page_start": 0
  8. }
  9. # 发送get请求
  10. r= requests.get(url,params=query_data)
  11. print(f"豆瓣电影请求的状态码: {r.status_code}")
  12. print(f'豆瓣电影接口的返回结果: {r.json()}')
  13. if __name__ == '__main__':
  14. test_with_headers()

代码执行会报错。
image.png
这个接口必须要定制信息头。 定制信息头的方式如下:

  1. # 导入 requests 模块
  2. import requests
  3. def test_with_headers():
  4. url = 'https://movie.douban.com/j/search_subjects'
  5. query_data ={
  6. "type": "movie",
  7. "tag": "豆瓣高分",
  8. "page_limit": 50,
  9. "page_start": 0
  10. }
  11. header={
  12. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
  13. }
  14. # 发送get请求 headers 是固定的值,指定信息头
  15. r= requests.get(url,params=query_data,headers=header)
  16. print(f"豆瓣电影请求的状态码: {r.status_code}")
  17. print(f'豆瓣电影接口的返回结果: {r.json()}')
  18. if __name__ == '__main__':
  19. test_with_headers()

运行可以看到执行的结果。
image.png

所有的请求头中需要什么数据,就放在字典中。 一般做自己公司的接口时,如果需要定制请求头,开发会告诉你的。只需要将数据放在字典中,发送请求的时候传递给 headers 即可。

定制Cookie

个别接口需要传入cookie信息。

接口地址: http://47.100.175.62:3000/user/refresh_token
请求方式:POST
请求数据类型: application/json
请求body : 无
请求头信息:

  1. {
  2. "Cookie":"node_club=s%3A61a7b0aa7bf9484d71441c3f%24%24%24%24.icyhiBztp6Z5HhuC%2BpQdB8b7CX6gH9m%2B4m4peyE8U%2Bg; connect.sid=s%3AXREUgHrRxwW6jxg3YERKZLcFXJ9BngIO.Qj8vmoPTF8DUKy214ZS2s%2BOMxE%2BgYM3SypxOPfVe3Gc"
  3. }

  1. import requests
  2. def test_with_cookies():
  3. url = "http://47.100.175.62:3000/user/refresh_token"
  4. body = {} # body为空
  5. cookie_header ={
  6. "Cookie":"node_club=s%3A61a7b0aa7bf9484d71441c3f%24%24%24%24.icyhiBztp6Z5HhuC%2BpQdB8b7CX6gH9m%2B4m4peyE8U%2Bg; connect.sid=s%3AXREUgHrRxwW6jxg3YERKZLcFXJ9BngIO.Qj8vmoPTF8DUKy214ZS2s%2BOMxE%2BgYM3SypxOPfVe3Gc"
  7. }
  8. # 发送请求 将cookies 信息放入到 headers中
  9. r = requests.post(url,json=body,headers=cookie_header)
  10. print("刷新token 接口返回结果",r.status_code,r.json())
  11. if __name__ == '__main__':
  12. test_with_cookies()

执行结果
image.png


思维导图

python接口测试.png
python接口.xmind

附件

今天上课的代码
testdemo.zip

作业

使用python 实现如下几个接口,
要求能够跑通即可。

  1. """
  2. cnode 社区接口作业
  3. """
  4. import requests
  5. baseurl = ""
  6. token = ""
  7. def test_add_topic():
  8. """
  9. 创建话题
  10. :return:
  11. """
  12. def test_edit_topic():
  13. """
  14. 编辑话题
  15. :return:
  16. """
  17. def test_collect_topic():
  18. """
  19. 收藏话题
  20. :return:
  21. """
  22. def test_uncollect_topic():
  23. """
  24. 取消收藏
  25. :return:
  26. """
  27. def test_reply_topic():
  28. """
  29. 评论话题
  30. :return:
  31. """
  32. def test_up():
  33. """
  34. 点赞
  35. :return:
  36. """
  37. if __name__ == '__main__':
  38. print("现在开始进行cnode社区主要接口流程测试:")
  39. test_add_topic()
  40. test_edit_topic()
  41. test_collect_topic()
  42. test_uncollect_topic()
  43. test_reply_topic()
  44. test_up()

使用简单的方式完成作业。

  1. """
  2. cnode 社区接口作业
  3. """
  4. import requests
  5. # 定义请求地址前缀
  6. baseurl = "http://47.100.175.62:3000/api/v1"
  7. token = "e80fce05-b85c-445e-a26e-66172deffb24"
  8. def test_add_topic():
  9. """
  10. 创建话题
  11. :return:
  12. """
  13. url = baseurl+"/topics"
  14. body_data = {
  15. "accesstoken": token,
  16. "title":"hehehehehehe",
  17. "tab":"ask",
  18. "content":"xxxxxxxxxxxx"
  19. }
  20. r = requests.post(url,json=body_data)
  21. print("新建主题:",r.status_code,r.json())
  22. def test_edit_topic():
  23. """
  24. 编辑话题
  25. :return:
  26. """
  27. url = baseurl + "/topics/update"
  28. body_data = {
  29. "accesstoken": token,
  30. "topic_id":"625cc91ceb0fc111c4a0d584",
  31. "title": "hehehehehehe",
  32. "tab": "ask",
  33. "content": "xxxxxxxxxxxx"
  34. }
  35. r = requests.post(url, json=body_data)
  36. print("编辑主题:", r.status_code, r.json())
  37. def test_collect_topic():
  38. """
  39. 收藏话题
  40. :return:
  41. """
  42. url = baseurl + "/topic_collect/collect"
  43. body_data = {
  44. "accesstoken": token,
  45. "topic_id":"625cc91ceb0fc111c4a0d584"
  46. }
  47. r = requests.post(url, json=body_data)
  48. print("收藏主题:", r.status_code, r.json())
  49. def test_uncollect_topic():
  50. """
  51. 取消收藏
  52. :return:
  53. """
  54. url = baseurl + "/topic_collect/de_collect"
  55. body_data = {
  56. "accesstoken": token,
  57. "topic_id": "625cc91ceb0fc111c4a0d584"
  58. }
  59. r = requests.post(url, json=body_data)
  60. print("取消主题:", r.status_code, r.json())
  61. def test_reply_topic():
  62. """
  63. 评论话题
  64. :return:
  65. """
  66. url = baseurl + "/topic/625cc91ceb0fc111c4a0d584/replies"
  67. body_data = {
  68. "accesstoken": token,
  69. "content": "helloworld"
  70. }
  71. r = requests.post(url, json=body_data)
  72. print("新建评论:", r.status_code, r.json())
  73. def test_up():
  74. """
  75. 点赞
  76. :return:
  77. """
  78. url = baseurl + "/reply/625cca2ceb0fc111c4a0d5e4/ups"
  79. body_data = {
  80. "accesstoken": token
  81. }
  82. r = requests.post(url, json=body_data)
  83. print("为评论点赞:", r.status_code, r.json())
  84. if __name__ == '__main__':
  85. print("现在开始进行cnode社区主要接口流程测试:")
  86. test_add_topic()
  87. test_edit_topic()
  88. test_collect_topic()
  89. test_uncollect_topic()
  90. test_reply_topic()
  91. test_up()