zoukankan      html  css  js  c++  java
  • Locust 脚本开发入门(4)

    Locust 脚本开发入门(4)

     

    脚本开发入门

    本节主要介绍 Locust 执行参数化的方法,参数化的目的无非就是以下几种:

    • 模拟用户在不同场景下的传参差异化,比方说所有并发对同一个订单执行支付,也许你需要检验这样是否能发现到一些别的异常,但这是不符合性能测试需求的
    • 满足业务对用户传参的约束条件,比方说你如果压测的是即时通讯的消息收发,即便支持多终端在线,但大量并发登录一个账号也是是不符合实际的
    • 满足系统对用户传参的约束条件

    对一个参数执行参数化,首先得分清楚这个参数是属于 “基础数据” 还是 “业务数据” ,譬如 性别、省份、年月日,这些可以归纳为基础数据,而对于与被测试系统业务有一定关联性的,你可以归为业务数据,例如 账号密码、userId、orderId。

    通常来说,基础数据 的数据范围是相对数量固定的、内容有限的,即便切换测试环境也不影响的,所以一般在脚本中内实现随机抽取,例如:

    import random
    
    sex = random.choice(['男性', '女性'])
    year = random.randint(1949,2020)
    

    而业务数据动辄几百上千条,相对来说数量和内容都是可变的,则应该通过读取外部文件实现(注意:Locust 的负载是通过 单进程 + 多协程 的实现,并非 多进程 + 多线程)。

    范例:从 CSV 中读取参数实现参数化

    下面看一段脚本范例,实现了登录账号、密码的参数化:

    首先创建一个 csv 文件,第一列是登录账号,第二列是账号对应的密码,采用“,”分隔:

    13800000001,abcd12ty
    13800000002,abrd123y
    13800000003,a12d1rty
    13800000004,abc43454
    13800000005,abcd12we
    13800000006,abcd1wer
    13800000007,abceqwe4
    13800000008,abcd123k
    13800000009,abcd1sd2
    13800000010,123d124v
    

    保存为:username.csv

    然后,脚本实现:

    
    from locust import HttpUser, task, constant, SequentialTaskSet
    import queue
    
    class taskcase(SequentialTaskSet):
    
        @task
        def pft(self):
            user = self.user.user_list.get()
            # print("username:{},password:{}".format(user["username"],user["password"]))
            
            self.client.post(
                "/login", {"username": user["username"], "password": user["password"]})
                
            # 登录后的一系列操作
            
            self.user.user_list.put_nowait(user)
    
    class ApiUser(HttpUser):
    
        host = "http://www.demo.com"
        wait_time = constant(0)
        tasks = [taskcase]
        
        user_list = queue.Queue()
        
        with open("./username.csv"as file:
            for line in file:
                userInfo = line.split(',')
                data = {
                    "username": userInfo[0],
                    "password": userInfo[1]
                }
                
                user_list.put_nowait(data)
    
    

    实现效果

    创建了10个用户,user1~user10,依次取出测试账号 13800000001 ~ 13800000010,执行登录

     

  • 相关阅读:
    019_linuxC++之_函数模板引入
    018_linuxC++之_抽象类的引入
    017_linuxC++之_多态的引入
    《将博客搬至CSDN》
    016_linuxC++之_多重继承
    013_linuxC++之_派生类中权限的调整
    015_linuxC++之_覆写
    014_linuxC++之_不同类型的继承
    012_linuxC++之_类的继承定义
    011_linuxC++之_继承的引入
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/14859091.html
Copyright © 2011-2022 走看看