news 2026/9/3 3:59:43

python+locust电商全流程性能测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python+locust电商全流程性能测试

电商全流程为什么要做全链路性能测试?

1、发现和解决问题:全链路性能测试可以模拟实际的用户行为和场景,以及发现系统的瓶颈和潜在的问题,及时发现和解决问题。

2、预防系统崩溃:电商系统在高峰期可能会面临巨大的流量压力,如果系统没有经过充分的性能测试,可能会导致系统崩溃或性能下降,影响用户体验和满意度。

3、提升用户体验:通过全链路性能测试,可以确保系统的各个部分都能在高并发的情况下正常运行,从而提升用户体验和满意度。

4、数据安全:电商系统通常会涉及到大量的用户信息和交易数据,因此需要确保系统的安全性,全链路性能测试可以检查系统的安全性。

5、降低运营成本:通过对系统的性能进行测试,可以提前发现问题,避免在生产环境中出现故障,减少运维成本和损失。

python+locust全链路性能测试的代码

内容模块包括:用户登陆、商品上架、商品浏览、商品加入购物车、商品下单、商品付款生成订单、查看库存是否扣减

首先,我们需要安装Locust库:

pip install locustio

然后,我们可以创建一个 Locust 类,用于定义用户行为和请求负载

  1. from locust import HttpUser, task, between

  2. class WebsiteUser(HttpUser):

  3. wait_time = between(5, 15)

  4. # 用户登录

  5. @task

  6. def login(self):

  7. self.client.post("/login", {"username": "test", "password": "test"})

  8. # 商品上架

  9. @task

  10. def upload_product(self):

  11. self.client.post("/product/upload", {"name": "Test Product", "price": "10.00"})

  12. # 商品浏览

  13. @task

  14. def browse_product(self):

  15. self.client.get("/product/1")

  16. # 商品加入购物车

  17. @task

  18. def add_to_cart(self):

  19. self.client.post("/cart/add", {"product_id": "1"})

  20. # 商品下单

  21. @task

  22. def place_order(self):

  23. self.client.post("/order/place", {})

  24. # 商品付款生成订单

  25. @task

  26. def pay_for_order(self):

  27. self.client.post("/order/pay", {})

  28. # 查看库存是否扣减

  29. @task

  30. def check_stock(self):

  31. self.client.get("/stock/1")

在这个例子中,我们定义了多个任务,分别对应不同的用户行为。每个任务都会按照一定的频率被分配给模拟的用户去执行。wait_time 参数表示模拟用户在执行下一个任务之前需要等待的时间。

接下来,我们可以启动 Locust 负载测试:

locust -f locustfile.py --host=http://example.com

其中,locustfile.py 是包含上面的 Locust 类定义的 Python 文件,--host 参数指定了 Web 服务器的 URL。

最后,我们可以观察 Locust 的实时统计信息和报告,以了解系统的性能和压力情况。

请注意,这只是一个非常基础的示例,实际的全链路性能测试可能需要考虑更多的因素,例如网络延迟、数据存储和处理、API 调用等等。此外,还需要根据具体的业务需求和系统特点,定制合适的测试脚本和策略。

在locust脚本中如何设置多域名性能压测

在 Locust 中,可以使用多任务(multiple tasks)来对多个域名称进行性能压测。每个任务都可以指向不同的域名称,并按照一定比例进行分配。以下是一个示例:

  1. from locust import HttpUser, task, between

  2. class WebsiteUser(HttpUser):

  3. wait_time = between(5, 15)

  4. @task(1)

  5. def test_domain1(self):

  6. self.client.get("http://domain1.com")

  7. @task(1)

  8. def test_domain2(self):

  9. self.client.get("http://domain2.com")

在这个示例中,我们定义了两个任务:test_domain1 和 test_domain2。第一个任务的概率为 1,第二个任务的概率也为 1,这意味着每个用户都有 50% 的概率会执行第一个任务,也有 50% 的概率会执行第二个任务。这两个任务都将访问不同的域名称。

注意,这里的 HttpUser 类中的 client 对象需要显式指定完整的 URL,而不是只提供域名称。这是因为 Locust 使用 HTTP 客户端库,它需要知道完整的 URL 来发送请求

使用 weight 参数来调整每个任务的比例

例如,将 test_domain1 的权重设置为 2,则该任务会被分配更多的资源,而 test_domain2 将会被分配较少的资源。

  1. @task(2)

  2. def test_domain1(self):

  3. self.client.get("http://domain1.com")

  4. @task(1)

  5. def test_domain2(self):

  6. self.client.get("http://domain2.com")

这个配置会让 domain1 占用两倍的任务量,而 domain2 占用一半的任务量。

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 10:48:33

HTML iframe嵌入外部TensorFlow演示页面

在线 TensorFlow 演示环境的嵌入式实践 在人工智能技术日益普及的今天,如何让开发者、学生或普通用户无需配置复杂环境就能直接体验深度学习模型的构建过程,已成为提升技术传播效率的关键挑战。一个常见的解决方案是:将预配置好的 TensorFlow…

作者头像 李华
网站建设 2026/9/3 0:47:36

GitHub托管数据集:加速TensorFlow-v2.9模型训练流程

GitHub托管数据集:加速TensorFlow-v2.9模型训练流程 在当今AI研发节奏日益加快的背景下,一个常见的痛点浮出水面:为什么同一个模型代码,在同事的机器上跑得好好的,到了自己环境却频频报错?依赖版本冲突、CU…

作者头像 李华
网站建设 2026/9/2 21:44:34

契约编程到底能多狠?看C++26如何彻底消灭非法状态

第一章:契约编程的革命性演进契约编程(Design by Contract)作为软件工程中确保程序正确性的核心范式,近年来经历了从理论到实践的深刻变革。通过将前置条件、后置条件与不变式嵌入代码逻辑,开发者能够在编译期或运行时…

作者头像 李华
网站建设 2026/9/3 0:01:43

Kanass快速上手指南:如何进行需求管理

上文介绍了如何快速创建第一个项目,本文将从项目的源头需求进行介绍,如何快速创建与管理需求。1、添加需求进入kanass项目,页面会自动定位到事项页面。点击添加事项->需求,填写需求标题与描述,选择需求类型等信息添…

作者头像 李华
网站建设 2026/9/3 0:03:36

2025年10款开源大模型UI界面,小白也能轻松本地部署

文章精选10款开源大模型UI工具,解决API密钥外泄、数据隐私问题。从Open WebUI企业级部署到Streamlit极简开发,覆盖聊天、写稿、Agent构建等场景。支持本地化部署、多模型切换、RAG功能,适合不同技术背景用户快速搭建大模型应用,文…

作者头像 李华