pytthon+request接口测试
一、介绍request库
(1)requests是用python语言编写的简单易用的http库,用来做接口测试的库;
(2)接口测试库有哪些?
requests、urllib 、urllib2、urllib3、 httplib 等(最受欢迎的是requests)
(3)安装request库
方式一:
dos下pip:
命令:pip install requests
方式二:
在pycharm中的setting,项目下,点击+ ,添加库
(4)组建一个接口需要参数?
a、请求方式 (post 或get)
b、url (如:http://49.233.201.254:8080/cms/manage/loginJump.do)
c、请求头 (Content-Type:application/x-www-form-urlencoded)
d、请求参数 (userAccount=admin&loginPwd=123456)
二、requests中的运行
1、导入requests 模块
2、运行的三种方法:
(1)第一种方法:
requests.post(url=url,data=data,json=heardes)
查看pos请求的方式:
a、讲解post接口
import requests
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers={'Content-Type':'application/x-www-form-urlencoded'}
data={'userAccount':'admin','loginPwd':'123456'}
dx=requests.post(url=url,data=data,headers=headers)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
print(dx.cookies)#<RequestsCookieJar[<Cookie JSESSIONID=42B07C0CC2198DE122C7E0C7E4341438 for 49.233.201.254/cms/>]>
print(dx.json()) # {'code': '200', 'msg': '登录成功!', 'model': {}}
print(dx.url) #http://49.233.201.254:8080/cms/manage/loginJump.do
print(dx.status_code)#状态码 #200
print(dx.request) # 请求 方式<PreparedRequest [POST]>
print(dx.headers) #请求头
b、get接口请求(get的请求参数在data中用)
get方法:
import requests
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers={'Content-Type':'application/x-www-form-urlencoded'}
data={'userAccount':'admin','loginPwd':'123456'}
dx=requests.get(url=url,params=data,headers=headers)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
print(dx.cookies)#<RequestsCookieJar[<Cookie JSESSIONID=42B07C0CC2198DE122C7E0C7E4341438 for 49.233.201.254/cms/>]>
print(dx.json()) # {'code': '200', 'msg': '登录成功!', 'model': {}}
print(dx.url) #http://49.233.201.254:8080/cms/manage/loginJump.do
print(dx.status_code)#状态码 #200
print(dx.request) # 请求 方式<PreparedRequest [get]>
print(dx.headers) #请求头
方式二:
import requests
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do?userAccount=admin&loginPwd=123456"
headers={'Content-Type':'application/x-www-form-urlencoded'}
dx=requests.get(url=url,headers=headers)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
print(dx.cookies)#<RequestsCookieJar[<Cookie JSESSIONID=42B07C0CC2198DE122C7E0C7E4341438 for 49.233.201.254/cms/>]>
print(dx.json()) # {'code': '200', 'msg': '登录成功!', 'model': {}}
print(dx.url) #http://49.233.201.254:8080/cms/manage/loginJump.do
print(dx.status_code)#状态码 #200
print(dx.request) # 请求 方式<PreparedRequest [get]>
print(dx.headers) #请求头
第二种方法:
requests.request(请求方式,url,参数)
import requests
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers={'Content-Type':'application/x-www-form-urlencoded'}
data={'userAccount':'admin','loginPwd':'123456'}
dx=requests.request(method="post",url=url,data=data,headers=headers)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
print(dx.cookies)#<RequestsCookieJar[<Cookie JSESSIONID=42B07C0CC2198DE122C7E0C7E4341438 for 49.233.201.254/cms/>]>
print(dx.json()) # {'code': '200', 'msg': '登录成功!', 'model': {}}
print(dx.url) #http://49.233.201.254:8080/cms/manage/loginJump.do
print(dx.status_code)#状态码 #200
print(dx.request) # 请求 方式<PreparedRequest [POST]>
print(dx.headers) #请求头
(2)
a、get方法 (参数是在data中)
import requests
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers={'Content-Type':'application/x-www-form-urlencoded'}
data={'userAccount':'admin','loginPwd':'123456'}
dx=requests.request(method="get",url=url,headers=headers,params=data)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
print(dx.cookies)#<RequestsCookieJar[<Cookie JSESSIONID=42B07C0CC2198DE122C7E0C7E4341438 for 49.233.201.254/cms/>]>
print(dx.json()) # {'code': '200', 'msg': '登录成功!', 'model': {}}
print(dx.url) #http://49.233.201.254:8080/cms/manage/loginJump.do
print(dx.status_code)#状态码 #200
print(dx.request) # 请求 方式<PreparedRequest [POST]>
print(dx.headers) #请求头
b、get方法 (参数是在url上)
import requests
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do?userAccount=admin&loginPwd=123456"
headers={'Content-Type':'application/x-www-form-urlencoded'}
dx=requests.request(method="get",url=url,headers=headers)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
print(dx.cookies)#<RequestsCookieJar[<Cookie JSESSIONID=42B07C0CC2198DE122C7E0C7E4341438 for 49.233.201.254/cms/>]>
print(dx.json()) # {'code': '200', 'msg': '登录成功!', 'model': {}}
print(dx.url) #http://49.233.201.254:8080/cms/manage/loginJump.do
print(dx.status_code)#状态码 #200
print(dx.request) # 请求 方式<PreparedRequest [get]>
print(dx.headers) #请求头
第三种方法:
requests.Session() 方法可以保持会话关系
import requests
s=requests.Session()
url=r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers={'Content-Type':'application/x-www-form-urlencoded'}
data={'userAccount':'admin','loginPwd':'123456'}
dx=s.post(url=url,data=data,headers=headers)
print(dx.text) #打印响应文本 #{"code":"200","msg":"登录成功!","model":{}}
url2=r"http://49.233.201.254:8080/cms/manage/queryUserList.do"
headers2={'Content-Type':'application/x-www-form-urlencoded'}
data2={'startCreateDate':'',
'endCreateDate':'','searchValue':'','page':'1'}
dx2=s.post(url=url2,data=data2,headers=headers2)
print(dx2.text)
二、保持会话关系
(1)
requests.Session()依赖
import requests
s=requests.Session()
class cms(object):
def __init__(self):
pass
def dl(self):
url = r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'userAccount': 'admin', 'loginPwd': '123456'}
dx = s.post(url=url, data=data, headers=headers)
print(dx.text)
def yh(self):
url2 = r"http://49.233.201.254:8080/cms/manage/queryUserList.do"
headers2={'Content-Type':'application/x-www-form-urlencoded'}
data2={'startCreateDate':'',
'endCreateDate':'','searchValue':'','page':'1'}
dx2=s.post(url=url2,data=data2,headers=headers2)
print(dx2.text)
if __name__ == '__main__':
dx3=cms()
dx3.dl()
dx3.yh()
(2)靠cookie依赖
import requests
class cms(object):
def __init__(self):
pass
def dl(self):
url = r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'userAccount': 'admin', 'loginPwd': '123456'}
dx = requests.post(url=url, data=data, headers=headers)
print(dx.text)
c=str(dx.cookies) #<RequestsCookieJar[<Cookie JSESSIONID=C20E2C43D01214B7B69683B3412C3E7C for 49.233.201.254/cms/>]>
self.cookies=c.split(" ")[1]
print(self.cookies) #JSESSIONID=4B9FAB90CD3C28329D52AB839255D181
def yh(self):
url2 = r"http://49.233.201.254:8080/cms/manage/queryUserList.do"
headers2={'Content-Type':'application/x-www-form-urlencoded'
,"Cookie":self.cookies }
data2={'startCreateDate':'',
'endCreateDate':'','searchValue':'','page':'1'}
dx2=requests.post(url=url2,data=data2,headers=headers2)
print(dx2.text)
if __name__ == '__main__':
dx3=cms()
dx3.dl()
dx3.yh()
添加到请求头中
通过self 进行变量
断言:if 、assert
案例1:(if语句)
if 断言,先将响应体转换成json格式,在判断
import requests
url = r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'userAccount': 'admin', 'loginPwd': '123456'}
dx = requests.post(url=url, data=data, headers=headers)
print(dx.text)
wb=dx.json() #转换成json格式
if wb["msg"]=="登录成功!":
print(" 通过")
else:
print("不通过")
案例2:aseert 失败就报异常,成功运行下一个
import requests
url = r"http://49.233.201.254:8080/cms/manage/loginJump.do"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {'userAccount': 'admin', 'loginPwd': '123456'}
dx = requests.post(url=url, data=data, headers=headers)
print(dx.text)
wb=dx.json()
assert wb["msg"]=="登录 成功!"
print("执行通过")
关联接口:
省份接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince
城市接口:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity
第一步:填写接口
import requests
url = r"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
dx = requests.get(url=url, headers=headers)
print(dx.text)
csurl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity"
data2={"byProvinceName":"浙江"}
headers2= {'Content-Type': 'application/x-www-form-urlencoded'}
print(dx.text)
案例2: 通过re正则表达式提取
import requests
import re
class gl(object):
def __init__(self):
pass
def dl(self):
url = r"http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
dx = requests.get(url=url, headers=headers)
print(dx.text)
self.sf=re.findall('<string>(.+?)</string>',dx.text)
def cs(self):
csurl="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity"
data2={"byProvinceName":self.sf[2]}
headers2= {'Content-Type': 'application/x-www-form-urlencoded'}
dx = requests.post(url=csurl,data=data2 ,headers=headers2)
print(dx.text)
if __name__ == '__main__':
dxw=gl()
dxw.dl()
dxw.cs()
token 讲解:
案例:
网站:http://shop.duoceshi.com/login?redirect=%2Fdashboard
第一个code接口:http://manage.duoceshi.com/auth/code
第二个登录接口:http://manage.duoceshi.com/auth/login
登录成功以后响应体中生成token:
后面所有的接口请求头中都要有这个token值,
第三个buid 接口:
登录接口参数:{
接口请求的类型:Content-Type:application/json
详解:
import requests
s=requests.Session()
class Ys(object):
def __init__(self):
pass
def ui(self):
url1=r"http://shop.duoceshi.com/apis/auth/code"
headers={"Content-Type": "application/json"}
d1=s.get(url=url1,headers=headers)
print(d1.text)
self.js=d1.json()["uuid"] #code-key1499ab2b752344ad81d8bdc6c0b0ef44
# print(self.js)
def login(self):
url2=r"http://shop.duoceshi.com/apis/auth/login"
data2={"username":"admin",
"password":"JxvvqYDCfvkimfvk0+rX0eNW19tWNsv7uBs+6TVt3TAoeIkqKbqa35eW5j9ZhKqVU4lNtMLAst+TDJ0sYnJSxA==",
"code":"8888",
"uuid":self.js}
headers={"Content-Type": "application/json"}
d2=s.post(url=url2,json=data2,headers=headers)
print(d2.text)
self.js2=d2.json()["token"]
def biud(self):
url3=r"http://shop.duoceshi.com/apis/api/menus/build"
headers = {"Content-Type": "application/json",
"Authorization":self.js2
}
d3=s.get(url=url3,headers=headers)
print(d3.text)
if __name__ == '__main__':
dx=Ys()
dx.ui()
dx.login()
dx.biud()
1、uiid 接口的响应体提取出来,作为下一个接口的请求参数 (关联接口)
2、登录接口的响应体token,提取出来,作为下一个接口的请求头 headers
案例2:re正则表达式(self引用变量)
import requests
import re
s=requests.Session()
class Ys(object):
def __init__(self):
pass
def ui(self):
url1=r"http://shop.duoceshi.com/apis/auth/code"
headers={"Content-Type": "application/json"}
d1=s.get(url=url1,headers=headers)
print(d1.text)
u=re.findall('"uuid":"(.+?)"',d1.text) #['code-key61ab4c9d0ded402eba33ca228f881391']
self.j="".join(u) #code-key18db0d902455456bbfa6771befce369f
print(self.j)
def login(self):
url2=r"http://shop.duoceshi.com/apis/auth/login"
data2={"username":"admin",
"password":"JxvvqYDCfvkimfvk0+rX0eNW19tWNsv7uBs+6TVt3TAoeIkqKbqa35eW5j9ZhKqVU4lNtMLAst+TDJ0sYnJSxA==",
"code":"8888",
"uuid":self.j}
headers={"Content-Type": "application/json"}
d2=s.post(url=url2,json=data2,headers=headers)
print(d2.text)
u = re.findall('"token":"(.+?)"', d2.text)
self.j1 = "".join(u) # code-key18db0d902455456bbfa6771befce369f
print(self.j1)
def biud(self):
url3=r"http://shop.duoceshi.com/apis/api/menus/build"
headers = {"Content-Type": "application/json",
"Authorization":self.j1
}
d3=s.get(url=url3,headers=headers)
print(d3.text)
if __name__ == '__main__':
dx=Ys()
dx.ui()
dx.login()
dx.biud()
b、
import requests
import re
s=requests.Session()
class Ys(object):
def __init__(self):
pass
def ui(self):
url1=r"http://shop.duoceshi.com/apis/auth/code"
headers={"Content-Type": "application/json"}
d1=s.get(url=url1,headers=headers)
print(d1.text)
u=re.findall('"uuid":"(.+?)"',d1.text) #['code-key61ab4c9d0ded402eba33ca228f881391']
j="".join(u) #code-key18db0d902455456bbfa6771befce369f
return j
def login(self):
url2=r"http://shop.duoceshi.com/apis/auth/login"
data2={"username":"admin",
"password":"JxvvqYDCfvkimfvk0+rX0eNW19tWNsv7uBs+6TVt3TAoeIkqKbqa35eW5j9ZhKqVU4lNtMLAst+TDJ0sYnJSxA==",
"code":"8888",
"uuid":self.ui()}
headers={"Content-Type": "application/json"}
d2=s.post(url=url2,json=data2,headers=headers)
print(d2.text)
u = re.findall('"token":"(.+?)"', d2.text)
j1 = "".join(u) # code-key18db0d902455456bbfa6771befce369f
return j1
def biud(self):
url3=r"http://shop.duoceshi.com/apis/api/menus/build"
headers = {"Content-Type": "application/json",
"Authorization":self.login()
}
d3=s.get(url=url3,headers=headers)
print(d3.text)
if __name__ == '__main__':
dx=Ys()
dx.ui()
dx.login()
dx.biud()