zoukankan      html  css  js  c++  java
  • Python接口自动化 -RESTful请求方法封装

    对 Requests 库下一些常见的请求方法进行封装,调用起来更加方便。

    先来看一个例子:

    比如要测试登录接口

    1. 正常流测试(正确的账号、密码)
    2. 异常流测试(正确的账号,错误的密码等)
    import requests
    
    # 正常流
    url = 'http://192.168.28.128:8080/recruit.students/login/in?account=admin&pwd=test123'
    result = requests.get(url)
    print(result.text)
    
    # 异常流,密码错误
    url = 'http://192.168.28.128:8080/recruit.students/login/in?account=admin&pwd=test'
    result = requests.get(url)
    print(result.text)
    
    

    看上面这段代码,是不是显得比较冗余,我们每个请求里都要写一遍完整的 url。
    还有就是当我们需要做一些连续调用的请求,比如“先登录再把商品加入购物车“,这样的时候,需要使用 requests 的 session 功能。

    就要需要登录和登录后的请求都由同一个reqeusts session对象来发出。

    # -*- coding:utf-8 -*-
    import requests
    import json as complexjson
    
    
    class RestClient():
        def __init__(self, api_root_url):
            """
            :type api_root_url: 就是url的前缀,相当于host
            """
            self.api_root_url = api_root_url
            # 用session保持会话,相当于微型浏览器
            self.session = requests.session()
    
        def get(self, uri, **kwargs):
            """
            :type uri: 路径,每个接口的路径不一样,所以把路径抽离出来
            :type **kwargs: 关键字参数,它将不定长参数转换为 dict 传入函数
            """
            # 返回的时候调用这个类中的 request 方法
            return self.request(uri, "GET", **kwargs)
    
        def post(self, uri, data=None, json=None, **kwargs):
            return self.request(uri, "POST", data, json, **kwargs)
    
        def put(self, uri, data=None, **kwargs):
            return self.request(uri, "PUT", data, **kwargs)
    
        def delete(self, uri, **kwargs):
            return self.request(uri, "DELETE", **kwargs)
    
        def patch(self, uri, data=None, **kwargs):
            return self.request(uri, "PATCH", data, **kwargs)
    
        def request(self, uri, method, data=None, json=None, **kwargs):
            url = self.api_root_url + uri
            if method == "GET":
                return self.session.get(url, **kwargs)
            if method == "POST":
                return self.session.post(url, data, json, **kwargs)
            if method == "PUT":
                if json:
                    # PUT 和 PATCH 中没有提供直接使用json参数的方法,因此需要用data来传入
                    data = complexjson.dumps(json)
                return self.session.put(url, data, **kwargs)
            if method == "DELETE":
                return self.session.delete(url, **kwargs)
            if method == "PATCH":
                if json:
                    data = complexjson.dumps(json)
                return self.session.patch(url, data, **kwargs)
    

    这里,这个类里我加了一些方法,包括:

    1. init 方法:初始化这个类,初始化的时候需要输入 api_root_url,也就是URL的前缀host。另外还在初始化时创建了 self.session 用于保存 requests 的 session。

    2. get,post 等各种 http 方法,用于让用户使用。但这里并没有真正实现这些方法,因为这些方法都是在 requests 里有实现过,我们只要把参数传给 requests 就行了。这个传递我们写在 request 方法里,所以这里的 http 方法都是调用 requests 方法。

    3. request 方法:真正调用 self.session 的各种方法,这里同样是把参数传下去,只是在传之前,给所有用户输入的 url 加了一个前缀。前缀的值是用户在 init 方法里输入的。

    使用封装好的方法进行登录操作:

    r = RestClient("http://192.168.28.128:8080")
    
    login = r.get(uri="/recruit.students/login/in",
                  params={"account": "admin",
                           "pwd": "660B8D2D5359FF6F94F8D3345698F88C"
                           }
                  )
    

    只是要输入接口的 uri 和参数即可,不用再输入完整的 url。后续还可以对接口进行封装,接口封装完之后,测试的时候只需要输入接口入参就行。

    -----分界线-------

    王阳名说:知而不行,是为不知

    读书、学习、看文章,总说自己知道,但不去做,其实就是不知道。说自己知道,可能只是为了好看。

    学习第一个方法就是:重复

    学一个知识,学 1 遍,没学会,继续学第 2 遍,第 3 遍,第 4 遍……,直到学会。

    练一个技能,练 1 次,不会用,继续练 2 次,第 3 次,第 4 次……,直到会用。

    书读百遍,其义自见。

  • 相关阅读:
    信号学习第一课--基础知识
    进程学习第一课--基本操作
    执行sql语句后的数据处理api
    如何持续改善你的开车技术?
    刹车失灵不用怕 常见故障分析及应对方法
    原地打方向原来很伤车?看完还敢吗?
    这儿有四个开车小细节,新手司机一定要牢记
    毁车隐患多 真正的老司机绝不会这样停车
    80%的事故发生在这些路段!想保命快点我
    流言终结者!自动挡用车误区,你可能每天都在犯错
  • 原文地址:https://www.cnblogs.com/wwho/p/14470429.html
Copyright © 2011-2022 走看看