# 3.1 Configuração do Ambiente

Considerando a aplicação que será desenvolvida, ela fará uso do framework Django e para realizarmos o TDD, também precisaremos do Selenium. Segue abaixo a instrução para a instalação de ambos.Após a instalação das ferramentas básicas, conforme apresentado na [Seção 1.2](https://aurimrv.gitbook.io/tdd-python/1-introducao/1-2-configuracao-inicial-do-ambiente), a seguir são apresentadas as demais configurações para dar início ao desenvolvimento da aplicação exemplo com TDD.&#x20;

O primeiro passo é verificarmos as versões das ferramentas já instaladas. Os comandos a seguir permitem fazer tal verificação.

```bash
$ pyenv --version
pyenv 2.4.3
    
$ pyenv virtualenvs
  3.8.10/envs/superlists (created from /home/tdd/.pyenv/versions/3.8.10)
  superlists (created from /home/tdd/.pyenv/versions/3.8.10)

$ pyenv virtualenv-delete superlists
pyenv-virtualenv: remove /home/tdd/.pyenv/versions/3.8.10/envs/superlists? (y/N) y

$ git --version
git version 2.34.1
```

Caso tenha perdido os passos dessa instalação, retorne à [Seção 1.2](https://aurimrv.gitbook.io/tdd-python/1-introducao/1-2-configuracao-inicial-do-ambiente) e proceda a configuração inicial do ambiente.

Com essas ferramentas instaladas e as variáveis de ambiente definidas, é possível agora iniciarmos a instalação das ferramentas do Python dentro do ambiente virtual criado anteriormente.&#x20;

#### Configurando o Ambiente Virtual

O primeiro passo para dar início ao desenvolvimento da nossa aplicação é criação e configuração do ambiente virtual. Para isso, vamos executar os comandos abaixo:

```bash
$ mkdir superlists
$ cd $HOME/superlists
$ pyenv virtualenv 3.10.12 superlists
$ pyenv activate superlists
$ (superlists) tdd@mlp:~/superlists$
```

Ao final da execução do comando `pyenv activate superlists`, observa-se uma pequena mudança no *prompt* de comando, ao invés de aparecer apenas um sinal de `$`, o *prompt* passa a ser precedido por `(superlists)$` , indicando que você está conectado ao ambiente virtual.&#x20;

Os comandos a seguir mostram como desativar e ativar o `virtualenv`. Ou seja, estando no ambiente virtual, basta usar o comando `deactivate` que você deixa o ambiente. Se necessitar retornar, basta executar o comando `workon superlists`.

```bash
(superlists) $ pyenv deactivate 

tdd@mlp:~/superlists$
```

#### Instalação do Django e Selenium dentro do Ambiente Virtual

O [django](https://www.djangoproject.com/) é um framework para construção de sistemas Web em Python e o [Selenium](https://selenium-python.readthedocs.io/) é uma ferramenta de captura e reprodução que permite a execução de testes automatizados via navegador Web. Para instalar ambas as ferramentas e utilizá-las em nossos projetos, primeiro vamos criar o arquivo denominado `requirements.txt` e, dentro desse arquivo incluírmos o seguinte conteúdo:

```
django==5.0.6
selenium==4.22.0
```

A vantagens de usarmos o arquivo requirements.txt é que deixamos documentadas as versões dos plugins e ferramenas que estamos utilizando. Nesse caso, estamos instalando o Django e Selenium nas versões, 5.0.6 e 4.22.0, respectivamente. Para proceder com a instalação, estando com o ambiente virtual ativado, basta executar o comando `pip`, conforme abaixo:

```bash
tdd@mlp:~/superlists$ pyenv activate superlists
(superlists) auri@av:~/superlists$ pip install -r requirements.txt
Collecting django==5.0.6
  Using cached Django-5.0.6-py3-none-any.whl (8.2 MB)
Collecting selenium==4.22.0
  Downloading selenium-4.22.0-py3-none-any.whl (9.4 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 9.4/9.4 MB 17.4 MB/s eta 0:00:00
Collecting sqlparse>=0.3.1
  Using cached sqlparse-0.5.0-py3-none-any.whl (43 kB)
Collecting asgiref<4,>=3.7.0
  Using cached asgiref-3.8.1-py3-none-any.whl (23 kB)
Collecting trio-websocket~=0.9
  Downloading trio_websocket-0.11.1-py3-none-any.whl (17 kB)
Collecting urllib3[socks]<3,>=1.26
  Downloading urllib3-2.2.2-py3-none-any.whl (121 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 121.4/121.4 kB 5.0 MB/s eta 0:00:00
Collecting certifi>=2021.10.8
  Downloading certifi-2024.6.2-py3-none-any.whl (164 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 164.4/164.4 kB 4.8 MB/s eta 0:00:00
Collecting typing_extensions>=4.9.0
  Using cached typing_extensions-4.12.2-py3-none-any.whl (37 kB)
Collecting websocket-client>=1.8.0
  Downloading websocket_client-1.8.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.8/58.8 kB 2.9 MB/s eta 0:00:00
Collecting trio~=0.17
  Downloading trio-0.25.1-py3-none-any.whl (467 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 467.7/467.7 kB 3.1 MB/s eta 0:00:00
Collecting sortedcontainers
  Downloading sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Collecting sniffio>=1.3.0
  Downloading sniffio-1.3.1-py3-none-any.whl (10 kB)
Collecting attrs>=23.2.0
  Downloading attrs-23.2.0-py3-none-any.whl (60 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.8/60.8 kB 6.8 MB/s eta 0:00:00
Collecting idna
  Downloading idna-3.7-py3-none-any.whl (66 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 66.8/66.8 kB 6.6 MB/s eta 0:00:00
Collecting exceptiongroup
  Downloading exceptiongroup-1.2.1-py3-none-any.whl (16 kB)
Collecting outcome
  Downloading outcome-1.3.0.post0-py2.py3-none-any.whl (10 kB)
Collecting wsproto>=0.14
  Downloading wsproto-1.2.0-py3-none-any.whl (24 kB)
Collecting pysocks!=1.5.7,<2.0,>=1.5.6
  Downloading PySocks-1.7.1-py3-none-any.whl (16 kB)
Collecting h11<1,>=0.9.0
  Downloading h11-0.14.0-py3-none-any.whl (58 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 7.3 MB/s eta 0:00:00
Installing collected packages: sortedcontainers, websocket-client, urllib3, typing_extensions, sqlparse, sniffio, pysocks, idna, h11, exceptiongroup, certifi, attrs, wsproto, outcome, asgiref, trio, django, trio-websocket, selenium
Successfully installed asgiref-3.8.1 attrs-23.2.0 certifi-2024.6.2 django-5.0.6 exceptiongroup-1.2.1 h11-0.14.0 idna-3.7 outcome-1.3.0.post0 pysocks-1.7.1 selenium-4.22.0 sniffio-1.3.1 sortedcontainers-2.4.0 sqlparse-0.5.0 trio-0.25.1 trio-websocket-0.11.1 typing_extensions-4.12.2 urllib3-2.2.2 websocket-client-1.8.0 wsproto-1.2.0

[notice] A new release of pip is available: 23.0.1 -> 24.1
[notice] To update, run: python -m pip install --upgrade pip
(superlists) tdd@mlp:~$ 
```

O Selenium permite a execução dos testes em vários navegadores mas, para cada um deles, é necessário baixar um driver correspondente. No nosso exemplo, faremos o download dos drivers para Firefox, denominado de [Gecko Driver](https://github.com/mozilla/geckodriver/releases), e Google Chrome, denominado Chrome Driver, conforme descrito a seguir. Você deve baixar o driver na versão compatível com a de seu navegador web. No caso abaixo, utilizamos o [Gecko Driver 0.34.0](https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux64.tar.gz) e o [ChromeDriver 126.0.6478.63](https://googlechromelabs.github.io/chrome-for-testing/), ambos para sistemas Linux 64 bits.

Primeiro é necessário fazer o download dos arquivos compactados com os drivers acima e, em seguida, a instalação de ambos os drivers é feita simplesmente descompactando o conteúdo dos arquivos dentro da pasta `/home/mlptdd/.pyenv/versions/3.10.2/envs/superlists/bin`, conforme apresentado a seguir:

```bash
$ cd $HOME/.pyenv/bin
$ wget https://github.com/mozilla/geckodriver/releases/download/v0.34.0/geckodriver-v0.34.0-linux64.tar.gz
$ tar zxvf geckodriver-v0.34.0-linux64.tar.gz

$ wget https://storage.googleapis.com/chrome-for-testing-public/126.0.6478.63/linux64/chromedriver-linux64.zip
$ unzip chromedriver-linux64.zip 
$ mv chromedriver-linux64/chromedriver .

$ rm -rf geckodriver-v0.34.0-linux64.tar.gz chromedriver-linux64*
```

Feita as instalações, é possível conferir as versões dos drivers com os comandos abaixo:

```bash
$ cd $HOME/.pyenv/bin
$ ./geckodriver --version
geckodriver 0.34.0 (c44f0d09630a 2024-01-02 15:36 +0000)

The source code of this program is available from
testing/geckodriver in https://hg.mozilla.org/mozilla-central.

This program is subject to the terms of the Mozilla Public License 2.0.
You can obtain a copy of the license at https://mozilla.org/MPL/2.0/.
```

```bash
./chromedriver --version
ChromeDriver 126.0.6478.63 (df799988fdc9c52db48650316d53800b1e9aa69e-refs/branch-heads/6478_56@{#5})
```

Pronto. Ao final de todos esses passos estamos prontos para dar início ao desenvolvimento de nossa aplicação com base no TDD. Vamos lá!?


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://aurimrv.gitbook.io/tdd-python/3-desenvolvimento-dirigido-por-teste/3-1-configuracao-do-ambiente.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
