Giter VIP home page Giter VIP logo

teste-certi's Introduction

Python Flask

Desafio Técnico de Software - CERTI

Introdução

Olá, seja bem-vindo.

Esta aplicação foi desenvolvida como resolução do desafio técnico proposto em e-mail.

O teste consistia na seguinte proposta:

Na linguagem de sua preferência, crie um servidor HTTP que, para cada requisição GET, retorne um JSON cuja chave extenso seja a versão por extenso do número inteiro enviado no path. Os números podem estar no intervalo [-99999, 99999].

Exemplos:

λ curl http://localhost:3000/1
{ "extenso": "um" }
λ curl http://localhost:3000/-1042
{ "extenso": "menos mil e quarenta e dois" }
λ curl http://localhost:3000/94587
{ "extenso": "noventa e quatro mil e quinhentos e oitenta e sete" }

Informações gerais

O repositório da aplicação está disponível no Github, em modo privado e compartilhado com o usuário "seletivo-certi-cdm", conforme solicitado.

Esta foi desenvolvida na liguagem Python (versão 3.8.5) por meio do microframework Flask. Para mais detalhes das bibliotecas utilizadas, consulte o arquivo requirements.txt.

Estrutura da aplicação

├── app.py
├── functions.py
├── num_dict.py
├── docker-compose.yml
├── Dockerfile
├── README.md
├── requirements.txt
├── scan_api
│   ├── scanapi.yaml
├── scanapi.conf
├── templates
│   ├── home.html
│   └── tests-report.html
└── tests
    ├── __init__.py
    └── test_routes.py

Deployment

Para rodar a aplicação na sua máquina, recomendamos a criação de um ambiente virtual para evitar possíveis problemas com as versões das bibliotecas utilizadas e suas dependências. Para isso, siga os seguintes passos:

> python -m venv NOME_ENV
> source NOME_ENV/bin/activate
> pip install -r requirements.txt
> flask run --host=localhost --port=3000

Com isso, a aplicação será executada no endereço http://localhost:3000/ e, caso queira mudar o endereço do host e da porta utilizada, basta informar no momento da execução, mudando os parâmetros acima conforme desejar.

Entretanto, se você possuir o Docker instalado, é possível também rodar a aplicação por meio de um container, cuja imagem está disponível aqui. Após o download, execute os seguintes comandos em seu terminal:

# carregar imagem para o docker
>  gunzip -c container.teste_certi.tar.gz | docker load

# executar o container pela primeira vez
> docker run -d --name=teste_certi_container --publish 3000:3000 teste-certi_web

Caso opte por não fazer o download da imagem, você pode rodar a aplicação criando o container com o seguinte comando:

> docker-compose up

No caso da aplicação ser executada no Docker, o endereço será http://0.0.0.0:3000/ que tomaremos por padrão daqui pra frente.

Principais Endpoints

endpoint descrição
/ ou /home Apresentação e informações gerais/documentação da aplicação.
/extenso/{num} Gera a versão por extenso do paramêtro {num}. Por definição, {num} deve ser um número inteiro entre [-9999,99999]. Caso não seja, será retornada uma mensagem de erro.
/scanapi Apresentação do report gerado pela execução dos testes usando a ferramenta ScanAPI (mais informações sobre a mesma a seguir).

Testes

Foram implementados dois conjuntos de testes, utilizando Pystest e a ScanAPI (uma ferramenta para testes de integração e geração de reports), localizados nos diretórios tests/ e scan_api/, respectivamente.

Para executar os testes do Pytest, execute o comando:

> pytest -v

Para executar os testes da ScanAPI, execute o comando:

> scanapi run scan_api/scanapi.yaml

Para os testes com a ScanAPI, será gerado um report destes em um aquivo chamado tests-report.html, que poderá ser acessado pelo endpoint /scanapi.

Exemplos de uso

> curl http://0.0.0.0:3000/extenso/0
{
  "extenso": "zero"
}
> curl http://0.0.0.0:3000/extenso/10
{
  "extenso": "dez"
}
> curl http://0.0.0.0:3000/extenso/-19
{
  "extenso": "menos dezenove"
}
> curl http://0.0.0.0:3000/extenso/73
{
  "extenso": "setenta e tres"
}
> curl http://0.0.0.0:3000/extenso/100
{
  "extenso": "cem"
}
> curl http://0.0.0.0:3000/extenso/110
{
  "extenso": "cento e dez"
}
> curl http://0.0.0.0:3000/extenso/-666
{
  "extenso": "menos seiscentos e sessenta e seis"
}
> curl http://0.0.0.0:3000/extenso/1073
{
  "extenso": "mil e setenta e tres"
}
> curl http://0.0.0.0:3000/extenso/-99100
{
  "extenso": "menos noventa e nove mil e cem"
}

teste-certi's People

Contributors

gean-costa avatar

Watchers

James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.