肖sir_高级讲师_request讲解(001)

一、环境的搭建

方式1:dos-==》输入pip install requests进行安装

方式2:直接在python37地下Libsite-packages 下的RequstsLibrary 移一个库

二、请求的三种方式

第一种:
rep =requests.get()
rep =requests.post()
第二种
rep =requests.request(post,get)
第三种
session =requests.Session()#创建一个session对象,作用就是保持会话和关联
rep =session.get()
rep =session.post()

三、构建一个post请求import requests #导入库
# 构建一个post请求:CMS_登录接口
loginJump_url ='http://cms.duoceshi.cn/cms/manage/loginJump.do' #url地址
loginJump_data ={'userAccount': 'admin',
                 'loginPwd': 123456
                 } #当前接口的入参
loginJump_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
#请求的类型 # 通过参数来配置post请求 rep =requests.post(url=loginJump_url,data=loginJump_data,json=loginJump_headers) # # '''根据接口返回状态码''' print (rep)#<Response [200]> print (rep.text) #{"code":"200","msg":"登录成功!","model":{}} print (type(rep.text)) #<type 'unicode'>编码格式类型 js =(rep.json()) #如需要断言需要转换成为js格式,否者无法断言 #print(type(js))(js['msg']==u'登录成功!') if js["msg"] == "登录成功!": print ('OK') else: print ('NO') print (rep.headers) #请求头 print (rep.cookies) #cookies print (rep.status_code) #状态码  


四、构建一个get请求

# # 构建一个get请求
(1)第一种方式
import requests
# 构建一个get请求:
url='http://cms.duoceshi.cn/cms/manage/loginJump.do'
data={'userAccount':'admin','loginPwd':123456}
#loginJump_headers ={'Content-Type': 'application/x-www-form-urlencoded'}
#请求的类型
# get请求可以不要类型
# 在工具中post请求的时候会有一个类型选择
rep =requests.get(url=url,params=data)# 也可以加上json=loginJump_headers
print(rep) #<Response [200]>
print(rep.text) #{"code":"200","msg":"登录成功!","model":{}}
js=rep.json()#转换成为js格式,然后在通过断言方法来实现断言
print(rep.headers) #请求头
print(rep.cookies)#cookie
print(rep.status_code)# 200返回状态
(2)第二种方式
#通过第二种请求方式来构建请求
import requests
url ='http://cms.duoceshi.cn/cms/manage/loginJump.do'
data ={'userAccount': 'admin',
'loginPwd': 123456}
rep =requests.request(method='get',url=url,params=data)
print (rep) #Response [200]>
print (rep.text) #{"code":"200","msg":"登录成功!","model":{}}
=========================================================================
第三种方法:
#第三种方法
# # 练习题目:
# # 将登录接口,用户管理接口,新增用户接口封装在类中且实现断言,
# # # 请求方式:post
import requests #到入 接口库
session= requests.Session() # 创建一session对象来保持上下接口的关联
class Cms_api:
def __init__(self):
pass
def cms_dl(self): #定义一个登录
url ='http://cms.duoceshi.cn/cms/manage/loginJump.do'
data={'userAccount': 'admin','loginPwd': 123456}
headers ={'Content-Type': 'application/x-www-form-urlencoded'}
# dl_rep=requests.post(url=url,data=data,json=headers)
dl_rep =session.post(url=url,data=data,json=headers)
print (dl_rep.text)#{"code":"200","msg":"登录成功!","model":{}}
js =dl_rep.json()
assert js["msg"]=="登录成功!"
def cms_yhgl(self): #定义一个用户管理接口
uerlist_url='http://cms.duoceshi.cn/cms/manage/queryUserList.do'
uerlist_data={'startCreateDate': '','endCreateDate': '','searchValue': '', 'page': 1}
uerlist_headers={'Content-Type': 'application/x-www-form-urlencoded'}
# uerlist_rep=requests.post(url=uerlist_url,data=uerlist_data,json=uerlist_headers)
uerlist_rep=session.post(url=uerlist_url,data=uerlist_data,json=uerlist_headers)
print (uerlist_rep.text) #{"code":"200","msg":"登录成功!","model":{}}
js =uerlist_rep.json() #"code":"200","msg":"查询用户成功!",
if js["msg"]=="查询用户成功!":
print ('查询接口正常')
else:
print ('查询接口失败')
def cms_uers(self): #薪增用户接口
user_url='http://cms.duoceshi.cn/cms/manage/saveSysUser.do'
user_data={'id':'' ,'userName': 'cccc','userSex': 1,'userMobile': 13314333333,
'userEmail': '8834343@qq.com','userAccount': 'cccc', 'loginPwd': 123456,
'confirmPwd': 123456}
user_headers={'Content-Type': 'application/x-www-form-urlencoded'}
# user_rep=requests.post(url=user_url,data=user_data,json=user_headers)
user_rep=session.post(url=user_url,data=user_data,json=user_headers)
print (user_rep.text) #{"code":"400","msg":"保存用户信息失败,登录帐号已存在!","model":{}}
js =user_rep.json()
assert js["msg"]=="保存用户信息失败,登录帐号已存在!"
if __name__ == '__main__':
U=Cms_api() # 创建一个对象
U.cms_dl() #对象调用登录接口
# U.cms_yhgl() #对象调用用户管理接口
U.cms_uers() #对象调用新增用户接口
注意:调用时都要用到登录接口,

