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 占用一半的任务量。

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

 

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

 

 

  • 23
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值