Python接口自动化测试--requests使用和基本方法封装

发布时间:2023年12月27日

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

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

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

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

?

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

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

?

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取?

?

文章来源:https://blog.csdn.net/hlsxjh/article/details/135249983
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。