zoukankan      html  css  js  c++  java
  • 记录python接口自动化测试--requests使用和基本方法封装(第一目)

    之前学习了使用jmeter+ant做接口测试,并实现了接口的批量维护管理(大概500多条用例),对“接口”以及“接口测试”有了一个基础了解,最近找了一些用python做接口测试的资料,一方面为了学习下如何使用python进行接口测试(如何做出一个简单基础的接口测试框架),另一方面也为了锻炼下如何用python写代码(接触python也有一段时间了,但是每次自己编程总有种提笔忘字的感觉,真是欠练!!)

    首先,用python做接口测试,主要用到就是requests库和json库。

    1.先看一个简单的demo

     1 # -*- coding: UTF-8 -*-
     2 import requests
     3 get_url = 'http://localhost:7001/XXX'
     4 data = {'userCode':'csqy123456','userPWD':'123456'}
     5 r = requests.get(url=get_url, params=data, timeout=5)   #产生一个名为r的Response对象,可以从这个对象中获取我们想要的信息; #get请求传参数时,使用params关键字  #timeout参数用来设定停止等待响应的时间
     6 print(r.url)   #返回请求url
     7 print(r.json())  #以JSON格式解析响应内容
     8 print(r.status_code)   #返回状态码
     9 print(r.raise_for_status())   #如果发送了一个错误请求,如404、500等,可以通过raise_for_status()来抛出异常
    10 print(r.encoding)  #查看requests使用了什么编码,同时可以用r.encoding属性来改变它
    11 print(r.raw)     #获取来自服务器的原始套接字响应
    12 print(r.headers)   #服务器返回给我们的响应头信息,也可以在传参时通过headers=XXX来定制请求头
    13 print(r.request)   #获取原来创建的Request对象
    14 print(r.request.headers)   #发送到服务器的请求头
    1 # -*- coding: UTF-8 -*-
    2 import requests 
    3 post_url = 'http://localhost:7001/XXX'
    4 payload2 = {'approveSeq':'6610','userCode':'qyzh123456_88','projName':'测试项目'}
    5 r = requests.post(post_url, data=payload2, timeout=1)   #post请求传参数时,使用data关键字
    6 print(r.json())
    7 print(r.status_code)

     2.然后通过函数调用来发送get/post请求

    # -*- coding: UTF-8 -*-
    import requests
    
    
    def send_get(url, data):
        """ 定义send_get函数,用来接收参数,发送get请求 """
        r = requests.get(url=url, params=data)
        result = r.json()
        return result
    
    
    def send_post(url, data):
        """ 定义send_post函数,用来接收参数,发送post请求 """
        r = requests.get(url=url, data=data)
        result = r.json()
        return result
    
    
    def main(url, method, data):
        """ 定义一个主函数,根据method是get或post,来调用send_post()或send_get() """
        if method == 'POST':
            r = send_post(url, data)  # 如果是POST请求,则调用send_post()
        else:
            r = send_get(url, data)   # 如果是GET请求,则调用send_get()
        return r   # 将结果返回出去
    
    
    url = 'http://localhost:7001/XXX'
    data = {
        'controlSeq': '2018118325'
    }
    demo = main(url, 'GET', data)
    print(demo)

    3.定义一个类,对post请求和get请求进行封装

    run_method.py

    #
    -*- coding: UTF-8 -*- import requests import json class RunMain: """含有构造器""" def __init__(self, url, method, data=None): self.t = self.run_main(url, method, data) def send_post(self, url, data): r = requests.post(url=url, data=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) def send_get(self, url, data): r = requests.get(url=url, params=data) result = r.json() return json.dumps(result, indent=2, sort_keys=False, ensure_ascii=False) # 利用json.dumps将响应数据进行json格式的编码解析 # indent=2将输出结果缩进2个字符显示 # sort_keys=False,输出结果是否按照关键字排序 # json.dumps 序列化时对中文默认使用的ascii编码,ensure_ascii=False才会输出中文 # return result def run_main(self, url, method, data=None): if method == 'GET': r = self.send_get(url, data) else: r = self.send_post(url, data) return r if __name__ == '__main__': url = 'http://localhost:7001/XXX' data = { 'controlSeq': '2018118325' } test = RunMain(url, 'GET', data) # 因为有构造器 __init__,实例化时要带参数 print(test.t)
    run_method.py
    # -*- coding: UTF-8 -*-
    
    import requests
    import json
    class RunMain:
        """无构造器"""
        def send_get(self, url, data):
            res = requests.get(url=url, params=data).json()
            return res
    
        def send_post(self, url, data):
            res = requests.post(url=url, data=data).json()
            return res
    
        def run_main(self, url, method, data=None):
            res = None
            if method == 'GET':
                res = self.send_get(url, data)
            else:
                res = self.send_post(url, data)
            return res
    
    
    if __name__ == '__main__':
        url = 'http://192.168.0.53:7001/CommonService/api/control/controlProgress/query.v'
        data = {
                'controlSeq': '2018118325'
        }
        run = RunMain()  # 先实例化,实例化时不需要带参数
        print(run.run_main(url, 'GET', data))

     ps.建议在封装运行方法类时,不要加构造器,这样就不需要在实例化时传参,在后面的主函数中从excel中取出参数后再传给类中的方法即可

    下面是json.dumps使用前后的对比图

     

     第一目的内容到此结束,一方面简单介绍下requests的用法,另一方面将post和get请求进行基本封装,通过实例化对象进行调用

  • 相关阅读:
    jQuery EasyUI API 中文文档 数字框(NumberBox)
    jQuery EasyUI API 中文文档 数值微调器(NumberSpinner)
    jQuery EasyUI API 中文文档 日期时间框(DateTimeBox)
    jQuery EasyUI API 中文文档 微调器(Spinner)
    jQuery EasyUI API 中文文档 树表格(TreeGrid)
    jQuery EasyUI API 中文文档 树(Tree)
    jQuery EasyUI API 中文文档 属性表格(PropertyGrid)
    EntityFramework 数据操作
    jQuery EasyUI API 中文文档 对话框(Dialog)
    jQuery EasyUI API 中文文档 组合表格(ComboGrid)
  • 原文地址:https://www.cnblogs.com/hanmk/p/8647145.html
Copyright © 2011-2022 走看看