Python3+Pytest 接口自动化测试全方案设计与开发-No.2接口自动化框架编写-2-Requests使用

1、介绍及应用

介绍:流行的接口http(s)请求工具,功能强大,简单方便,容易上手

文档:

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。

警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

Requests 允许你发送纯天然,植物饲养的 HTTP/1.1 请求,无需手工劳动。你不需要手动为 URL 添加查询字串,也不需要对 POST 数据进行表单编码。Keep-alive 和 HTTP 连接池的功能是 100% 自动化的,一切动力都来自于根植在 Requests 内部的 urllib3

  • 安装
    pip install requests
    

  • 快速使用
#1、导包requests
import requests
# 2、发送get请求
r = requests.get("https://blog.csdn.net/python_jeff")
# 3、打印结果
print(r)

请求返回介绍
方法 备注
r.status_code 响应状态
r.content 字节方法的响应头,会自动为你解码gzip和deflate压缩
r.headers 以字典对象存储服务器响应头,若键不存在则返回None
r.json() Requests中内置的JSON

r.url

获取url
r.encoding 编码格式
r.cookies 获取cookies
r.raw 返回原始响应体
r.text 字符串方式的响应体,会自动根据响应头部的字符编码进行
r.raise_for_status() 失败请求(非200响应体)抛出异常

2、用例代码编写

'''
登录成功
http://211.103.136.242:8064
/authorizations/
		POST
		json
		{
            "username":"python",
            "password":"12345678"
		}
		user_id': 1, 'username': 'python'
'''
#登录
# 1、导包
import pprint

import requests
# 2、定义登录方式
def login():

# 3、定义测试数据
    url = 'http://211.103.136.242:8064/authorizations/'
    data = {
            "username":"python",
            "password":"12345678"
		}

# 4、发送POST请求
    r = requests.post(url,json=data)
# 5、输出结果
    pprint.pprint(r.json())

if __name__ == '__main__':
    login()

'''
个人信息	
获取个人信息正确
/user/		
get
认证:
```js
 headers: {
           'Authorization': 'JWT ' + this.token
 },
'''
def info():
    # 1、参数
    url = 'http://211.103.136.242:8064/user/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    # 2、get请求
    r = requests.get(url,headers = headers)
    # 3、输出
    print(r.json())
if __name__ == '__main__':
    # login()
    info()

'''
商品列表数据正确	
请求方式: GET `/categories/(?P<category_id>\d+)/skus?page=xxx&page_size=xxx&ordering=xxx`
/categories/115/skus/		
get	json	
 {
 "page":"1",
 "page_size": "10",
 "ordering": "create_time"
 }

'''
def goods_list():
    # 1、参数
    url = 'http://211.103.136.242:8064/categories/115/skus/'
    data = {
 "page":"1",
 "page_size": "10",
 "ordering": "create_time"
 }

    # 2、get请求
    r = requests.get(url,json= data)
    # 3、输出
    pprint(r.json())

if __name__ == '__main__':
    # login()
    # info()
    goods_list()

'''
添加购物车成功	
/cart/	
login_4	post	
json	
{"sku_id": "3","count": "1", "selected": "true"}	
		
{"Authorization": "JWT ${token}$"}


'''
def cart():
    # 1、参数
    url = 'http://211.103.136.242:8064/cart/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    data = {"sku_id": "3","count": "1", "selected": "true"}
    # 2、get请求
    r = requests.post(url,headers = headers,json=data)
    # 3、输出
    pprint(r.json())


if __name__ == '__main__':
    # login()
    # info()
    # goods_list()
    cart()

扫描二维码关注公众号,回复: 13531567 查看本文章
'''
保存订单	
/orders/	
post
login_4	post	
json	
{ "address":"1","pay_method":"1" }
{"Authorization": "JWT ${token}$"}
'''
def order():
    # 1、参数
    url = 'http://211.103.136.242:8064/orders/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    data = { "address":"1","pay_method":"1" }
    # 2、get请求
    r = requests.post(url,headers = headers,json=data)
    # 3、输出
    pprint(r.json())

3、方法封装

 

1.Get封装

# 1、创建封装get方法
def requests_get(url,headers=None,json= None):
# 2、发送requests get 请求
    r = requests.get(url,headers = headers,json= json)
# 3、获取结果响应内容
    code = r.status_code
    try:
        body = r.json()
    except Exception as e:
        body = r.text
# 4、内容存到字典
    res = dict()
    res['code'] = code
    res['body'] = body
# 5、字典返回
    return res

 2.Post封装

#post方法的封装
# 1、创建封装post方法
def requests_post(url,headers=None,json= None):
# 2、发送requests post 请求
    r = requests.post(url,headers = headers,json= json)
