]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Portuguese translation for `docs/pt/docs/tutorial/testing.md` (#12164)
authormarcelomarkus <marcelomarkus@gmail.com>
Tue, 10 Sep 2024 10:35:14 +0000 (07:35 -0300)
committerGitHub <noreply@github.com>
Tue, 10 Sep 2024 10:35:14 +0000 (12:35 +0200)
docs/pt/docs/tutorial/testing.md [new file with mode: 0644]

diff --git a/docs/pt/docs/tutorial/testing.md b/docs/pt/docs/tutorial/testing.md
new file mode 100644 (file)
index 0000000..f734a7d
--- /dev/null
@@ -0,0 +1,249 @@
+# Testando
+
+Graças ao <a href="https://www.starlette.io/testclient/" class="external-link" target="_blank">Starlette</a>, testar aplicativos **FastAPI** Ă© fĂĄcil e agradĂĄvel.
+
+Ele Ă© baseado no <a href="https://www.python-httpx.org" class="external-link" target="_blank">HTTPX</a>, que por sua vez Ă© projetado com base em Requests, por isso Ă© muito familiar e intuitivo.
+
+Com ele, vocĂȘ pode usar o <a href="https://docs.pytest.org/" class="external-link" target="_blank">pytest</a> diretamente com **FastAPI**.
+
+## Usando `TestClient`
+
+/// info | "Informação"
+
+Para usar o `TestClient`, primeiro instale o <a href="https://www.python-httpx.org" class="external-link" target="_blank">`httpx`</a>.
+
+Certifique-se de criar um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, ativĂĄ-lo e instalĂĄ-lo, por exemplo:
+
+```console
+$ pip install httpx
+```
+
+///
+
+Importe `TestClient`.
+
+Crie um `TestClient` passando seu aplicativo **FastAPI** para ele.
+
+Crie funçÔes com um nome que comece com `test_` (essa Ă© a convenção padrĂŁo do `pytest`).
+
+Use o objeto `TestClient` da mesma forma que vocĂȘ faz com `httpx`.
+
+Escreva instruçÔes `assert` simples com as expressĂ”es Python padrĂŁo que vocĂȘ precisa verificar (novamente, `pytest` padrĂŁo).
+
+```Python hl_lines="2  12  15-18"
+{!../../../docs_src/app_testing/tutorial001.py!}
+```
+
+/// tip | "Dica"
+
+Observe que as funçÔes de teste sĂŁo `def` normais, nĂŁo `async def`.
+
+E as chamadas para o cliente tambĂ©m sĂŁo chamadas normais, nĂŁo usando `await`.
+
+Isso permite que vocĂȘ use `pytest` diretamente sem complicaçÔes.
+
+///
+
+/// note | "Detalhes tĂ©cnicos"
+
+VocĂȘ tambĂ©m pode usar `from starlette.testclient import TestClient`.
+
+**FastAPI** fornece o mesmo `starlette.testclient` que `fastapi.testclient` apenas como uma conveniĂȘncia para vocĂȘ, o desenvolvedor. Mas ele vem diretamente da Starlette.
+
+///
+
+/// tip | "Dica"
+
+Se vocĂȘ quiser chamar funçÔes `async` em seus testes alĂ©m de enviar solicitaçÔes ao seu aplicativo FastAPI (por exemplo, funçÔes de banco de dados assĂ­ncronas), dĂȘ uma olhada em [Testes assĂ­ncronos](../advanced/async-tests.md){.internal-link target=_blank} no tutorial avançado.
+
+///
+
+## Separando testes
+
+Em uma aplicação real, vocĂȘ provavelmente teria seus testes em um arquivo diferente.
+
+E seu aplicativo **FastAPI** tambĂ©m pode ser composto de vĂĄrios arquivos/mĂłdulos, etc.
+
+### Arquivo do aplicativo **FastAPI**
+
+Digamos que vocĂȘ tenha uma estrutura de arquivo conforme descrito em [Aplicativos maiores](bigger-applications.md){.internal-link target=_blank}:
+
+```
+.
+├── app
+│   â”œâ”€â”€ __init__.py
+│   â””── main.py
+```
+
+No arquivo `main.py` vocĂȘ tem seu aplicativo **FastAPI**:
+
+
+```Python
+{!../../../docs_src/app_testing/main.py!}
+```
+
+### Arquivo de teste
+
+EntĂŁo vocĂȘ poderia ter um arquivo `test_main.py` com seus testes. Ele poderia estar no mesmo pacote Python (o mesmo diretĂłrio com um arquivo `__init__.py`):
+
+``` hl_lines="5"
+.
+├── app
+│   â”œâ”€â”€ __init__.py
+│   â”œâ”€â”€ main.py
+│   â””── test_main.py
+```
+
+Como esse arquivo estĂĄ no mesmo pacote, vocĂȘ pode usar importaçÔes relativas para importar o objeto `app` do mĂłdulo `main` (`main.py`):
+
+```Python hl_lines="3"
+{!../../../docs_src/app_testing/test_main.py!}
+```
+
+...e ter o cĂłdigo para os testes como antes.
+
+## Testando: exemplo estendido
+
+Agora vamos estender este exemplo e adicionar mais detalhes para ver como testar diferentes partes.
+
+### Arquivo de aplicativo **FastAPI** estendido
+
+Vamos continuar com a mesma estrutura de arquivo de antes:
+
+```
+.
+├── app
+│   â”œâ”€â”€ __init__.py
+│   â”œâ”€â”€ main.py
+│   â””── test_main.py
+```
+
+Digamos que agora o arquivo `main.py` com seu aplicativo **FastAPI** tenha algumas outras **operaçÔes de rotas**.
+
+Ele tem uma operação `GET` que pode retornar um erro.
+
+Ele tem uma operação `POST` que pode retornar vĂĄrios erros.
+
+Ambas as *operaçÔes de rotas* requerem um cabeçalho `X-Token`.
+
+//// tab | Python 3.10+
+
+```Python
+{!> ../../../docs_src/app_testing/app_b_an_py310/main.py!}
+```
+
+////
+
+//// tab | Python 3.9+
+
+```Python
+{!> ../../../docs_src/app_testing/app_b_an_py39/main.py!}
+```
+
+////
+
+//// tab | Python 3.8+
+
+```Python
+{!> ../../../docs_src/app_testing/app_b_an/main.py!}
+```
+
+////
+
+//// tab | Python 3.10+ non-Annotated
+
+/// tip | "Dica"
+
+Prefira usar a versĂŁo `Annotated` se possĂ­vel.
+
+///
+
+```Python
+{!> ../../../docs_src/app_testing/app_b_py310/main.py!}
+```
+
+////
+
+//// tab | Python 3.8+ non-Annotated
+
+/// tip | "Dica"
+
+Prefira usar a versĂŁo `Annotated` se possĂ­vel.
+
+///
+
+```Python
+{!> ../../../docs_src/app_testing/app_b/main.py!}
+```
+
+////
+
+### Arquivo de teste estendido
+
+VocĂȘ pode entĂŁo atualizar `test_main.py` com os testes estendidos:
+
+```Python
+{!> ../../../docs_src/app_testing/app_b/test_main.py!}
+```
+
+Sempre que vocĂȘ precisar que o cliente passe informaçÔes na requisição e nĂŁo souber como, vocĂȘ pode pesquisar (no Google) como fazer isso no `httpx`, ou atĂ© mesmo como fazer isso com `requests`, jĂĄ que o design do HTTPX Ă© baseado no design do Requests.
+
+Depois Ă© sĂł fazer o mesmo nos seus testes.
+
+Por exemplo:
+
+* Para passar um parĂąmetro *path* ou *query*, adicione-o Ă  prĂłpria URL.
+* Para passar um corpo JSON, passe um objeto Python (por exemplo, um `dict`) para o parĂąmetro `json`.
+* Se vocĂȘ precisar enviar *Dados de FormulĂĄrio* em vez de JSON, use o parĂąmetro `data`.
+* Para passar *headers*, use um `dict` no parĂąmetro `headers`.
+* Para *cookies*, um `dict` no parĂąmetro `cookies`.
+
+Para mais informaçÔes sobre como passar dados para o backend (usando `httpx` ou `TestClient`), consulte a <a href="https://www.python-httpx.org" class="external-link" target="_blank">documentação do HTTPX</a>.
+
+/// info | "Informação"
+
+Observe que o `TestClient` recebe dados que podem ser convertidos para JSON, nĂŁo para modelos Pydantic.
+
+Se vocĂȘ tiver um modelo Pydantic em seu teste e quiser enviar seus dados para o aplicativo durante o teste, poderĂĄ usar o `jsonable_encoder` descrito em [Codificador compatĂ­vel com JSON](encoder.md){.internal-link target=_blank}.
+
+///
+
+## Execute-o
+
+Depois disso, vocĂȘ sĂł precisa instalar o `pytest`.
+
+Certifique-se de criar um [ambiente virtual](../virtual-environments.md){.internal-link target=_blank}, ativĂĄ-lo e instalĂĄ-lo, por exemplo:
+
+<div class="termy">
+
+```console
+$ pip install pytest
+
+---> 100%
+```
+
+</div>
+
+Ele detectarĂĄ os arquivos e os testes automaticamente, os executarĂĄ e informarĂĄ os resultados para vocĂȘ.
+
+Execute os testes com:
+
+<div class="termy">
+
+```console
+$ pytest
+
+================ test session starts ================
+platform linux -- Python 3.6.9, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
+rootdir: /home/user/code/superawesome-cli/app
+plugins: forked-1.1.3, xdist-1.31.0, cov-2.8.1
+collected 6 items
+
+---> 100%
+
+test_main.py <span style="color: green; white-space: pre;">......                            [100%]</span>
+
+<span style="color: green;">================= 1 passed in 0.03s =================</span>
+```
+
+</div>