在做接口测试时候, 个别接口需要自定义请求的信息头,比如常用的sessionid 。cookie,客户端类型,都需要放在信息头管理其中。
headers 定制请求信息
比如下面这个接口需要 传入信息头
请求地址: https://movie.douban.com/j/search_subjects
请求方法:GET
请求header:
{"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"}
请求参数:
{"type": "movie","tag": "豆瓣高分","page_limit": 50,"page_start": 0}
上面的接口需要用到请求头信息。不管是get请求还是post请求,封装请求头信息,统一放在headers参数中。
如果上面这个接口不加信息头。会报错。
def test_with_headers():url = 'https://movie.douban.com/j/search_subjects'query_data ={"type": "movie","tag": "豆瓣高分","page_limit": 50,"page_start": 0}# 发送get请求r= requests.get(url,params=query_data)print(f"豆瓣电影请求的状态码: {r.status_code}")print(f'豆瓣电影接口的返回结果: {r.json()}')if __name__ == '__main__':test_with_headers()
代码执行会报错。
这个接口必须要定制信息头。 定制信息头的方式如下:
# 导入 requests 模块import requestsdef test_with_headers():url = 'https://movie.douban.com/j/search_subjects'query_data ={"type": "movie","tag": "豆瓣高分","page_limit": 50,"page_start": 0}header={"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"}# 发送get请求 headers 是固定的值,指定信息头r= requests.get(url,params=query_data,headers=header)print(f"豆瓣电影请求的状态码: {r.status_code}")print(f'豆瓣电影接口的返回结果: {r.json()}')if __name__ == '__main__':test_with_headers()
运行可以看到执行的结果。
所有的请求头中需要什么数据,就放在字典中。 一般做自己公司的接口时,如果需要定制请求头,开发会告诉你的。只需要将数据放在字典中,发送请求的时候传递给 headers 即可。
定制Cookie
个别接口需要传入cookie信息。
接口地址: http://47.100.175.62:3000/user/refresh_token
请求方式:POST
请求数据类型: application/json
请求body : 无
请求头信息:
{"Cookie":"node_club=s%3A61a7b0aa7bf9484d71441c3f%24%24%24%24.icyhiBztp6Z5HhuC%2BpQdB8b7CX6gH9m%2B4m4peyE8U%2Bg; connect.sid=s%3AXREUgHrRxwW6jxg3YERKZLcFXJ9BngIO.Qj8vmoPTF8DUKy214ZS2s%2BOMxE%2BgYM3SypxOPfVe3Gc"}
import requestsdef test_with_cookies():url = "http://47.100.175.62:3000/user/refresh_token"body = {} # body为空cookie_header ={"Cookie":"node_club=s%3A61a7b0aa7bf9484d71441c3f%24%24%24%24.icyhiBztp6Z5HhuC%2BpQdB8b7CX6gH9m%2B4m4peyE8U%2Bg; connect.sid=s%3AXREUgHrRxwW6jxg3YERKZLcFXJ9BngIO.Qj8vmoPTF8DUKy214ZS2s%2BOMxE%2BgYM3SypxOPfVe3Gc"}# 发送请求 将cookies 信息放入到 headers中r = requests.post(url,json=body,headers=cookie_header)print("刷新token 接口返回结果",r.status_code,r.json())if __name__ == '__main__':test_with_cookies()
执行结果
思维导图
附件
今天上课的代码
testdemo.zip
作业
使用python 实现如下几个接口,
要求能够跑通即可。
"""cnode 社区接口作业"""import requestsbaseurl = ""token = ""def test_add_topic():"""创建话题:return:"""def test_edit_topic():"""编辑话题:return:"""def test_collect_topic():"""收藏话题:return:"""def test_uncollect_topic():"""取消收藏:return:"""def test_reply_topic():"""评论话题:return:"""def test_up():"""点赞:return:"""if __name__ == '__main__':print("现在开始进行cnode社区主要接口流程测试:")test_add_topic()test_edit_topic()test_collect_topic()test_uncollect_topic()test_reply_topic()test_up()
使用简单的方式完成作业。
"""cnode 社区接口作业"""import requests# 定义请求地址前缀baseurl = "http://47.100.175.62:3000/api/v1"token = "e80fce05-b85c-445e-a26e-66172deffb24"def test_add_topic():"""创建话题:return:"""url = baseurl+"/topics"body_data = {"accesstoken": token,"title":"hehehehehehe","tab":"ask","content":"xxxxxxxxxxxx"}r = requests.post(url,json=body_data)print("新建主题:",r.status_code,r.json())def test_edit_topic():"""编辑话题:return:"""url = baseurl + "/topics/update"body_data = {"accesstoken": token,"topic_id":"625cc91ceb0fc111c4a0d584","title": "hehehehehehe","tab": "ask","content": "xxxxxxxxxxxx"}r = requests.post(url, json=body_data)print("编辑主题:", r.status_code, r.json())def test_collect_topic():"""收藏话题:return:"""url = baseurl + "/topic_collect/collect"body_data = {"accesstoken": token,"topic_id":"625cc91ceb0fc111c4a0d584"}r = requests.post(url, json=body_data)print("收藏主题:", r.status_code, r.json())def test_uncollect_topic():"""取消收藏:return:"""url = baseurl + "/topic_collect/de_collect"body_data = {"accesstoken": token,"topic_id": "625cc91ceb0fc111c4a0d584"}r = requests.post(url, json=body_data)print("取消主题:", r.status_code, r.json())def test_reply_topic():"""评论话题:return:"""url = baseurl + "/topic/625cc91ceb0fc111c4a0d584/replies"body_data = {"accesstoken": token,"content": "helloworld"}r = requests.post(url, json=body_data)print("新建评论:", r.status_code, r.json())def test_up():"""点赞:return:"""url = baseurl + "/reply/625cca2ceb0fc111c4a0d5e4/ups"body_data = {"accesstoken": token}r = requests.post(url, json=body_data)print("为评论点赞:", r.status_code, r.json())if __name__ == '__main__':print("现在开始进行cnode社区主要接口流程测试:")test_add_topic()test_edit_topic()test_collect_topic()test_uncollect_topic()test_reply_topic()test_up()

