python接口测试中—Requests模块的使用

Requests模块的使用

中文文档API:http://2.python-requests.org/en/master/

1、发送get、post请求

import requests
reponse = requests.get("http://www.baidu.com")
reponse = requests.post("http://www.baidu.com")

2、响应的属性

  • 查看响应内容

    • response.text 属性
    • respone.content.decode(‘utf8‘) 属性,字节形式的需要使用decode解码
  • 查看响应码 response.status_code 属性
  • 查看响应头 respone.headers 属性
  • 查看cookie信息 respone.cookies 属性
  • 查看请求方法 respone.request 属性
  • 如何解决充值接口进行充值之前需要先调用登录接口进行登录?

   方法一:可通过创建session对象,自动保存上次请求的cookie信息,可解决鉴权、授权的问题。

import requests
from requests.sessions import Session

# 创建一个session对象(会话)
# 作用:自动保存上次请求的cookie信息
session = Session()

# 注册接口
register_url = "http://ip:port/futureloan/mvc/api/member/register"
register_data = {‘mobilephone‘:‘18814726727‘,‘pwd‘:‘123456‘,‘regname‘:‘一纪‘}
register_response = session.post(url=register_url,data=register_data)
# print(register_response.status_code)
print(register_response.text)

# 登录接口
login_url = "http://ip:port/futureloan/mvc/api/member/login"
login_data = {‘mobilephone‘:‘18814726727‘,‘pwd‘:‘123456‘}
login_response = requests.get(url=login_url,data=login_data)
print(login_response.text)

# 充值接口
rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
rech_data = {‘mobilephone‘:‘18814726727‘,‘amount‘:‘200‘}
rech_response = requests.get(url=rech_url,data=rech_data)
print(rech_response.text)

输出结果为:

   方法二:通过在requsets请求中传入cookies信息,也可解决鉴权、授权的问题。

import requests
# 登陆接口
login_url = "http://ip:port/futureloan/mvc/api/member/login"
login_data = {‘mobilephone‘:‘18814726727‘,‘pwd‘:‘123456‘}
login_response = requests.post(url=login_url,data=login_data)
print(login_response.text)
print(login_response.cookies)
cookies = login_response.cookies

# 充值接口
rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
rech_data = {‘mobilephone‘:‘18814726727‘,‘amount‘:‘200‘}
rech_response = requests.post(url=rech_url,data=rech_data,cookies=cookies)
print(rech_response.text)

输出结果为:

  • heraders参数应用

headers = {
    "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.35 Safari/537.36",
    # "Token":"",
    "cookie":"JSESSIONID=5039A5FD7567C7C78B8180C50D340A5F",   # 请求的cookie信息
    "content-Type":"application/x-www-form-urlencoded"        # post请求格式
}
rech_response = requests.post(url=rech_url,data=rech_data,headers=headers)

3、封装一个自己的requests类

目的:为了根据用例中的请求方法,来决定发起什么类型的请求。

为了输出loggib日志

HttpRequests类用来直接发送请求不记录cookies信息的;而HttpRequestsCookies类可以记录cookies信息。

import requests
class HttpRequests():
    # 直接发送请求而不记录cookies信息的
    def request(self,method,url,params=None,data=None,headers=None,cookies=None,json=None):
        method = method.lower()
        # 判断请求的方法是post还是get
        if method == "post":
            # 判断post请求是否需要使用json来传参(适用于接口参数中有使用json传参的)
            if json:
                # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,json)
                return requests.post(url=url,json=json,headers=headers,cookies=cookies)
            else:
                # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
                return requests.post(url=url, data=data, headers=headers, cookies=cookies)
        elif method == "get":
            # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,params))
            return requests.get(url=url, params=params, headers=headers, cookies=cookies)

class HttpRequestsCookies():
    # 发送请求且记录cookies信息,给下一次使用
    def __init__(self):
        # 创建一个session对象
        self.session = requests.sessions.Session()
    def request(self,method,url,params=None,data=None,headers=None,cookies=None,json=None):
        method = method.lower()
        # 判断请求的方法是post还是get
        if method == "post":
            # 判断post请求是否需要使用json来传参(适用于接口参数中有使用json传参的)
            if json:
                # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
                return self.session.post(url=url,json=json,headers=headers,cookies=cookies)
            else:
                # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,data))
                return self.session.post(url=url, data=data, headers=headers, cookies=cookies)
        elif method == "get":
            # logger.info("正在发送请求,请求地址:{},请求参数:{}".format(url,params))
            return self.session.get(url=url, params=params, headers=headers, cookies=cookies)
    # 断开session连接
    def close(self):
        self.session.close()
  
