2017-10-05 5 views
0

いくつかの条件に基づいてユーザーをリダイレクトするローカルAPIをテストしています。 Locustはシミュレートされたユーザーをエンドポイントに向けてリダイレクトしていません。アプリはすべてのリダイレクトを記録するので、これを知っています。 curlを使用して手動でエンドポイントにヒットした場合、ステータスは302で、Locationヘッダーが設定されていることがわかります。リダイレクトに続くローカルタスク

埋め込みclients.HttpSession.requestオブジェクトによれば、allow_redirectsオプションはデフォルトでTrueに設定されています。

アイデア?

答えて

0

LocustはPython用のRequests HTTPライブラリを使用しているので、あなたの答えが見つかるかもしれません。 The Response objectは、リダイレクトが発生したかどうか、リダイレクトの履歴に含まれるものを評価するために使用できます。

is_redirect:

この応答は(Session.resolve_redirectsによって) が自動的に処理されている可能性が十分に形成されたHTTPリダイレクトがある場合

真。

リダイレクトが適切に構成されていない可能性があります。

0

私たちのローカストテストでは、特にログインフェーズでリダイレクトを使用します。リダイレクトは問題なく処理されます。あなたが返す応答の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() 
関連する問題