【发布时间】:2021-12-31 04:22:08
【问题描述】:
[编辑:阅读回复后我意识到我的问题过于简单化了。]
我是 Locust 的新手,不知道如何解决这个问题。
我有一个函数(称为“get_doc”),它传递了一个 locust.HttpSession() 并使用它来发出一个 HTTP 请求。它获取响应并对其进行解析,然后将其返回多层调用。这些更高级别的调用之一会查看返回的已解析文档,以确定响应是否符合预期。如果没有,我希望 Locust 将请求/响应标记为失败。代码草图是:
class MyUser (HttpUser):
@task
def mytask(self):
behavior1 (self.client)
def bahavior1(session):
doc = get_doc(session, url1)
if not doc_ok (doc):
??? how to register a failure with Locust here...
doc2 = get_doc(session, url2)
...
def get_doc(http_session, url):
page = http_session.get(url)
doc = parse (page)
return doc
可能有多个行为[n] 函数和多个 Locust 用户调用它们。
一个限制是我希望将特定于 Locust 的内容排除在 bahavior1() 之外,以便我可以使用普通的 Requests 会话来调用它。我曾尝试在 get_doc() 中做类似的事情(catch_response 参数和成功/失败的东西实际上是以 'session' 为 HttpSession 对象的条件):
def get_doc (session, meth, url):
resp = session.request (meth, url, catch_response=True)
doc = parse (resp.content)
doc.logfns = resp.success, resp.failure
return doc
然后在 behavior1() 或一些更高的上游调用者中我可以
doc.logfns[1]("Document not as expected")
或
doc.logfns[0] # Looks good!
不幸的是,这不起作用;对它们的调用不会产生错误,但 Locust 似乎也没有记录任何成功或失败。我不确定它是否应该工作,或者我在我的代码中搞砸了一些东西。这可行吗?有没有更好的办法?
【问题讨论】:
-
如果你使用 catch_response=True 你必须使用 with 块。否则(如您所见)它什么都不做。
-
好吧,我害怕那个。我会寻找另一种方法。谢谢。
标签: locust