-
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add documentation about asynchronous testing (pytest-asyncio and httpx) #1619
Add documentation about asynchronous testing (pytest-asyncio and httpx) #1619
Conversation
Codecov Report
@@ Coverage Diff @@
## master #1619 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 236 237 +1
Lines 7073 7078 +5
=========================================
+ Hits 7073 7078 +5
Continue to review full report at Codecov.
|
|
||
@pytest.mark.asyncio | ||
async def test_root(): | ||
async with AsyncClient(app=main.app, base_url='http://test') as ac: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You probably need to add trust_env=False
here as well, otherwise the async client might go through a proxy. Not sure if this is an upstream bug though.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My initial thought was to simply follow the HTTPX example for calling into python web apps. Also, HTTPX sets some constraints on the proxies it accepts from the environment, I don't know if that changes anything.
Otherwise:
async with AsyncClient(app=main.app, base_url='http://test') as ac: | |
async with AsyncClient(app=main.app, base_url='http://test', trust_env=False) as ac: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
encode/httpx#1039 I think it might be a bug.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, interesting. What do you propose, we add the trust_env=False
for now?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I think that's reasonable. Users who have some default network proxy active (e.g. for privacy reasons or in company network situations) will get some bizarre test failures.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hi there, chiming in to confirm that this odd behavior is indeed due to a bug in HTTPX.
So it might be okay to go with this as-is (i.e. without the trust_env=False
hack), keeping in mind that encode/httpx#1039 looks to be fairly straight-forward to fix (in case anyone wants to give it a go - happy to review a PR, but no expectations of course), so hopefully a fix will be released soon and users equipped with proxies won't encounter this.
@marco-neumann-by just to point out that the issue with httpx that we hung up on is resolved now |
Awesome! Great job @empicano ! Thanks for your contribution! 👏 📝 🤓 🍰 Thanks everyone for the discussion (and @florimondmanca for HTTPX 🚀 💙 ). |
Addressing #1273 and encode/starlette#652, I added a section about asynchronous testing via pytest-asyncio and httpx to the documentation. I also made a small note (+ link) in the beginner tutorial about it.