从Python代码中读取主机值

ygya80vv  于 2023-04-04  发布在  Python
关注(0)|答案(5)|浏览(115)

locust --no-web --client=1 --hatch-rate=1 --num-request=2 --host= http://localhost
我想在我的HTTPLocust类中读取cmd行中提供的--host值。我知道我可以使用host属性进行直接赋值,但我不想要它。我想在HTTPLocust类中读取cmd行中的值。我正在构建自定义日志,并希望将该值传递给日志。我尝试了HTTPLocust.host,但没有返回任何值。
我还想从python代码中读取--web-port。

1hdlvixo

1hdlvixo1#

新答案

下面有一个比我最初的解决方案更简单的解决方案。每个TaskSet都有一个locust属性,该属性链接回其父Locust locustinstance,因此类似这样的东西将完全满足您的需求:

class UserBehaviour(TaskSet):
    def __init__(self, parent):
        super().__init__(parent)
        print(self.locust.host)

旧答案

看一下HttpSession的代码,似乎base_url就是您想要的。
因此,类似下面的代码应该会给予当前的host,可以是默认值,也可以是在命令行中指定的值:

class HostGetter(locust.TaskSet):
    @locust.Task()
    def get_host(self):
        print(self.client.base_url)
bxgwgixi

bxgwgixi2#

可以通过User()类的示例访问host变量。参见下面的示例:

from locust import HttpLocust, TaskSet, task
import random, requests, time, os, inspect, json, sys

class UserBehaviour(TaskSet):
    @task(1)
    def test1(self):
        user = User()  
        print(user.host)
        self.client.get("/v3/User/ListOfCoupon/")

class User(HttpLocust):
    task_set = UserBehaviour
    min_wait = 1000
    max_wait = 3000

查看日志:

~/P/m/p/general (master ⚡↑) locust -f app_couponlist.py --host=http://www.google.com
[2017-09-19 14:33:13,020] Mesuts-MacBook.local/INFO/locust.main: Starting web monitor at *:8089
[2017-09-19 14:33:13,021] Mesuts-MacBook.local/INFO/locust.main: Starting Locust 0.8a3
[2017-09-19 14:33:22,281] Mesuts-MacBook.local/INFO/locust.runners: Hatching and swarming 5 clients at the rate 1 clients/s...
[2017-09-19 14:33:22,282] Mesuts-MacBook.local/INFO/stdout: http://www.google.com
[2017-09-19 14:33:22,282] Mesuts-MacBook.local/INFO/stdout:
[2017-09-19 14:33:23,285] Mesuts-MacBook.local/INFO/stdout: http://www.google.com
[2017-09-19 14:33:23,285] Mesuts-MacBook.local/INFO/stdout:
[2017-09-19 14:33:24,226] Mesuts-MacBook.local/INFO/stdout: http://www.google.com
gijlo24d

gijlo24d3#

这是我的代码:

import time,csv,argparse

class MySQLLocust(Locust):
    parser = argparse.ArgumentParser()
    parser.add_argument('--host', '--host')
    args, unknown = parser.parse_known_args()
    print("Host = " + args.host)

现在当我给予:
locust -f mysql_locust.py --host=myhost-vm-101 --no-web --clients=2 --hatch-rate=10 --run-time=5m
我得到了预期的print语句结果:
Host = myhost-vm-101

nxowjjhe

nxowjjhe4#

可以通过sys.argv访问
或通过argparse解析选项

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-H', '--host')
args, unknown = parser.parse_known_args()

print str(args.host)
yvfmudvl

yvfmudvl5#

对于蝗虫v2.x,这对我来说很有效:

class MyTaskSet(SequentialTaskSet):

    def __init__(self, parent):

        super().__init__(parent)

        user = parent
        while isinstance(parent, TaskSet):
            user = user.parent
        assert (isinstance(parent, User))

        self.host = user.environment.host

相关问题