if __name__ == "__main__":
    r = HttpRequestsCookies()
    # 登录接口
    login_url = "http://ip:port/futureloan/mvc/api/member/login"
    login_data = {‘mobilephone‘: ‘18814726727‘, ‘pwd‘: ‘123456‘}
    response = r.request(‘post‘,url=login_url, data=login_data)
    print(response.text)
    # 充值接口
    rech_url = "http://ip:port/futureloan/mvc/api/member/recharge"
    rech_data = {‘mobilephone‘: ‘18814726727‘, ‘amount‘: ‘200‘}
    response = r.request(‘post‘, url=rech_url, data=rech_data)
    print(response.text)

输出结果为:

原文地址:https://www.cnblogs.com/wanglle/p/11581677.html

时间: 2024-07-31 03:29:42

python接口测试中—Requests模块的使用的相关文章

Python接口测试-使用requests模块发送post请求

本篇主要记录下使用python的requests模块发送post请求的实现代码. #coding=utf-8 import unittest import requests class PostTest(unittest.TestCase): def setUp(self): host = 'https://httpbin.org/' endpoint = 'post' self.url = ''.join([host, endpoint]) def testPost(self): params

Python接口测试,Requests模块讲解:GET、POST、Cookies、Session等

文章最下方有对应课程的视频链接哦^_^ 一.安装.GET,公共方法 二.POST 三.Cookies 四.Session 五.认证 六.超时配置.代理.事件钩子 七.错误异常

Python高手之路【八】python基础之requests模块

1.Requests模块说明 Requests 是使用 Apache2 Licensed 许可证的 HTTP 库.用 Python 编写,真正的为人类着想. Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务. 在Python的世界里,事情不应该这么麻烦. Requests 使用的是 urllib3,因此继承了它的所有特性.Request

Python网络爬虫-requests模块(II)

有些时候,我们在使用爬虫程序去爬取一些用户相关信息的数据(爬取张三“人人网”个人主页数据)时,如果使用之前requests模块常规操作时,往往达不到我们想要的目的,例如: #!/usr/bin/env python # -*- coding:utf-8 -*- import requests if __name__ == "__main__": #张三人人网个人信息页面的url url = 'http://www.renren.com/289676607/profile' #伪装UA

python urllib和requests模块

urllib模块是python自带的,直接调用就好,用法如下: 1 #处理get请求,不传data,则为get请求 2 import urllib 3 from urllib.request import urlopen 4 from urllib.parse import urlencode 5 url='http://127.0.0.1:1990/login' 6 data={"username":"admin","password":123

python网络编程----requests模块

python访问网站可以用标准模块--urllib模块(这里省略),和requests(安装-pip install requests)模块,requests模块是在urllib的基础上进行的封装,比urllib模块功能更强到,易用 import json,requests #发送get请求 url = 'http://api.nnzhp.cn/api/user/stu_info?stu_name=小黑马' req = requests.get(url) #发送get请求 print(req.t

python学习-使用requests模块查询ip地址

思路是,使用requests模块调用阿里的ip接口查询ip归属地 关于requests模块的使用,可以查询相关文档,很强大,本次不做描述 #!/usr/bin/python #coding=utf-8 import requests   def checkip(ip):       URL = 'http://ip.taobao.com/service/getIpInfo.php'     try:         r = requests.get(URL, params=ip, timeout

Python序列化中json模块和pickle模块

1.什么是序列化? 将原本的字典.列表等内容转换成一个字符串的过程就叫做序列化. 比如,我们在python代码中计算的一个数据需要给另外一段程序使用,那我们怎么给? 现在我们能想到的方法就是存在文件里,然后另一个python程序再从文件里读出来. 但是我们都知道,对于文件来说是没有字典这个概念的,所以我们只能将数据转换成字典放到文件中. 你一定会问,将字典转换成一个字符串很简单,就是str(dic)就可以办到了,为什么我们还要学习序列化模块呢? 没错序列化的过程就是从dic 变成str(dic)

python 爬虫 基于requests模块的get请求

需求:爬取搜狗首页的页面数据 import requests # 1.指定url url = 'https://www.sogou.com/' # 2.发起get请求:get方法会返回请求成功的响应对象 response = requests.get(url=url) # 3.获取响应中的数据:text属性作用是可以获取响应对象中字符串形式的页面数据 page_data = response.text # 4.持久化数据 with open("sougou.html","w&