Skip to main content

📚 SmartTestPy - Framework Inteligente para Testes em Python

SmartTestPy é um pacote robusto e flexível para a criação de testes automatizados em Python. Com suporte ao pytest, unittest, geração de dados fake, mocks avançados e integração com APIs e bancos de dados, ele foi projetado para simplificar o processo de testes, desde o básico até casos avançados.


✨ Funcionalidades Principais

  • ✅ Assertions personalizadas para validações detalhadas.
  • 🏷 Fixtures reutilizáveis para cenários complexos.
  • 🎭 Mocks inteligentes para testes isolados.
  • 🌐 Testes de API com validação de payloads, headers e status.
  • 🏦 Gerenciamento de banco de dados para testes integrados.
  • ⏳ Manipulação de tempo com suporte ao freezegun.
  • 📊 Cobertura de código com relatórios automatizados.
  • ⚡ Execução paralela de testes para maior performance.
  • 🛠 Compatível com frameworks como Django, Flask e FastAPI.
  • 🌍 Internacionalização (i18n) para mensagens e logs de testes.

⚡ Instalação

Instale o SmartTestPy diretamente do PyPI:

pip install SmartTestPy

💡 Requisitos: Python 3.6 ou superior.


🚀 Como Usar

✅ Assertions Customizadas

from SmartTestPy.assertions import assert_status_code

class MockResponse:
    def __init__(self, status_code, text=""):
        self.status_code = status_code
        self.text = text

response = MockResponse(200, "OK")
assert_status_code(response, 200)

🧪 Fixtures e Mocks

from SmartTestPy.fixtures import fake_user

user = fake_user()
assert user['email'] is not None

🌐 Testes de API

from SmartTestPy.response_helpers import assert_json_response
from requests import Session  # Importação corrigida

client = Session()  # Criando um cliente para chamadas HTTP

response = client.get("https://api.example.com/user/1/")
assert_json_response(response, {"id": 1, "name": "John Doe"})

⏳ Manipulação de Tempo

from SmartTestPy.time_utils import fixed_time

assert fixed_time().strftime("%Y-%m-%d") == "2025-01-01"

🏃 Executando os Testes

pytest tests/ --maxfail=1 --disable-warnings -v

📈 Gerar relatório de cobertura:

pytest --cov=SmartTestPy --cov-report=html

1. Testando uma API REST com validação de status e conteúdo

from SmartTestPy.assertions import assert_status_code, assert_in_response
import requests

def test_api_user_creation():
    response = requests.post("https://api.exemplo.com/users", json={"name": "Ana"})
    assert_status_code(response, 201)
    assert_in_response(response, "Usuário criado com sucesso")

2. Utilizando fixtures para gerar dados dinâmicos em massa

def test_register_multiple_users(fake_user):
    users = [fake_user for _ in range(5)]
    for user in users:
        assert "@" in user["email"]

3. Mockando respostas HTTP para testes isolados

def test_service_with_mock_response(mock_response_200):
    response = mock_response_200
    assert response.status_code == 200
    assert response.text == "OK"

4. Manipulando o tempo em testes

from SmartTestPy.time_utils import fixed_time

def test_fixed_time():
    assert fixed_time().strftime("%Y-%m-%d") == "2025-01-01"

5. Integração com pytest e relatórios de cobertura

pytest tests/ --cov=SmartTestPy --cov-report=term-missing

6. Testando unicidade e geração de dados únicos

def test_unique_fake_users(fake_user):
    user1 = fake_user
    user2 = fake_user  # pytest chama a fixture novamente
    assert user1 != user2

7. Testes de Segurança

from SmartTestPy.security import SecurityScanner, SQLInjectionTester, SecurityHeadersValidator, JWTChecker

# Scanner de vulnerabilidades básicas
scanner = SecurityScanner()
result = scanner.scan("https://api.exemplo.com")
print(f"Vulnerabilidades encontradas: {result['vulnerabilities']}")

# Teste de injeção SQL
tester = SQLInjectionTester()
is_vulnerable = tester.test_injection("https://api.exemplo.com/login", "' OR '1'='1")
print(f"Vulnerável a SQL Injection: {is_vulnerable}")

