news 2026/4/16 17:24:30

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/4/16 11:07:14

Jmeter 压测-Jprofiler定位接口相应时间长

1、环境准备 执行压测脚本,分析该接口tps很低,响应时间很长 高频接口在100ms以内,普通接口在200ms以内 2、JProfiler分析响应时间长的方法 ①JProfiler录制数据 压测脚本,执行1-3分钟即可 ②分析接口相应时间长的方法 通过Me…

作者头像 李华
网站建设 2026/4/16 13:07:49

解决python--UI自动化iframe切换问题

最近同事在学Pythonselenium UI自动化,遇到一些问题,其中有个涉及iframe切换的问题,记录下方面有需要的人可以参考查阅。 从他问题描述和代码,代码思路清晰,自己打开https://www.126.com/ 网址 发现这个需要先点击登入…

作者头像 李华
网站建设 2026/4/16 11:08:36

PyTorch安装教程GPU与TensorFlow资源占用对比

PyTorch安装与TensorFlow资源占用深度对比 在现代AI研发环境中,选择合适的深度学习框架不仅关乎开发效率,更直接影响硬件资源的利用效率和系统的可维护性。尤其是在GPU资源昂贵且有限的背景下,开发者越来越关注不同框架在显存占用、训练速度和…

作者头像 李华
网站建设 2026/4/15 22:48:56

计算机毕设java惠农扶贫商城系统 基于Java技术的惠农助贫电商平台开发与设计 Java驱动的惠农扶贫在线交易系统研究与实现

计算机毕设java惠农扶贫商城系统l67819 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着互联网技术的飞速发展,电子商务平台已成为推动经济发展和促进社会公平的重…

作者头像 李华
网站建设 2026/4/16 14:27:19

清华源加速下载TensorFlow安装包,提升conda配置效率

清华源加速下载TensorFlow安装包,提升conda配置效率 在深度学习项目启动阶段,最让人沮丧的不是模型跑不通,而是环境还没搭好——当你输入 conda install tensorflow 后,看着终端里缓慢爬行的进度条,或是反复超时的网络…

作者头像 李华
网站建设 2026/4/16 3:59:56

一文掌握DataFlow!这款超好用的LLM数据处理框架,建议收藏!

给大家介绍一个处理LLM数据加工的框架–DataFlow,以模块化、可复用的系统级抽象为核心,提供近200个可重用算子和6个跨文本、数学推理、代码、Text-to-SQL等领域的通用管道,支持PyTorch风格的管道构建API,并通过DataFlow-Agent实现…

作者头像 李华