============================================================================
1、
# # 要求:
# # 将类中的登录接口和用户管理接口
# # 通过单元测试框架进行封装,且进行选择性调用用例
 
# #    将类中的登录接口和用户管理接口
# # 通过单元测试框架进行封装,且进行选择性调用用例
import unittest #导入单元测试框架
import requests #导入接口库
import time
from requester.HTMLTestRunner3 import HTMLTestRunner#导入生成报告类
class Cms_api(unittest.TestCase): #定义一个类继承单元测试框架中的testcase类
@classmethod
def setUpClass(cls): # cls的类的方法
cls.session=requests.Session()#session是一个全局的变量作用是保持上下接口的会话和关联
@classmethod
def tearDownClass(cls):
print ('类的结束')
def setUp(self):
print ('方法的开始')
def test01(self): #定义一个用例 用例名称要用test
'''登录接口'''
url ='http://cms.duoceshi.cn/cms/manage/loginJump.do'
data={'userAccount': 'admin','loginPwd': 123456}
header={'Content-Type': 'application/x-www-form-urlencoded'}
# rep =requests.post(url=url,data=data,json=header)
rep =self.session.post(url=url,data=data,json=header)
print (rep.text) #打印登录接口的结果
def test02(self):#定义一个用例用户管理接口
urlist_url='http://cms.duoceshi.cn/cms/manage/queryUserList.do'
urlist_data={'startCreateDate':'', 'endCreateDate':''
,'searchValue':'', 'page': 1}
urlist_he={'Content-Type': 'application/x-www-form-urlencoded'}
ur_rep=requests.post(url=urlist_url,data=urlist_data,json=urlist_he)
ur_rep=self.session.post(url=urlist_url,data=urlist_data,json=urlist_he)
print (ur_rep.text) #打印用户管理接口的结果
def tearDown(self):
print ('方法的结束')
def urits(): #创建一个普通函数 作用是容器存放用例
us =unittest.TestSuite() #容器
# us.addTest(Cms_api('test01')) #单个执行用例
us.addTests([Cms_api('test01'),Cms_api('test02')])#执行多条
return us
if __name__ == '__main__':
# #四:自动化搜索+生成测试报告
start_dir = r'C:UsersAdministratorPycharmProjectsuntitled1 equester'
discover = unittest.defaultTestLoader.discover(start_dir=start_dir, pattern='request001*.py') # 中间* 是通配符
# 1.定义生成的测试报告的名称
path= r'C:UsersAdministratorPycharmProjectsuntitled1api'
##报告生成在我们当前路径,copy本地路径
now = time.strftime('%Y-%m-%d-%H-%M-%S')
filename = r'C:UsersAdministratorPycharmProjectsuntitled1 equester' + "\" + str(
now) + 'api_report.html' ###.html'表示
# print(filename)
f = open(filename, 'bw') # 以二进制的方式在...ui.html文件中写入报告模板和测试结果
##w 是写,b 是表示二进制方式写入,
runner = HTMLTestRunner(stream=f, title='接口自动化测试报告', description='用例执行情况如下:')
runner.run(discover)
f.close() # 释放资源、关闭文件
接口测试报告:





