• Python 接口测试之接口请求方法封装


    引言

      既然我们接口测试用例写好了,测试数据也拿到了,那么就是模拟调用接口的方法了,方法有get,post,put,delete,具体是选择哪种,我们需要根据不同接口规定好请求方法来调用。为了方便,将四种方法封装到一个类中,每次只需访问类中某个方法,到达请求的目的。

    请求方法封装

      下面就直接附上代码:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    __author__ = 'Leo'

    import requests

    import json

    class ApiRequest(object):

        """

        请求方法

        """

        # 请求方法get

        def get_method(self,url,data=None,header=None):

            if header is not None:

                res = requests.get(url,params=data,headers=header)

            else:

                res = requests.get(url,params=data)

            return res.json()

        # 请求方法post

        def post_method(self,url,data=None,header=None):

            global res

            if header is not None:

                res = requests.post(url,json=data,headers=header)

            else:

                res = requests.post(url,json=data)

            if  str(res) == "":

                return res.json()

            else:

                return res.text

        # 请求方法put

        def put_method(self,url,data=None,header=None):

            if header is not None:

                res = requests.put(url,json=data,headers=header)

            else:

                res = requests.delete(url, json=data)

            return res.json()

        # 请求方法delete

        def delete_method(self, url, data=None, header=None):

            if header is not None:

                res = requests.delete(url, json=data, headers=header)

            else:

                res = requests.delete(url, json=data)

            return res.json()

        # 主方法

        def run_method(self,method,url,data=None,header=None):

            if method == 'get' or method == 'GET':

                res = self.get_method(url,data,header)

            elif method == 'post' or method =='POST':

                res = self.post_method(url,data,header)

            elif method == 'put' or method == 'PUT':

                res = self.post_method(url,data,header)

            elif method == 'delete' or method == 'DELETE':

                res = self.post_method(url,data,header)

            else:

                res = "你的请求方式不正确!"

            # return res

            return json.dumps(res, ensure_ascii=False, indent=4, sort_keys=True,separators=(','':'))

    简单的解释一下相关知识点:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示。

    indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json。

    separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,’,’:’);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。

    encoding:默认是UTF-8,设置json数据的编码方式。

    sort_keys:将数据根据keys的值进行排序。

    执行测试

      方法已经封装好,既然接口数据有了,请求方法也有了,我们不妨测试一下之前封装好的代码,用实际行动来检验一下:

    1

    2

    3

    4

    5

    6

    # get请求

    if __name__ == '__main__':

        url = "http://httpbin.org/get"

        ir = ApiRequest()

        result = ir.run_method(url=url,method='get')

        print(result)

    运行结果:

    1

    2

    3

    4

    5

    6

    # post请求

    url2 = "http://httpbin.org/post"

    ir2 = ApiRequest()

    data = {'id''测试'}

    result = ir2.run_method(url=url2,method='post',data=data)

    print(result)

    运行结果:

      有些细心人可能有疑问,这里没有使用excel中的接口测试数据,下面我就演示一下,调用excel中维护的接口测试数据,先维护数据:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    from basic_method import get_excelData

      get_data = get_excelData.getData()

      print("获取是否运行key: ",get_data.get_is_run(1))

      print("获取接口url: ",get_data.get_url(1))

      print("获取接口请求方法: ",get_data.get_method(1))

      print("获取接口请求数据: ",get_data.get_data(1))

      url2 = get_data.get_url(1)

      method = get_data.get_method(1)

      data = get_data.get_data(1)

      ir2 = ApiRequest()

      result = ir2.run_method(url=url2,method=method,data=data)

      print(result)

    运行结果:

      这次就是调用过程是从excel拿的数据,并且通过封装好的方法请求模拟请求接口。证明此前封装好的代码是可以正常运行。

    这里献上另一种请求方法:

    2023超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战

  • 相关阅读:
    2022年世界大学声誉排名(完整版)
    leetcode:滑动窗口----3. 无重复字符的最长子串
    算法宝典——Java版本(持续更新)
    adb shell input text 输入中文
    Final Cut Pro使用教程
    《商业银行信息科技风险管理指引》
    cas:304680-35-1/1-己基-3-甲基咪唑六氟磷酸盐/[C6MIm]PF6
    Python算法——二叉树遍历
    Termius for Mac:掌控您的云端世界,安全高效的SSH客户端
    Leetcode112. 路径总和
  • 原文地址:https://blog.csdn.net/ada4656/article/details/133684425