# 3、获取结果响应内容
    code = r.status_code
    try:
        body = r.json()
    except Exception as e:
        body = r.text
# 4、内容存到字典
    res = dict()
    res['code'] = code
    res['body'] = body
# 5、字典返回
    return res

3.重构

# 重构
# 1、创建类
class Request:
# 2、定义公共方法
    def requests_api(self,url, headers=None, json=None,method='get'):
        #     1.增加方法的参数,根据参数来验证方法get/post,方法请求
        if method == 'get':
            #get请求
            r = requests.get(url, headers=headers, json=json)
        elif method == 'post':
            #post请求
            r = requests.post(url, headers=headers, json=json)
#     2.重复的内容,复制进去
        code = r.status_code
        try:
            body = r.json()
        except Exception as e:
            body = r.text

        res = dict()
        res['code'] = code
        res['body'] = body

        return res
# 3、重构get/post方法
    #get
    # 1、定义方法
    def get(self,url,**kwargs):
    # 2、定义参数
        #url,json,headers,cookies,method
    # 3、调用公共方法
       return self.requests_api(url,method='get',**kwargs)


    # post
    # 1、定义方法
    def post(self, url, **kwargs):
        # 2、定义参数
        # url,json,headers,cookies,method
        # 3、调用公共方法
        return self.requests_api(url, method='post', **kwargs)

4.testcase重写

# -*- coding: utf-8 -*- 
# @Time : 2021/12/7 13:47 
# @Author : jeffky
# @File : Test_Mail.py
# 1、导包
from pprint import pprint
from utils.RequestsUtil import requests_get, requests_post, Request
#登录
'''
登录成功
http://211.103.136.242:8064
/authorizations/
		POST
		json
		{
            "username":"python",
            "password":"12345678"
		}
		user_id': 1, 'username': 'python'
'''


import requests
# 2、定义登录方式


def login():

# 3、定义测试数据
    url = 'http://211.103.136.242:8064/authorizations/'
    data = {
            "username":"python",
            "password":"12345678"
		}

# 4、发送POST请求
#     r = requests_post(url,json=data)
    request = Request()
    r = request.post(url, json=data)
# 5、输出结果
    pprint(r)
    return r['body']

'''
个人信息	
获取个人信息正确
/user/		
get
认证:
```js
 headers: {
           'Authorization': 'JWT ' + this.token
 },
'''
def info():
    # 1、参数
    url = 'http://211.103.136.242:8064/user/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    # 2、get请求
    # r = requests_get(url,headers = headers)
    request =Request()
    r = request.get(url,headers = headers)
    # 3、输出
    pprint(r)
'''
商品列表数据正确	
请求方式: GET `/categories/(?P<category_id>\d+)/skus?page=xxx&page_size=xxx&ordering=xxx`
/categories/115/skus/		
get	json	
 {
 "page":"1",
 "page_size": "10",
 "ordering": "create_time"
 }

'''
def goods_list():
    # 1、参数
    url = 'http://211.103.136.242:8064/categories/115/skus/'
    data = {
 "page":"1",
 "page_size": "10",
 "ordering": "create_time"
 }

    # 2、get请求
    # r = requests_get(url,json= data)
    request =Request()
    r = request.get(url,json=data)
    # 3、输出
    pprint(r)

'''
添加购物车成功	
/cart/	
login_4	post	
json	
{"sku_id": "3","count": "1", "selected": "true"}	
		
{"Authorization": "JWT ${token}$"}


'''
def cart():
    # 1、参数
    url = 'http://211.103.136.242:8064/cart/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    data = {"sku_id": "3","count": "1", "selected": "true"}
    # 2、get请求
    # r = requests_post(url,headers = headers,json=data)
    request =Request()
    r = request.get(url,headers = headers,json=data)
    # 3、输出
    pprint(r)
'''
保存订单	
/orders/	
post
login_4	post	
json	
{ "address":"1","pay_method":"1" }
{"Authorization": "JWT ${token}$"}
'''
def order():
    # 1、参数
    url = 'http://211.103.136.242:8064/orders/'
    token = login()['token']
    headers={
        'Authorization': 'JWT ' + token
    }
    data = { "address":"1","pay_method":"1" }
    # 2、get请求
    # r = requests_post(url,headers = headers,json=data)
    request =Request()
    r = request.post(url,headers = headers,json=data)
    # 3、输出
    pprint(r)

if __name__ == '__main__':
    login()
    # info()
    # goods_list()
    # cart()
    # order()

猜你喜欢

转载自blog.csdn.net/python_jeff/article/details/121765603