2、
'''要求:
#   按照上面的案例,在添加2到3个接口
# 然后选择执行后生成一个测试报告(截图发群里)'''
#
======================================================================
断言方法:
##内容包含接口断言
#接口断言的方法:
#python自带的断言方法:
# if else ... print
# assert False
# assert Ture


# unittest框架中断言方法:
# assertEqual #判断实际结果和预期结果相等
# assertNotEqual()
# assertIn #判断实际结果在预期结果里面


# # 练习题目:
# # 将登录接口封装在类中且给登录接口实现断言请求方式:post
# import requests
# class Cms_api: #定义一个类
# def __init__(self): #定义一个构造函数用来初始化
# pass
# def fun(self): #定义一个方法
# '''封装登录接口'''
# url ='http://129.226.122.199:8080/cms/manage/loginJump.do'
# data={'userAccount': 'admin','loginPwd': 123456}
# headers ={'Content-Type': 'application/x-www-form-urlencoded'}
# rep =requests.post(url=url,data=data,json=headers)
# print (rep.text)
# '''如需要断言则要把类型转换成为字典:js'''
# js =rep.json() #切记如需要断言一定要转换否者无法断言
# assert js["msg"] =="登录成功!"
# if js["msg"] =="登录成功!":
# print ('接口用例正常')
# else:
# print ('接口用例异常')
# if __name__ == '__main__':
# c =Cms_api() #创建一个对象
# c.fun() #实例方法,通过对象调用实例方法
# #








备注:

(1).text 返回的是Beautifulsoup根据猜测的编码方式将content内容编码成字符串。

(2)content 返回的是bytes字节码

(2)text是现成的字符串,.content还要编码,但是.text不是所有时候显示都正常,这是就需要用.content进行手动编码。

===========================================================================
关联接口:
#python 中做关联接口
import requests #接口模块
import re #正则匹配模块
class C_api: #定义一个类
def cs(self): # 省份接口
url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportProvince'
header={'Content-Type': 'application/x-www-form-urlencoded'}
rep=requests.post(url=url,json=header)
#print (rep.text) #拿到了所有的省
r =re.findall('<string>(.+?)</string>',rep.text)
# print type(r) #<type 'list'>
# 在当前路径中匹配一次或者多次对应的值,匹配到后不贪婪
return r
def fun(self): #城市接口
a =self.cs() #方法的传递
c_url='http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getSupportCity'
data={'byProvinceName':a[16]} #通过索引来取省份当中城市接口的入参
c_header={'Content-Type': 'application/x-www-form-urlencoded'}
rep=requests.post(url=c_url,data=data,json=c_header)
print (rep.text)
if __name__ == '__main__':
C =C_api() #创建一个对象
# C.cs()
C.fun() #对象调用城市接口
============================================================================
依赖接口
# # # 通过拿到登录接口的cookie当中下个接口的类型来进行关联操作
import requests#导入接口测试库用来做接口
class Cms_api:
def __init__(self):
pass
def loing_cms(self):#登录接口
url ='http://cms.duoceshi.cn/cms/manage/loginJump.do'
data={'userAccount': 'admin','loginPwd': 123456}
header={'Content-Type': 'application/x-www-form-urlencoded'}
rep =requests.post(url=url,data=data,json=header)
# print rep.content #显示文本信息
print (rep.text) #显示文本信息
# print rep.cookies
#<RequestsCookieJar[<Cookie JSESSIONID=28512418A3FD7E9123D664A70AF9D2B5 for 192.168.254.129/cms/>]>
self.Cookie=str(rep.cookies).split(' ')[1]
'''在类中self定义的全局变量,能够被当前类中所有的方法引用'''
# 将cookies转换成为字符串然后通过分割函数将空格分割,然后通过索引来取对应索引的具体值
def list_cms(self):#用户管理接口
l_url='http://cms.duoceshi.cn/cms/manage/queryUserList.do'
l_data={'startCreateDate':'' ,'endCreateDate':'',
'searchValue':'' ,'page': 1}
headers={'Content-Type': 'application/x-www-form-urlencoded',
'Cookie':self.Cookie}
rep =requests.post(url=l_url,data=l_data,headers=headers)
print (rep.text)
if __name__ == '__main__':
C=Cms_api()
C.loing_cms()
# C.list_cms()

原文地址:https://www.cnblogs.com/xiaolehua/p/14175223.html