📚 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,unitteste execução paralela compytest-xdist.
📝 Licença
Distribuído sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.
👨💻 Autor
Desenvolvido por Roberto Lima 🚀✨
💬 Contato
- 📧 Email: robertolima.izphera@gmail.com
- 💼 LinkedIn: Roberto Lima
- 💼 Website: Roberto Lima
- 💼 Gravatar: Roberto Lima
⭐ 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| smarttestpy-1.3.2.tar.gz | 15.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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.