私たちのローカストテストでは、特にログインフェーズでリダイレクトを使用します。リダイレクトは問題なく処理されます。あなたが返す応答のstatus_code
を印刷します。それは200,3xxなどの悪化ですか?
もう1つの提案:すべてのテストワークフローをLocustファイルに入れないでください。そのため、問題をデバッグするのが難しくなります。代わりに、Pythonリクエストライブラリを直接使用してワークフローをシミュレートするスタンドアロンのPythonスクリプトを作成します。その単純で非ローカストのテストスクリプトで、リダイレクションの問題のような絡みをなくしてください。その作業をしたら、ファイルやクラスに行ったことを抽出して、ローカストのタスクにクラスを使用させます。
ここに私が意味するものの例があります。 FooApplication
は、彼がlocustファイルと単純なテストスクリプトによって消費される実際の作業を行います。
# foo_app.py
class FooApplication():
def __init__(self, client):
self.client = client
self.is_logged_in = False
def login(self):
self.client.cookies.clear()
self.is_logged_in = False
name = '/login'
response = self.client.post('/login', {
'user': 'testuser',
'password': '12345'
}, allow_redirects=True, name=name)
if not response.ok:
self.log_failure('Login failed', name, response)
def load_foo(self):
name = '/foo'
response = self.client.get('/login', name=name)
if not response.ok:
self.log_failure('Foo request failed ', name, response)
def log_failure(self, message, name, response):
pass # add some logging
# foo_test_client.py
# Use this test file to iron out kinks in your request workflow
import requests
from locust.clients import HttpSession
from foo_app import FooApplication
client = HttpSession('http://dev.foo.com')
app = FooApplication(client)
app.login()
app.load_foo()
#locustfile.py
from foo_app import FooApplication
class FooTaskSet(TaskSet):
def on_start(self):
self.foo = FooApplication(self.client)
@task(1)
def login(self):
if not self.foo.is_logged_in:
self.foo.login()
@task(5) # 5x more likely to load a foo vs logging in again
def load_foo(self):
if self.foo.is_logged_in:
self.load_foo()
else:
self.login()