性能测试工具之Pycurl 模块学习(连接速度测试等,,,)

一、pycurl 模块安装

anaconda3中已经内置了pycurl。】

  • windows命令行 python3.X环境下安装:
    pip install pycurl

  • 测试 pycurl 是否安装成功,命令行执行
    python
    import pycurl
    print(pycurl.version)

二、pycurl 简介

  • CURL 是一个基于URL进行数据传输的命令行工具,使用C语言编写
  • CURL支持 HTTPHTTPSFTPTELNETFILELDAP 等常见的网络传输协议;
  • CURL 特点:速度快(听说比urllib快,虽然还是不知道是多快……)、体积小效率高;
  • libcurl 是对应的 C语言库;而 pycurl 则是对应的 python库

pycurl是用 C语言 编写的 URL 库, 我想,curl 就是这么来的吧~】

三、pycurl 属性和方法

1、常用操作说明

import pycurl
# 创建一个 curl 对象
c = pycurl.Curl()                      

import certifi                       
# windows 系统访问 HTTPS/HTTP,需要证书
c.setopt(pycurl.CAINFO, certifi.where())   

# 操作设置
c.setopt(pycurl.URL, url)              # 设置要访问的URL,如:url = 'http://www.baidu.com'
c.setopt(pycurl.USERAGENT, User_Agent)  # 配置HTTP请求头,模拟浏览器,如User_Agent = 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Mobile Safari/537.36'
c.setopt(pycurl.CONNECTTIMEOUT, 2)      # 设置连接的等待时间,此处为2,设置为0则不等待
c.setopt(pycurl.TIMEOUT, 300)           # 设置请求超时时间
c.setopt(pycurl.NOPROGRESS, 0)          # 设置是否屏蔽下载的进度条,非0则为屏蔽
c.setopt(pycurl.MAXREDIRS, 5)           # 指定HTTP最大重定向次数
c.setopt(pycurl.COOKIEFILE, cookie_file)   # 读取 cookie
c.seropt(pycurl.COOKIEJAR, cookie_file)    # 设置 cookie
c.setopt(pycurl.HEADERFUNCTION, getheader) # 将返回的 HTTP HEADER 定向到回调函数 getheader
c.setopt(pycurl.WRITEFUNCTION, getbody)    # 将返回的内容定向到回调函数 getbody
c.setopt(pycurl.WRITEHEADER, fileobj)      # 将返回的 HTTP HEADER 定向到 fileobj 文件对象
c.setopt(pycurl.WRITEDATA, fileobj)        # 将返回的 HTML 内容定向到 fileobj 文件对象

# 执行以上操作   (执行完perform()操作后才能获取到info)
c.perform()              

# 获取信息操作                        
c.getinfo(pycurl.NAMELOOKUP_TIME)    # DNS(域名)解析所需时间
c.getinfo(pycurl.CONNECT_TIME)        # (与远程服务器)建立连接所需的时间
c.getinfo(pycurl.PRETRANSFER_TIME)    # 从建立连接到准备传输所需时间
c.getinfo(pycurl.REDIRECT_TIME)       # 重定向所需时间
c.getinfo(pycurl.EFFECTIVE_URL)       # 获取网页多次跳转后的最终地址 
c.getinfo(pycurl.HTTP_CODE)           # 返回的HTTP状态码
c.getinfo(pycurl.TOTAL_TIME)          # 传输结束所需的时间
c.getinfo(pycurl.HEADER_SIZE)         # 头部大小
c.getinfo(pycurl.REQUEST_SIZE)        # 请求大小
c.getinfo(pycurl.SIZE_UPLOAD)         # 上传数据包的大小
c.getinfo(pycurl.SIZE_DOWNLOAD)       # 下载数据包的大小
c.getinfo(pycurl.SPEED_UPLOAD)        # 上传速度
c.getinfo(pycurl.SPEED_DOWNLOAD)      # 下载速度
c.getinfo(pycurl.CONTENT_TYPE)        # 内容类型 

注意 getinfo() 操作应该在 perform() 操作之后,否则打印不出来想要的信息。
需要使用上面的 定向 操作,需要导入 StringIO 类和 BytesIO 类(属于io模块下的类)

2、实例1_简单操作

完整程序主要包含**四个步骤**:

  • 创建curl实例
  • 设置:setopt操作
  • 执行:perform
  • 获取信息:getinfo

简单的实例如下所示——

import pycurl
import certifi
c = pycurl.Curl()                         # 创建curl对象
c.setopt(pycurl.CAINFO,certifi.where())   # 设置允许访问HTTP/HTTPS的证书
url = 'https://www.douban.com'
c.setopt(pycurl.URL,url)                  # 设置访问的网站URL (此处以豆瓣网站为例)
c.perform()                               # 执行操作
http_code = c.getinfo(pycurl.HTTP_CODE)   # 获取网页响应的状态码
print('响应的状态码:', http_code)

运行结果——
性能测试工具之Pycurl 模块学习(连接速度测试等,,,)_第1张图片
……(省略的一堆打印结果)和——

响应的状态码: 200

3、实例2_使用定向操作

import pycurl,certifi
try:                                     # python3 使用的StringIO和BytesIO导入方式
    from io import BytesIO
except ImportError:                      # 为防止 导入出现问题,使用try,except操作
    from io import StringIO as BytesIO       

c = pycurl.Curl()         
c.setopt(pycurl.CAINFO,certifi.where())
b = BytesIO()                            # 实例化BytesIO类
url = 'https://www.douban.com'
c.setopt(pycurl.URL,url)
c.setopt(pycurl.WRITEDATA,b)             # 将HTML内容定向传入文件对象b
c.perform()

HTTP_CODE = c.getinfo(pycurl.HTTP_CODE)
HTTP_total_time = c.getinfo(pycurl.TOTAL_TIME)

print(b.getvalue().decode('utf-8'))      # 定向返回源代码
print('http响应状态:',HTTP_CODE)
print('传输结束时间:',HTTP_total_time)

运行结果——
性能测试工具之Pycurl 模块学习(连接速度测试等,,,)_第2张图片
……

在这里插入图片描述

待续——
……

注:参考链接1、参考链接2、参考链接3、DNS解析

你可能感兴趣的:(python自动化测试)