测试资料获取:点击获取软件测试资料

(一)简单的 HTTP 接口测试案例

假设我们要对一个简单的在线书店系统的 HTTP 接口进行性能测试,该系统提供了获取书籍列表、搜索书籍、添加书籍到购物车等接口。

首先,创建一个名为 bookstore_performance.py 的测试脚本:

from locust import HttpLocust, TaskSet, task

# 定义用户行为类
class UserBehavior(TaskSet):
    # 定义获取书籍列表任务,权重为 2
    @task(2)
    def get_book_list(self):
        self.client.get("/books")

    # 定义搜索书籍任务,权重为 1
    @task(1)
    def search_book(self):
        self.client.get("/books/search?q=python")

    # 定义添加书籍到购物车任务,权重为 3
    @task(3)
    def add_to_cart(self):
        self.client.post("/cart/add", json={"book_id": 1})

# 定义 HttpLocust 类
class WebsiteUser(HttpLocust):
    # 关联用户行为类
    task_set = UserBehavior
    # 设置主机地址
    host = "http://your-bookstore-api-url"
    # 设置等待时间范围
    wait_time = lambda self: self.random.randint(1000, 5000)

然后,在命令提示符或终端中,使用直接启动方式运行测试:locust -f bookstore_performance.py。启动成功后,在浏览器中访问 http://localhost:8089,在启动页面设置好模拟的用户数量(如 100)和每秒启动的用户数(如 10),点击“Start swarming”开始测试。

测试过程中,可以在 Statistics 模块查看各个接口的性能指标,如平均响应时间、吞吐量等。在 Failures 模块查看是否有请求失败,并根据失败信息排查问题。通过 Charts 模块观察系统性能随时间的变化趋势,例如每秒完成的请求数曲线、响应时间曲线等,判断系统在不同负载下的稳定性和性能表现。

测试结束后,根据收集到的数据进行分析。如果发现某个接口的平均响应时间过长,可能需要检查该接口的实现逻辑、数据库查询语句或者服务器资源配置等方面,以优化系统性能,确保系统能够满足实际业务需求,为用户提供快速、稳定的服务体验。

(二)复杂场景下的分布式测试案例(可选)

考虑一个大型电商系统,包含多个微服务,如用户服务、商品服务、订单服务、支付服务等,我们需要对整个系统进行全面的性能测试,以评估系统在高并发情况下的性能表现和稳定性。

首先,在多台机器上分别安装好 Locust 和 Python 环境,并确保机器之间网络连通。

在作为 master 主机的机器上,创建一个名为 ecommerce_performance_master.py 的测试脚本:

from locust import HttpLocust, TaskSet, task

# 定义用户行为类,这里模拟用户的登录、浏览商品、下单等操作
class UserBehavior(TaskSet):
    def on_start(self):
        # 用户登录操作
        self.client.post("/login", json={"username": "testuser", "password": "testpassword"})

    @task(3)
    def browse_products(self):
        # 浏览商品列表
        self.client.get("/products")

    @task(2)
    def view_product_detail(self):
        # 查看单个商品详情
        self.client.get("/products/1")

    @task(1)
    def place_order(self):
        # 创建订单
        self.client.post("/orders", json={"product_id": 1, "quantity": 1})

# 定义 HttpLocust 类
class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    host = "http://your-ecommerce-api-url"
    wait_time = lambda self: self.random.randint(1000, 5000)

在其他作为从机的机器上,创建相同的测试脚本,但在启动时使用分布式从机启动方式:locust -f ecommerce_performance_master.py --slave --master-host=[master 主机的 IP 地址]

在 master 主机上,使用以下命令启动 master 进程:locust -f ecommerce_performance_master.py --master

启动后,通过浏览器访问 master 主机的 Locust Web 界面(如 http://master-ip:8089),设置好模拟的总用户数(如 1000)、每秒启动的用户数(如 50)以及测试持续时间(如 1 小时)等参数,点击“Start swarming”开始分布式性能测试。

在测试过程中,master 主机将协调各个从机的工作,收集和汇总来自从机的测试数据,并在 Web 界面上实时展示系统的整体性能指标。测试人员可以通过 Statistics 模块查看各个接口在分布式环境下的性能表现,通过 Failures 模块及时发现和排查可能出现的问题,通过 Charts 模块分析系统在长时间高并发情况下的性能趋势,如随着时间推移,系统的吞吐量是否稳定、响应时间是否逐渐增加等情况。

通过这种分布式测试,可以充分利用多台机器的资源,模拟大规模的并发用户对复杂电商系统的访问,更真实地评估系统在实际生产环境下的性能和稳定性,发现系统在高负载情况下可能存在的性能瓶颈和潜在问题,为系统的优化和扩展提供有力的依据,确保电商系统能够应对海量用户的并发访问,保障业务的正常运营和用户体验。

更多推荐