# Validação de headers de segurança
validator = SecurityHeadersValidator()
headers = {
    "X-Frame-Options": "DENY",
    "X-Content-Type-Options": "nosniff",
    "Strict-Transport-Security": "max-age=31536000"
}
result = validator.validate_headers(headers)
print(f"Headers ausentes: {result['missing_headers']}")

# Validação de token JWT
checker = JWTChecker(secret_key="sua-chave-secreta")
token = "seu-token-jwt"
result = checker.validate_token(token)
print(f"Token válido: {result['is_valid']}")

8. Testes de Segurança Avançados

from SmartTestPy.security import SecurityScanner

# Scanner completo de segurança
scanner = SecurityScanner()
result = scanner.scan("https://api.exemplo.com")

# Verificando headers de segurança
if "X-Frame-Options" not in result["headers"]:
    print("⚠️ Falta header X-Frame-Options")

# Verificando status da resposta
if result["status_code"] == 200:
    print("✅ Endpoint acessível")

# Verificando vulnerabilidades
for vuln in result["vulnerabilities"]:
    print(f"⚠️ {vuln}")

🏰 Estrutura do Projeto

SmartTestPy/
│
├── SmartTestPy/                # 📞 Código do pacote
│   ├── __init__.py
│   ├── assertions.py           # ✅ Assertions personalizadas
│   ├── fixtures.py             # 🏷 Fixtures e mocks reutilizáveis
│   ├── response_helpers.py     # 🌐 Testes e validações de APIs
│   ├── time_utils.py           # ⏳ Manipulação de tempo
│
├── tests/                      # 🧪 Testes unitários
│   ├── test_assertions.py
│   ├── test_fixtures.py
│   ├── test_response_helpers.py
│   └── test_time_utils.py
│
├── setup.py                    # ⚙️ Configuração do pacote
├── pyproject.toml              # 📚 Configuração moderna
├── README.md                   # 📚 Documentação do projeto
├── LICENSE                     # 🌍 Licença MIT
└── MANIFEST.in                 # 🗉 Inclusão de arquivos extras

🌐 Compatibilidade

  • ✅ Python 3.6+
  • 🚀 Compatível com Django, Flask e FastAPI.
  • 🐍 Suporte a pytest, unittest e execução paralela com pytest-xdist.

📝 Licença

Distribuído sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.


👨‍💻 Autor

Desenvolvido por Roberto Lima 🚀✨


💬 Contato


⭐ Gostou do projeto?

Deixe uma ⭐ no repositório e compartilhe com a comunidade! 🚀✨

git clone https://github.com/robertolima-dev/SmartTestPy.git
cd SmartTestPy
pip install -e .

🌟 O que este README oferece?

  • 🎯 Descrição clara do projeto e seu propósito.
  • 🛠 Instruções detalhadas de instalação e uso prático.
  • 🧪 Guia de testes para garantir que o código funciona.
  • 🏰 Estrutura do projeto para facilitar a navegação.
  • 🔄 Seção de contribuição para quem deseja ajudar no desenvolvimento.
  • 📝 Licença e informações do autor para transparência.

Metadata

Release files for SmartTestPy 1.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for SmartTestPy 1.3.2
File Size Uploaded Provenance
smarttestpy-1.3.2.tar.gz 15.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for SmartTestPy 1.3.2
File Interpreter ABI Platform
smarttestpy-1.3.2-py3-none-any.whl Python 3 none any Details

Total release size: 31.5 kB

Release files / smarttestpy-1.3.2.tar.gz

Download URL smarttestpy-1.3.2.tar.gz
Size 15.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c8348251f64acbc96d20afb9f37bbc84937b1ad9be6f494d4017c1229d64e47d
BLAKE2b-256 checksum
How to use checksums
74e3657518c4be9a5f7f567fc47164a6b6854b5aab940bfb14eacbe3f0f28528
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Release files / smarttestpy-1.3.2-py3-none-any.whl

Download URL smarttestpy-1.3.2-py3-none-any.whl
Size 15.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f9fea48a03a2ad081e67f049cf44f94f8692571dbafea5d3743654ccfacea434
BLAKE2b-256 checksum
How to use checksums
aa503c4a77415aa6d1da63f3d21b05d3314278adaf1237f7d4400fe3afda715f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.15

Security for SmartTestPy 1.3.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page