测试平台系列(11) 封装Request类

简介: 封装Request类操作

封装Request类


回顾

上次我们完善了登录注册相关页面,还有后端接口,算是从0到1完成了一个功能的编码工作。可能前端部分会讲的比较粗糙,因为第一可能是笔者造诣不够,第二也跟我们直接从现有的框架进行改造有关,很多东西不是从0写到1,而是从11.1,但是后面不一样:

后面的页面都是咱们自己写,自己用,从0写到1

安装requests库


终端输入pip3 install requests并执行。

构思后端Request相关接口


要知道,咱们这是一个接口测试平台(后续可能会集成UI自动化,但是这个笔者也还没有想好)。一个接口自动化平台,最核心的当然是对api的请求操作,所以咱们刻不容缓,加快进度,趁热打铁,来点干货吧。用requests来协助我们完成接口自动化请求。

我们新建一个文件: middleware/HttpClient.py


import datetime
import requests
class Request(object):
    def __init__(self, url, session=False, **kwargs):
        self.url = url
        self.session = session
        self.kwargs = kwargs
        if self.session:
            self.client = requests.session()
            return
        self.client = requests
    def get(self):
        return self.request("GET")
    @staticmethod
    def get_elapsed(timer: datetime.timedelta):
        if timer.seconds > 0:
            return f"{timer.seconds}.{timer.microseconds // 1000}s"
        return f"{timer.microseconds // 100}ms"
    def request(self, method: str):
        status_code = 0
        elapsed = "-1ms"
        try:
            if method.upper() == "GET":
                response = self.client.get(self.url, **self.kwargs)
            elif method.upper() == 'POST':
                response = self.client.post(self.url, **self.kwargs)
            else:
                response = self.client.request(method, self.url, **self.kwargs)
            status_code = response.status_code
            if status_code != 200:
                return Request.response(False, status_code)
            elapsed = Request.get_elapsed(response.elapsed)
            data = response.json()
            return Request.response(True, 200, data, response.headers, response.request.headers, elapsed=elapsed)
        except Exception as e:
            return Request.response(False, status_code, msg=str(e), elapsed=elapsed)
    def post(self):
        return self.request("POST")
    @staticmethod
    def response(status, status_code=200, response=None, response_header=None,
                 request_header=None, elapsed=None, msg="success"):
        request_header = {k: v for k, v in request_header.items()}
        response_header = {k: v for k, v in response_header.items()}
        return {
            "status": status, "response": response, "status_code": status_code,
            "response_header": response_header, "request_header": request_header,
            "msg": msg, "elapsed": elapsed,
        }

如果我是产品经理的话,那么postman就是我的原型图:

1.jpg

image


讲解一下各个方法,首先这是一个Request请求类,他拥有核心方法:request,目前咱们暂时先只做到支持json类的请求,后续补全form, file等类型的请求。


其实这个类做的事情很简单,就是把requests相关的方法剥离了出来,封装了一层。

其中构造函数提供了一些选项,包括请求的信息,url,是否以session的方式请求等等,kwargs涵盖了requests原生的参数,只要你想传,你都可以传进来。

get_elapsed是根据postman为参照,对请求时间做的一个处理,如果大于1s的请求响应时间,那我们以为单位显示,否则以毫秒为单位显示。

response是构造返回结构对象,对本次请求的数据进行整理。

request就封装了requests库的核心操作,基本上属于原生处理,并且判断了http状态码。

编写request接口


新建controllers/request/http.py


from flask import Blueprint
from flask import jsonify
from flask import request
from app.middleware.HttpClient import Request
req = Blueprint("request", __name__, url_prefix="/request")
@req.route("/http", methods=['POST'])
def http_request():
    data = request.get_json()
    method = data.get("method")
    if not method:
        return jsonify(dict(code=101, msg="请求方式不能为空"))
    url = data.get("url")
    if not url:
        return jsonify(dict(code=101, msg="请求地址不能为空"))
    body = data.get("body")
    headers = data.get("headers")
    r = Request(url, data=body, headers=headers)
    response = r.request(method)
    return jsonify(dict(code=0, data=response, msg="操作成功"))

