性能测试工具 在用 locust 的时候,写了个 for,然后并发数量就不收控制了。。。求助

当里个当 · 2017年04月19日 · 最后由 当里个当 回复于 2017年04月21日 · 3360 次阅读

因为 request 请求要遍历一些参数,所以用 for 做了遍历。。。。但是流量就不收控制了,我设置了 5 的并发。。。。最后到了 20 多。。

class UserBehavior(TaskSet):

    @task(1)
    def start_congche(self):
        filename = 'D:\测试\项目\精励评分\从车评分/阳光压力测试数据.csv'
        with open(filename) as f:
            reader = csv.DictReader(f)
            for test in reader:
                self.client.post("/DataPreFillServer/DataPreFillProductService", first +test["vin"] + vincode +test["vehicle_code"] + vehicleCode + end)

class WebsiteUser(HttpLocust):
    task_set = UserBehavior
    host = "http://10.10.6.12:8080"
    min_wait = 1000
    max_wait = 1000

但是如果我正常的写的话。。。不用 for 遍历,就没有问题。。。。就 5 个并发。。。

class UserBehavior(TaskSet):

         @task(1)
         def start_congche(self):
             self.client.post("/DataPreFillServer/DataPreFillProductService", first + vincode + vehicleCode + end)


求助啊。。。设置到怎么回事。。。。。

共收到 17 条回复 时间 点赞

这是必然的,for 循环也算在内了

徐晓东 回复

这个流程是怎么算的?因为我理解的就是 locust 的 post 请求是单独的运行,怎么会把 for 算在里面?请教。。。
另外,如果要写循环的话,这个要怎么写?多谢

当里个当 回复

locust 的 runner 是针对TaskSet进行执行、调度的,而它的统计是针对每个request

你可以这么理解:TaskSet是一个事务,这个事务里面允许存在多次request

jacexh 回复

我也是这么理解的。。。TaskSet 是一个事物,所以我的 for 是写在 request 上面,执行一次实物,每次发送 request,然后循环里面的 request 的参数。。
但是现实是流量完全不受控了。。。问题在哪?一脸懵逼~~~

我看这代码的意思是 UserBehavior 这个 TaskSet 子类进行 (5 个) 并发,start_congche 方法中 for 循环了 post 请求,所以应该会有 5*for 循环数的请求出去啊。

当里个当 回复

把数据解析放到类内,函数外,用 yeild 取一个用一个,取结束在重新取,这样就好了

徐晓东 回复

没尝试成功。。。求源代码。。。

chen 回复

那么 for 丢在外面。。还怎么循环。。。求指导

当里个当 回复

里面有事例,gen_loop_csv_reader,解析 csv 文件的

徐晓东 回复

CSV 解析那我我都会,在下才疏浅薄,没有看带 github 里面用 locust 的 request 相关的方法去使用。。。里面用了 thriftpy 的框架。。没看到怎么循环的调用相关的参数。。。

12楼 已删除
当里个当 回复

函数不是告诉你了么,gen_loop_csv_read

当里个当 回复

这是用 yeild 写的,没次发一个请求可以取一个数据,发多个就取多个,从上往下取的,这解释很明显了啊,我只没写出来罢了

@wuxixuxiaodong ,杀鸡焉用牛刀。建议楼主好好读读 debugtalk 发在论坛的贴,就明白了。http://debugtalk.com/post/head-first-locust-advanced-script/,里面有详细教程

徐晓东 回复

我已经更新了一下 github 的 ping_pong.py,你可以看到它如何解析文件的,带注释了。

独行数息 回复

太不容易了。。。非常感谢。。。这里面的例子简单明了。。。适合我这样 “才疏浅薄” 的。。。非常感谢,调通了。这个人是做了一个队列,然后从队里里面去取值。。。

徐晓东 回复

非常感谢,我调通了。。。。您的框架写得真好,我有空研究下。。。非常感谢指导。。。。

当里个当 关闭了讨论 04月21日 18:26
当里个当 重新开启了讨论 04月21日 18:27
当里个当 关闭了讨论 04月25日 09:06
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册