zoukankan      html  css  js  c++  java
  • Python 接口测试之接口请求方法封装

      引言

      前面讲过三篇文章:

    1、Python 接口测试之Excel表格数据操作方法封装 ;

    2、Python 接口测试之接口关键字封装  ;

    3、Python 接口测试之获取接口数据封装  ;

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

      请求方法封装

      下面就直接附上代码:

    __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) == "<Response [200]>":
                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=(',', ':'))
    

      

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

    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的值进行排序。
    

      执行测试

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

    # get请求
    if __name__ == '__main__':
        url = "http://httpbin.org/get"
        ir = ApiRequest()
        result = ir.run_method(url=url,method='get')
        print(result)
    

      运行结果:

    # post请求
    url2 = "http://httpbin.org/post"
    ir2 = ApiRequest()
    data = {'id': '测试'}
    result = ir2.run_method(url=url2,method='post',data=data)
    print(result)

    运行结果:

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

      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拿的数据,并且通过封装好的方法请求模拟请求接口。证明此前封装好的代码是可以正常运行。

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

      总结

      上面对接口请求方法封装已经完成了,并且将之前写的封装代码一起使用,实现了自动化测试框架中核心的代码,对自动化测试,测试开发感兴趣的朋友,同学可以加入QQ测试开发交流群:696400122。相互学习,共同进步!

  • 相关阅读:
    javaScript设计模式探究【1】
    Java基础算法集50题
    DataTable学习笔记排序细则、列隐藏[3]
    javaScript设计模式探究【4】工厂模式
    javaScript设计模式探究【3】
    一次面试感想+js最近学习体会
    DataTable学习笔记范例应用篇[2]
    腾讯2013实习生招聘面经
    初品cakephp
    php编译中配置libxml2的错误
  • 原文地址:https://www.cnblogs.com/liudinglong/p/12755730.html
Copyright © 2011-2022 走看看