其实和登录/注册接口都很相似,基本上就是创立了一个blueprint,前缀是/request,后续就是引入刚才的request类,进行http请求,最后返回response。

调整run.py


我们新建了一个蓝图,需要去run.py进行注册:

2.jpg

2行代码搞定


from app.controllers.request.http import req
pity.register_blueprint(req)

3.jpg

最终的效果如图所示


本节内容就到这里了,下一节咱们编写属于自己的第一个组件: postman。又是前端内容了,咱们做一个接近postman的页面即可,不需要多高大上,做东西要抓住用户的使用习惯。毕竟咱们不是🍎,它的理念是让用户去适应它。


相关文章
|
28天前
|
关系型数据库 MySQL 测试技术
【分享】AgileTC测试用例管理平台使用分享
AgileTC 是一个脑图样式测试用例管理平台,支持用例设计、执行与团队协作,帮助测试人员高效管理测试流程。
172 116
【分享】AgileTC测试用例管理平台使用分享
|
26天前
|
人工智能 数据可视化 测试技术
AI测试平台自动遍历:低代码也能玩转全链路测试
AI测试平台的自动遍历功能,通过低代码配置实现Web和App的自动化测试。用户只需提供入口链接或安装包及简单配置,即可自动完成页面结构识别、操作验证,并生成可视化报告,大幅提升测试效率,特别适用于高频迭代项目。
|
1月前
|
人工智能 测试技术 调度
写用例写到怀疑人生?AI 智能测试平台帮你一键生成!
霍格沃兹测试开发学社推出AI智能测试用例生成功能,结合需求文档一键生成高质量测试用例,大幅提升效率,减少重复劳动。支持自定义提示词、多文档分析与批量管理,助力测试人员高效完成测试设计,释放更多时间投入核心分析工作。平台已开放内测,欢迎体验!
|
1月前
|
人工智能 测试技术 项目管理
测试不再碎片化:AI智能体平台「项目资料套件」功能上线!
在实际项目中,需求文档分散、整理费时、测试遗漏等问题常困扰测试工作。霍格沃兹推出AI智能体测试平台全新功能——项目资料套件,可将多个关联文档打包管理,并一键生成测试用例,提升测试完整性与效率。支持套件创建、文档关联、编辑删除及用例生成,适用于复杂项目、版本迭代等场景,助力实现智能化测试协作,让测试更高效、更专业。
|
2月前
|
存储 人工智能 算法
AI测试平台实战:深入解析自动化评分和多模型对比评测
在AI技术迅猛发展的今天,测试工程师面临着如何高效评估大模型性能的全新挑战。本文将深入探讨AI测试平台中自动化评分与多模型对比评测的关键技术与实践方法,为测试工程师提供可落地的解决方案。
|
28天前
|
人工智能 自然语言处理 测试技术
AI测试平台的用例管理实践:写得清晰,管得高效,执行更智能
在测试过程中,用例分散、步骤模糊、回归测试效率低等问题常困扰团队。霍格沃兹测试开发学社推出的AI测试平台,打通“用例编写—集中管理—智能执行”全流程,提升测试效率与覆盖率。平台支持标准化用例编写、统一管理操作及智能执行,助力测试团队高效协作,释放更多精力优化测试策略。目前平台已开放内测,欢迎试用体验!
|
2月前
|
存储 人工智能 文字识别
从零开始打造AI测试平台:文档解析与知识库构建详解
AI时代构建高效测试平台面临新挑战。本文聚焦AI问答系统知识库建设,重点解析文档解析关键环节,为测试工程师提供实用技术指导和测试方法论
|
4月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
750 23
|
9月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
6月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
721 24