让http服务人类(python之requests做接口测试)

让http服务人类

最优雅的http请求库(python的http请求库有很多,比如urllib2,urllib3,httplib)。

requests库简介

requests库是基于urllib3库封装的第三方http请求库,在python中requests应用最广泛的应该属网络爬虫方面,对于测试来说,我们对于requests的应用主要是接口测试方面。

实例(1)创建一个请求:

httpbin:这个网站专门是为了给http做测试用的.

import requests         #导入requests模块
‘‘‘
号称最优雅的http请求库
‘‘‘
#创建一个http请求:
res_get = requests.get(‘http://httpbin.org/get‘)     #get请求
res_post = requests.post(‘http://httpbin.org/post‘, data={‘key‘: ‘value‘})  #post请求
res_put = requests.put(‘http://httpbin.org/put‘, data={‘key‘: ‘value‘})    #put请求
res_delete = requests.delete(‘http://httpbin.org/delete‘)              #delete请求
res_head = requests.head(‘http://httpbin.org/head‘)                    #head请求
res_options = requests.options(‘http://httpbin.org/options‘)               #options请求
?
#将所有响应结果放入列表中
res_list = [res_get, res_post, res_put, res_delete, res_head, res_options]
?#打印出所有的响应结果
for i in range(len(res_list)):
   print(f‘\n第{i + 1}个http请求的响应结果:‘, res_list[i].text)
 

实例(2)传递url参数:

import requests?‘‘‘1、带参数的get请求
get请求使用字典的形式传参
‘‘‘
parm = {‘key1‘: ‘value1‘, ‘key2‘: ‘value2‘}
res_get = requests.get(‘http://172.25.8.167:1080/get‘, params=parm)
print(res_get.text, ‘\n请求url为:‘, res_get.url)
?
‘‘‘
2、当传入字典的值为null时,也会将字典的键传入url中
‘‘‘
parm = {‘key1‘: ‘value1‘, ‘key2‘: ‘‘}
res_get = requests.get(‘http://172.25.8.167:1080/get‘, params=parm)
print(res_get.text, ‘\n请求url为:‘, res_get.url)
?
‘‘‘
3、传入字典的值可以是一个列表
‘‘‘
parm = {‘key1‘: ‘value1‘, ‘key2‘: [‘value2‘, ‘value3‘]}
res_get = requests.get(‘http://172.25.8.167:1080/get‘, params=parm)
print(res_get.text, ‘\n请求url为:‘, res_get.url)

实例(3)post请求传递参数:

import requests
import json
?
‘‘‘
1、post请求
以字典的方式传入参数
‘‘‘
parm = {‘key‘: ‘value‘}
res_post = requests.post(‘http://172.25.8.167:1080/post‘, data=parm)
print(res_post.text)
?
‘‘‘
2、post请求
以元祖列表的方式传入参数,也可以直接以元祖方式传入
‘‘‘
parm = [(‘key1‘, ‘value1‘), (‘key2‘, ‘value3‘)]
res_post = requests.post(‘http://172.25.8.167:1080/post‘, data=parm)
print(res_post.text)
?
‘‘‘
3、post请求
以json方式传入参数
‘‘‘
url = ‘http://172.25.8.167:1080/post‘
payload = {‘some‘: ‘data‘}
res_post = requests.post(url, data=json.dumps(payload))
print(res_post.text)
?
‘‘‘
4、post请求
将文件以参数的方式传入
‘‘‘
url = ‘http://172.25.8.167:1080/post‘
payload = {‘file‘: open(‘report.xls‘, ‘rb‘)}
res_post = requests.post(url, data=json.dumps(payload))
print(res_post.text)

实例4:了解requests响应处理机制:

import requests
?
parm = [(‘key1‘, ‘value1‘), (‘key2‘, ‘value3‘)]
res_post = requests.post(‘http://172.25.8.167:1080/post‘, data=parm)
print("\n以text格式处理返回响应结果", res_post.text)
print("\n以json格式处理返回响应结果", res_post.json(), "\n")
print("\n以二进制流格式处理返回响应结果", res_post.content, "\n")
print("\n响应的URL:", res_post.url, "\n")
print("\n响应的cookies:", res_post.cookies, "\n")
print("\n响应的编码:", res_post.encoding, "\n")
print("\n响应的http状态响应码:", res_post.status_code, "\n")
print("\n响应的header:", res_post.headers, "\n")
 

实例5:封装(用于接口测试):

import requests
?
class requests_run:
    ‘‘‘
    封装requests,用于接口测试
    ‘‘‘
    def requests_post(self, url, data, header):
        if header != None:
            res = requests.post(url=url, headers=header, data=data)
        else:
            res = requests.post(url=url, data=data)
        return res
?
    def requests_get(self, url, data, header=None):
        if header != None:
            res = requests.get(url=url, headers=header, params=data)
        else:
            res = requests.get(url=url, params=data)
        return res
?
    def requests_main(self, url, method, data=None, header=None):
        if method == ‘post‘:
            res = self.requests_post(url, data, header)
        else:
            res = self.requests_get(url, data, header)
         return res

    class Http_Request:
        ‘‘‘
        更简洁的封装
        ‘‘‘
        @staicmethod
        def http_request(self,url, data, method, header=None):
            if method = ‘post‘:
                res = requests.post(url, data, header)
            else:
                res = requests.get(url, data, header)
            return res

实例5:结合Excel实现简单的接口自动化

from requests_demon4 import RequestsRun
from with_excel import with_excel  #之前写的一个python读取excel的类
import json
?
csyl = with_excel(‘requests_test.xlsx‘,‘Sheet1‘)
csyl_new = csyl.setnull_todict()
?
for i in csyl_new:
    print(f‘第{i["id"]}测试用例开始执行‘)
    # print(i["url"], i["method"], i["data"])
    url = i["url"]
    method = i["method"]
    if i["data"] == ‘‘:
        data = None
        res = RequestsRun().requests_main(url, method)
    else:
        data = eval(i["data"])
        res = RequestsRun().requests_main(url, method, data)
    print(f‘第{i["id"]}测试用例结果为:\n‘, json.dumps(res.json(), ensure_ascii=False, sort_keys=True, indent=2))

附:python读取Excel的操作

 1 import pandas as pd
 2
 3 path = ‘test.xlsx‘
 4 sheet_name = ‘test_data‘
 5 ‘‘‘
 6 pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None)
 7 io:很明显, 是excel文件的路径+名字字符串
 8 sheet_name:返回指定的sheet
 9 如果将sheet_name指定为None,则返回全表
10 如果需要返回多个表, 可以将sheet_name指定为一个列表, 例如[‘sheet1‘, ‘sheet2‘]
11 name:如果没有表头, 可用此参数传入列表做表头
12 header:指定数据表的表头,默认值为0, 即将第一行作为表头
13 index_col:用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。一般可以设定index_col=False指的是pandas不适用第一列作为行索引。
14 usecols:读取指定的列, 也可以通过名字或索引值
15 ‘‘‘
16
17
18
19 class with_excel:
20
21     #构造函数,调用类时就运行
22     def __init__(self, path=None, sheet_name=None):
23         if path and sheet_name:
24             self.path = path
25             self.sheet_name = sheet_name
26         else:
27             self.path = ‘test.xlsx‘
28             self.sheet_name = ‘test_data‘
29         self.data = self.open_excel()
30
31     #获取表格数据
32     def open_excel(self):
33         df = pd.read_excel(self.path, self.sheet_name)
34         return df
35
36     #获取表中单元格行数
37     def get_lines(self):
38         lines = self.data.shape[0]#获取了最后一行的行数
39         return lines
40
41     #获取一个单元格的内容(获取多行的内容)
42     def get_cell_data(self, row, col):
43         return self.data.iloc[row, col]
44
45     #将表格数据转字典
46     def to_dict(self):
47         test_data = []
48         for i in self.data.index.values:  # 获取与表头对应的字典数据
49             row_data = self.data.loc[i].to_dict()
50             test_data.append(row_data)
51         return test_data

总结:

利用python来做接口自动化,这里的过程只是练手代码而已,如果将这些代码都熟练的掌握了,那咱们就有做python接口自动化的基础了。

 

原文地址:https://www.cnblogs.com/fccyccf/p/11645081.html

时间: 2024-10-10 16:30:26

让http服务人类(python之requests做接口测试)的相关文章

python 使用 requests 做 http 请求

1. get import requests # 最简单的get请求 r = requests.get(url) print(r.status_code) print(r.json()) # url 中?key=value&key=value r = requests.get(url, params=params) # form 表单 params = {"username":"name", "password":"passw0

使用robotframework做接口测试之一——准备工作

最近发现做接口测试的朋友越来越多了,打算写一个系列的rf+requests做接口测试(主要是Http接口)的文档,可以帮助新入门的同学对接口测试有个大概的了解,同时也是敦促自己做总结的一种手段.希望经验丰富的大神路过时,如发现我文档中的不足,提出中肯的批评及更好的解决思路.以期共同进步. 一.环境准备 1)默认已经安装robotframework2)默认已经安装requests库3)默认已经安装并成功导入RequestsLibrary4)会用抓包工具,fiddler或Charles都可 用这个库

49.Python使用requests包进行HTTP交互方法详解

简介 使用方法 传递QUERY参数 定制请求头 填写cookie 填充请求体 处理响应对象 重定向与访问历史 超时 Session对象 根据响应获取请求 SSL认证 HTTP认证 基本认证 摘要认证 代理场景 HTTPHTTPS代理 SOCKS代理 简介 Python的HTTP包有urllib.urllib2.httplib等,但是都需要了解较多的HTTP原理才能编码,借助requests包可以在较高的抽象层次上完成HTTP交互过程的开发.安装requests使用pip install requ

如何利用cURL和python对服务端和web端进行接口测试

工具描述 cURL是利用URL语法在命令行方式下工作的文件传输工具,是开源爱好者编写维护的免费工具,支持包括Windows.Linux.Mac等数十个操作系统,最新版本为7.27.0,但是我推荐大家使用7.26.0,从这里可以下载7.26.0版本. 以下是官方介绍的翻译: cURL是一个使用URL语法来传输数据的命令行工具,支持DICT,FILE,FTP,FTPS,GOPHER,HTTP,HTTPS,IMAP,IMAPS,LDAP,LDAPS,POP3,POP3S,RTMP,RTSP,SCP,S

Python使用requests時遇到Failed to establish a new connection

再寫Zeppelin的CLI工具的時候https://github.com/del680202/zdairi 遇到了開起太多connection這樣一個錯誤 requests.exceptions.ConnectionError: HTTPConnectionPool(host='xxxxx', port=xxxxx): Max retries exceeded with url: /api/notebook/2BG5CTGN7/paragraph/20160407-173136_8279522

Python代写,Python作业代写,代写Python,代做Python(微信leechanx)

Python代写,Python作业代写,代写Python,代做Python(微信leechanx) Redis:Cannot assign requested address的解决办法 客户端频繁的连服务器,由于每次连接都在很短的时间内结束,导致很多的TIME_WAIT,以至于用光了可用的端口号,所以新的连接没办法绑定端口,即"Cannot assign requestedaddress".是客户端的问题不是服务器端的问题.通过netstat,的确看到很多TIME_WAIT状态的连接.

代写Python、代做Python、Python作业代写、Python代写(微信leechanx)

代写Python.代做Python.Python作业代写.Python代写(微信leechanx) i++ VS ++i性能区别 i++ 为 function () { tmp = i; i = tmp + 1; return tmp; } ++i 为 function () { i = i + 1; return i; }

python 按照gb2312做url编码

import urllib2 urllib2.quote("攻克平台") python 按照gb2312做url编码,布布扣,bubuko.com

用Python给小宝做的数学四则运算_算术口算练习程序(后添加减乘除)

最近着迷上了 Python 用Python给小宝做的数学算数口算练习程序(2015年1月添加四则运算)! 给小宝做的口算游戏: #用Python给小宝做的数学算数口算练习程序(2015年1月添加四则运算)! #给小宝做的口算游戏: import string import random input=11 nums=10 num=0 righ1t=0 #分数# flagwrong=0 #没错过 print "\e[1;34mThis text is bold blue.\e[0m\n"