zoukankan      html  css  js  c++  java
  • 肖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()

  • 相关阅读:
    C#动态对象(dynamic)示例(实现方法和属性的动态)
    Mysql学习实践---SELECT INTO的替代方案
    mongoDB学习--建库、删库、插入、更新
    MySQL:日期类型
    Bootstrap-table学习笔记
    12个非常有用的JavaScript技巧
    [C#.Net]判断文件是否被占用的两种方法
    设置实体类型中String类型的属性值为String.Empty
    Jquery基础之DOM操作
    ASP.NET的运行原理与运行机制
  • 原文地址:https://www.cnblogs.com/xiaolehua/p/14175223.html
Copyright © 2011-2022 走看看