dcsxlh

导航

 

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()
posted on 2025-05-27 10:27  多测师_肖sir  阅读(87)  评论(0)    收藏  举报