2014-06-24 2 views
2

Comme Httpretty fonctionne sur la couche socket Python, même les requêtes Web Twisted doivent être mockées. Mais je vois un comportement étrange sur l'utilisation de httpretty. Il essaie de se connecter à localhost en quelque sorte. Ci-dessous exemple montre la différence:Mocking Requêtes HTTP client Twisted utilisant HTTPretty

import httpretty 
from twisted.internet import reactor 
from twisted.internet.defer import Deferred 
from twisted.web.client import Agent 
from twisted.web.http_headers import Headers 
import requests 

@httpretty.activate 
def main(): 
    httpretty.register_uri(
     httpretty.GET, "http://example.com", 
     body='[{"title": "Test Deal"}]', 
     content_type="application/json") 

    agent = Agent(reactor) 

    d = agent.request(
     'GET', 
     'http://example.com', 
     Headers({'User-Agent': ['Twisted Web Client Example']}), 
     None) 

    def cbError(message): 
     print 'Async Failed : %s' % message 
    d.addErrback(cbError) 

    def cbShutdown(ignored): reactor.stop() 
    d.addBoth(cbShutdown) 

    reactor.run() 

    print 'Response received from Sync: %s' % \ 
      requests.get('http://example.com').status_code 

main() 

Et la réponse est:

Async Failed : [Failure instance: Traceback (failure with no frames): <class 'twisted.internet.error.ConnectionRefusedError'>: Connection was refused by other side: 111: Connection refused. 
] 
Response received from Sync: 200 

Comment puis-je utiliser httpretty avec le client Web Twisted?

Répondre

2

Vous ne pouvez pas. HTTPretty est bloquant Les bibliothèques client HTTP (comme les demandes). Il ne se moque pas des sockets non bloquantes.

+0

Ah ok. Merci. Des solutions de contournement je peux utiliser à la place de httpretty à cet effet? – prat0318

+0

Il y a quelques efforts pour créer une bibliothèque de test pour les applications utilisant l'agent. Vous pouvez nous aider avec ça, . –

Questions connexes