使用Python进行接口测试
python 做接口测试
用到模块 requests
安装模块 python -m pip install requests
发送一个请求
import requests
url = \'http://url\'
# POST请求
register_url = url + \'/register\'
data = {\'username\':\'aaaa123\',\'password\':\'123123\',\'password_confirmation\':\'123123\'}
r = requests.post(register_url,data)
result = r.json()#如果返回的是json格式,就用这个
result = r.text#如果返回的是文本格式,则用这个
print(result)
带有头部信息的请求
login_url = url + \'/login\'
data = {\'username\':\'aaaa123\',\'password\':\'123123\'}
r = requests.post(login_url,data)
result = r.json()
get_token = \'Bearer \' + str(result[\'token\'])
# 带有头部信息
create_url = url + \'/api/tasks\'
data = {\'title\':\'abcdefg\',\'desc\':\'sgasdgasdg\'}
my_head = {\'Authorization\':get_token}
r = requests.post(create_url,data,headers=my_head)
print(r.json())
# HTTP请求类型
# get类型
r = requests.get(\'https://github.com/timeline.json\')
# post类型
r = requests.post("http://m.ctrip.com/post")
# put类型
r = requests.put("http://m.ctrip.com/put")
# delete类型
r = requests.delete("http://m.ctrip.com/delete")
# head类型
r = requests.head("http://m.ctrip.com/head")
# options类型
r = requests.options("http://m.ctrip.com/get")
# 获取响应内容
print(r.content) #以字节的方式去显示,中文显示为字符
print(r.text) #以文本的方式去显示
#URL传递参数
payload = {\'keyword\': \'香港\', \'salecityid\': \'2\'}
r = requests.get("http://m.ctrip.com/webapp/tourvisa/visa_list", params=payload)
print(r.url) #示例为http://m.ctrip.com/webapp/tourvisa/visa_list?salecityid=2&keyword=香港
#获取/修改网页编码
r = requests.get(\'https://github.com/timeline.json\')
print (r.encoding)
#json处理
r = requests.get(\'https://github.com/timeline.json\')
print(r.json()) # 需要先import json
# 定制请求头
url = \'http://m.ctrip.com\'
headers = {\'User-Agent\' : \'Mozilla/5.0 (Linux; Android 4.2.1; en-us; Nexus 4 Build/JOP40D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19\'}
r = requests.post(url, headers=headers)
print (r.request.headers)
#复杂post请求
url = \'http://m.ctrip.com\'
payload = {\'some\': \'data\'}
r = requests.post(url, data=json.dumps(payload)) #如果传递的payload是string而不是dict,需要先调用dumps方法格式化一下
# post多部分编码文件
url = \'http://m.ctrip.com\'
files = {\'file\': open(\'report.xls\', \'rb\')}
r = requests.post(url, files=files)
# 响应状态码
r = requests.get(\'http://m.ctrip.com\')
print(r.status_code)
# 响应头
r = requests.get(\'http://m.ctrip.com\')
print (r.headers)
print (r.headers[\'Content-Type\'])
print (r.headers.get(\'content-type\')) #访问响应头部分内容的两种方式
# Cookies
url = \'http://example.com/some/cookie/setting/url\'
r = requests.get(url)
r.cookies[\'example_cookie_name\'] #读取cookies
url = \'http://m.ctrip.com/cookies\'
cookies = dict(cookies_are=\'working\')
r = requests.get(url, cookies=cookies) #发送cookies
#设置超时时间
r = requests.get(\'http://m.ctrip.com\', timeout=0.001)
#设置访问代理
proxies = {
"http": "http://10.10.1.10:3128",
"https": "http://10.10.1.100:4444",
}
r = requests.get(\'http://m.ctrip.com\', proxies=proxies)
#如果代理需要用户名和密码,则需要这样:
proxies = {
"http": "http://user:pass@10.10.1.10:3128/",
}
响应内容
r.encoding #获取当前的编码
r.encoding = \'utf-8\' #设置编码
r.text #以encoding解析返回内容。字符串方式的响应体,会自动根据响应头部的字符编码进行解码。
r.content #以字节形式(二进制)返回。字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩。
r.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
r.status_code #响应状态码
r.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read()
r.ok # 查看r.ok的布尔值便可以知道是否登陆成功
#*特殊方法*#
r.json() #Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
r.raise_for_status() #失败请求(非200响应)抛出异常
- 自动带上cookie
s = requests.Session()
s.auth = (\'auth\',\'passwd\')
s.headers = {\'key\':\'value\'}
r = s.get(\'url\')
r1 = s.get(\'url1\')