Python pymeter 与 unittest 结合模仿 apiPost 一键压测功能

disable · 2023年12月18日 · 最后由 disable 回复于 2023年12月20日 · 3883 次阅读

背景

前几天看过花菜大佬分享的一个帖子 Python 操作 Jmeter 探索:pymeter 实操指南
然后去看了 pymeter 这个库,结合目前的引擎,简单的改造下做个 demo

demo 如下

结合主流的 unittest 框架与 pymeter 做了一键压测的功能,页面参考了 apipost 的桌面端简单的做了这个 demo。(引擎的话之前一直用的 unittest,所以结合 type 动态生成测试类,重写步骤函数)

def perform(self, data):
    """一键压测扩展"""
    router = data.get('interface').get('url')
    threads = data.get('threads', 1)
    iterations = data.get('iterations', 1)
    http_sampler = HttpSampler(
        "Demo",
        router,
    )
    tg = ThreadGroupSimple(
        threads, iterations, http_sampler,
    )
    tp = TestPlan(tg)
    stats = tp.run()
    response = {
        "duration": stats.duration_milliseconds,
        "mean": stats.sample_time_mean_milliseconds,
        "min": stats.sample_time_min_milliseconds,
        "median": stats.sample_time_median_milliseconds,
        "90p": stats.sample_time_90_percentile_milliseconds,
        "95p": stats.sample_time_95_percentile_milliseconds,
        "99p": stats.sample_time_99_percentile_milliseconds,
        "max": stats.sample_time_max_milliseconds
    }
    self.__unittest_perform_response = response

改造后的 runApi 结果返回结果如下

最终效果如下

纯属娱乐勿喷!哈哈哈!代码目前存在问题不用参考谢谢!demo 而已

共收到 4 条回复 时间 点赞

这么说直接通过 httprunner 来转换也行,v1 和 v2 版本都是基于 unittest

花菜 回复

嗯,对的,引擎的话确实 httprunner 更好点。我这算是对这个库的一个使用场景的补充说明,看原版的 jmeter-java-dsl 的文档基本上可以满足日常使用了,挺好的这库。

unittest 异步是后面版本有,但是他的异步并发不起来的吧。。

陈子昂 回复

IsolatedAsyncioTestCase?这个么,没用过。😂 😂 也没用 tornado fastapi 玩不了异步

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册