# Universal Tester - AI-Powered Test Generation
[](https://pypi.org/project/universal-tester/)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/Apache-2.0)
**Automatically generate high-quality JUnit tests for Java and Kotlin projects using AI - with complete code privacy using local LLMs.**
Universal Tester leverages Large Language Models (LLMs) to understand your code and create comprehensive test suites with proper mocking, assertions, and edge case coverage. It comes with both a **Command-Line Interface (CLI)** and a **Web UI** for maximum flexibility.
## 🔒 Unique Security Feature
## 🔒 Unique Security Feature
**Your Code Never Leaves Your Machine!**
Unlike other AI testing tools that send your code to cloud services, Universal Tester supports **Ollama** - a runtime platform that lets you run powerful open-source LLMs (Llama, Mistral, CodeLlama, etc.) entirely on your own computer.
**Why This Matters:**
- ✅ **Complete Privacy**: Your proprietary source code stays on your machine
- ✅ **100% Offline**: No internet required for test generation
- ✅ **Enterprise-Safe**: Complies with strict corporate security policies
- ✅ **Zero Trust Architecture**: No cloud providers can access your code
- ✅ **FREE**: No API costs - unlimited test generation at no charge
- ✅ **Compliance-Ready**: Meets requirements for regulated industries (healthcare, finance, government)
**You Have Options**: While Ollama provides maximum security through local LLM execution, you can also use Azure OpenAI or Google Gemini if your team prefers cloud-based models.
- ✅ **100% Offline Operation** with Ollama
- ✅ **No Cloud Uploads** - Your code stays on your machine
- ✅ **Enterprise-Safe** - Perfect for proprietary and sensitive codebases
- ✅ **FREE** - No API costs with local models
- ✅ **Your Choice** - Also supports Azure OpenAI and Google Gemini if preferred
---
## 🚀 Features
- ✅ **🔐 Local LLM Support (Ollama)**: Run any open-source LLM locally - your code never leaves your machine
- ✅ **Multi-LLM Support**: Azure OpenAI, Google Gemini, or Ollama (run LLMs locally/offline)
- ✅ **Smart Import Detection**: Automatic dependency analysis and import management
- ✅ **Two Interfaces**: CLI for automation, Web UI for interactive use
- ✅ **Java & Kotlin**: Full support for both languages
- ✅ **Multiple Frameworks**: JUnit 5, Mockito, MockK, Kotest
- ✅ **Spring Boot Ready**: Special handling for Spring annotations and dependency injection
- ✅ **Incremental Testing**: Generate tests for specific files or entire projects
- ✅ **Context-Aware**: Understands your code structure and dependencies
- ✅ **No Vendor Lock-in**: Switch between LLM providers anytime
---
## 📦 Installation
### Prerequisites
- **Python 3.8+** (Tested and certified on **Python 3.13.5**)
- ⚠️ **Important**: Requires Python 3.8 or higher to avoid compatibility issues
- ✅ **Certified on**: Python 3.13.5
- 📋 **Compatible with**: Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13+ (based on dependencies)
- pip (Python package manager)
- LLM API access (Azure OpenAI, Google Gemini, or Ollama)
### Recommended: Use Virtual Environment
We strongly recommend using a virtual environment to avoid dependency conflicts:
```bash
# Create virtual environment
python -m venv universal-tester-env
# Activate on Windows
universal-tester-env\Scripts\activate
# Activate on Linux/Mac
source universal-tester-env/bin/activate
# Install universal-tester
pip install universal-tester
```
### Install from PyPI
```bash
pip install universal-tester
```
**That's it!** Both CLI and Web UI are included.
### Verify Installation
```bash
universal-tester --version
```
---
## 🎯 Quick Start
### 1. Configure Your LLM Provider
Copy `.env.example` to `.env` and configure:
```bash
# Ollama (FREE - Recommended for local development)
LLM_PROVIDER=ollama
OLLAMA_HOST=http://localhost:11434
OLLAMA_MODEL=llama3.1:8b
# OR Azure OpenAI
LLM_PROVIDER=azure_openai
AZURE_OPENAI_API_KEY=your-api-key
AZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/
AZURE_OPENAI_DEPLOYMENT=gpt-4
# OR Google Gemini
LLM_PROVIDER=google
GOOGLE_API_KEY=your-google-api-key
GOOGLE_MODEL=gemini-2.0-flash:generateContent
```
### 2. Generate Tests (CLI)
```bash
# Generate tests from a ZIP file
universal-tester --input /path/to/your-project.zip
# With custom output directory
universal-tester -i project.zip -o ./generated-tests
```
### 3. Or Use the Web UI
```bash
# Launch the web interface
universal-tester-ui
```
Then upload your ZIP file and click "Generate Tests"!
---
## 💡 Usage Examples
### CLI Examples
**Basic test generation:**
```bash
universal-tester --input myproject.zip
```
**Kotlin with MockK:**
```bash
universal-tester --input kotlin-app.zip --language kotlin --framework mockk
```
**Use specific LLM provider:**
```bash
universal-tester --input project.zip --llm-provider google
```
**Verbose mode:**
```bash
universal-tester --input project.zip --verbose
```
### Web UI
1. Start the UI: `universal-tester-ui`
2. Open `http://localhost:8000` in your browser
3. Upload your Java/Kotlin project (ZIP format)
4. Click "Generate Tests"
5. Download the generated test files
---
## 🎨 What Tests Look Like
**Input: `UserService.java`**
```java
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new UserNotFoundException(id));
}
}
```
**Generated: `UserServiceTest.java`**
```java
@ExtendWith(MockitoExtension.class)
class UserServiceTest {
@Mock
private UserRepository userRepository;
@InjectMocks
private UserService userService;
@Test
void findById_WhenUserExists_ReturnsUser() {
// Arrange
Long userId = 1L;
User expectedUser = new User(userId, "John Doe");
when(userRepository.findById(userId)).thenReturn(Optional.of(expectedUser));
// Act
User result = userService.findById(userId);
// Assert
assertNotNull(result);
assertEquals(expectedUser.getId(), result.getId());
assertEquals(expectedUser.getName(), result.getName());
verify(userRepository).findById(userId);
}
@Test
void findById_WhenUserNotFound_ThrowsException() {
// Arrange
Long userId = 999L;
when(userRepository.findById(userId)).thenReturn(Optional.empty());
// Act & Assert
assertThrows(UserNotFoundException.class, () -> userService.findById(userId));
verify(userRepository).findById(userId);
}
}
```
---
## 🔧 Configuration
### Environment Variables
| Variable | Description | Required |
|----------|-------------|----------|
| `LLM_PROVIDER` | LLM provider: `azure`, `google`, or `ollama` | ✅ Yes |
| `AZURE_OPENAI_API_KEY` | Azure OpenAI API key | If using Azure |
| `AZURE_OPENAI_ENDPOINT` | Azure endpoint URL | If using Azure |
| `AZURE_OPENAI_DEPLOYMENT_NAME` | Azure deployment name | If using Azure |
| `GOOGLE_API_KEY` | Google Gemini API key | If using Google |
| `OLLAMA_BASE_URL` | Ollama server URL | If using Ollama |
| `OLLAMA_MODEL` | Ollama model name | If using Ollama |
### CLI Options
```bash
universal-tester [OPTIONS]
Options:
-i, --input PATH Input ZIP file path (required)
-o, --output PATH Output directory (default: ./generated_tests)
--llm-provider TEXT LLM provider override (azure/google/ollama)
--language TEXT Source language (java/kotlin)
--framework TEXT Test framework (junit/mockito/mockk/kotest)
-v, --verbose Enable verbose logging
--version Show version
--help Show help message
```
---
## 📚 Documentation
- **[Complete User Guide](USER_GUIDE.md)** - Detailed documentation
- **[LLM Provider Setup](USER_GUIDE.md#llm-provider-setup)** - Configure Azure, Google, or Ollama
- **[Troubleshooting](USER_GUIDE.md#troubleshooting)** - Common issues and solutions
- **[FAQ](USER_GUIDE.md#faq)** - Frequently asked questions
---
## 🎯 Use Cases
### For Developers
- Quickly create test scaffolding for new code
- Improve test coverage on legacy code
- Learn testing best practices from generated examples
- Speed up TDD workflow
### For Teams
- Standardize test patterns across the codebase
- Onboard new team members with consistent test examples
- Reduce time spent writing boilerplate tests
- Focus on complex business logic testing
### For CI/CD
- Integrate into build pipelines
- Generate tests automatically on code commits
- Maintain test coverage metrics
- Automate test creation for new features
---
## 🌟 Why Universal Tester?
| Feature | Universal Tester | Manual Testing | Other Tools |
|---------|-----------------|----------------|-------------|
| Speed | ⚡ Seconds | 🐌 Hours | ⚡ Fast |
| Quality | ✅ AI-powered | 👤 Variable | ⚠️ Template-based |
| Customization | ✅ Flexible | ✅ Full control | ❌ Limited |
| LLM Choice | ✅ 3 providers | N/A | ❌ Usually locked |
| UI + CLI | ✅ Both | N/A | ⚠️ Usually one |
| Cost | 💰 Free + LLM API | 💰💰 Developer time | 💰💰💰 Expensive |
---
## 🔒 Privacy & Security
- **Your code stays yours**: Code is only sent to your chosen LLM provider
- **Use Ollama for local processing**: 100% offline operation available
- **No data storage**: We don't store or log your code
- **Open source**: Audit the code yourself (Apache 2.0 License)
---
## 🛠️ Requirements
- Python 3.8 or higher
- Access to an LLM provider:
- **Azure OpenAI** (paid)
- **Google Gemini** (paid, but has free tier)
- **Ollama** (free, runs locally)
---
## 📊 Project Structure
```
universal-tester/
├── universal_tester/
│ ├── core.py # Main test generation logic
│ ├── cli.py # Command-line interface
│ ├── llm/
│ │ ├── factory.py # Multi-LLM support
│ │ ├── health_check.py # LLM health monitoring
│ │ └── java_validator.py # Code validation
│ ├── detectors/
│ │ ├── enhanced_import_detector.py # Java import detection
│ │ └── kotlin_import_detector.py # Kotlin import detection
│ ├── prompts/
│ │ ├── prompt_builder.py # LLM prompt construction
│ │ ├── system_prompts.py # System-level prompts
│ │ └── ui_messages.py # UI messages
│ └── ui/
│ ├── chainlit_ui.py # Web UI implementation
│ └── main.py # UI entry point
├── USER_GUIDE.md # Complete documentation
└── README.md # This file
```
---
## 🤝 Contributing
Contributions are welcome! Here's how:
1. Fork the repository
2. Create a feature branch: `git checkout -b feature/amazing-feature`
3. Commit your changes: `git commit -m 'Add amazing feature'`
4. Push to the branch: `git push origin feature/amazing-feature`
5. Open a Pull Request
---
## 📝 License
This project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.
**Note on Commercial Use**: While the software is open source under Apache 2.0, commercial use requires a separate license. Contact senthilthepro@hotmail.com for commercial licensing.
**Patent Notice**: The author reserves all patent rights related to the concepts and methods embodied in this software.
---
## 🙏 Acknowledgments
- Built with [LangChain](https://langchain.com/)
- UI powered by [Chainlit](https://chainlit.io/)
- Inspired by the need for better automated testing tools
---
## 📧 Contact & Support
- **Author**: Senthil Kumar Thanapal
- **Email**: senthilthepro@hotmail.com
- **PyPI Package**: https://pypi.org/project/universal-tester/
---
## 🚀 Quick Links
- [PyPI Package](https://pypi.org/project/universal-tester/)
- [User Guide](USER_GUIDE.md)
- Documentation included in package
---
**Made with ❤️ for the testing community**
*Star ⭐ this repo if you find it useful!*
Raw data
{
"_id": null,
"home_page": null,
"name": "universal-tester",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "testing, test-generation, junit, java, kotlin, ai, llm, automation, spring-boot, mockito",
"author": null,
"author_email": "Senthil Kumar Thanapal <senthilthepro@hotmail.com>",
"download_url": "https://files.pythonhosted.org/packages/51/49/ead498efd15d7078a9f95b637dc8530492211e7245821058d802b483c365/universal_tester-1.1.1.tar.gz",
"platform": null,
"description": "# Universal Tester - AI-Powered Test Generation\r\n\r\n[](https://pypi.org/project/universal-tester/)\r\n[](https://www.python.org/downloads/)\r\n[](https://opensource.org/licenses/Apache-2.0)\r\n\r\n**Automatically generate high-quality JUnit tests for Java and Kotlin projects using AI - with complete code privacy using local LLMs.**\r\n\r\nUniversal Tester leverages Large Language Models (LLMs) to understand your code and create comprehensive test suites with proper mocking, assertions, and edge case coverage. It comes with both a **Command-Line Interface (CLI)** and a **Web UI** for maximum flexibility.\r\n\r\n## \ud83d\udd12 Unique Security Feature\r\n\r\n## \ud83d\udd12 Unique Security Feature\r\n\r\n**Your Code Never Leaves Your Machine!**\r\n\r\nUnlike other AI testing tools that send your code to cloud services, Universal Tester supports **Ollama** - a runtime platform that lets you run powerful open-source LLMs (Llama, Mistral, CodeLlama, etc.) entirely on your own computer.\r\n\r\n**Why This Matters:**\r\n- \u2705 **Complete Privacy**: Your proprietary source code stays on your machine\r\n- \u2705 **100% Offline**: No internet required for test generation\r\n- \u2705 **Enterprise-Safe**: Complies with strict corporate security policies\r\n- \u2705 **Zero Trust Architecture**: No cloud providers can access your code\r\n- \u2705 **FREE**: No API costs - unlimited test generation at no charge\r\n- \u2705 **Compliance-Ready**: Meets requirements for regulated industries (healthcare, finance, government)\r\n\r\n**You Have Options**: While Ollama provides maximum security through local LLM execution, you can also use Azure OpenAI or Google Gemini if your team prefers cloud-based models.\r\n\r\n- \u2705 **100% Offline Operation** with Ollama\r\n- \u2705 **No Cloud Uploads** - Your code stays on your machine\r\n- \u2705 **Enterprise-Safe** - Perfect for proprietary and sensitive codebases\r\n- \u2705 **FREE** - No API costs with local models\r\n- \u2705 **Your Choice** - Also supports Azure OpenAI and Google Gemini if preferred\r\n\r\n---\r\n\r\n## \ud83d\ude80 Features\r\n\r\n- \u2705 **\ud83d\udd10 Local LLM Support (Ollama)**: Run any open-source LLM locally - your code never leaves your machine\r\n- \u2705 **Multi-LLM Support**: Azure OpenAI, Google Gemini, or Ollama (run LLMs locally/offline)\r\n- \u2705 **Smart Import Detection**: Automatic dependency analysis and import management\r\n- \u2705 **Two Interfaces**: CLI for automation, Web UI for interactive use\r\n- \u2705 **Java & Kotlin**: Full support for both languages\r\n- \u2705 **Multiple Frameworks**: JUnit 5, Mockito, MockK, Kotest\r\n- \u2705 **Spring Boot Ready**: Special handling for Spring annotations and dependency injection\r\n- \u2705 **Incremental Testing**: Generate tests for specific files or entire projects\r\n- \u2705 **Context-Aware**: Understands your code structure and dependencies\r\n- \u2705 **No Vendor Lock-in**: Switch between LLM providers anytime\r\n\r\n---\r\n\r\n## \ud83d\udce6 Installation\r\n\r\n### Prerequisites\r\n\r\n- **Python 3.8+** (Tested and certified on **Python 3.13.5**)\r\n - \u26a0\ufe0f **Important**: Requires Python 3.8 or higher to avoid compatibility issues\r\n - \u2705 **Certified on**: Python 3.13.5\r\n - \ud83d\udccb **Compatible with**: Python 3.8, 3.9, 3.10, 3.11, 3.12, 3.13+ (based on dependencies)\r\n- pip (Python package manager)\r\n- LLM API access (Azure OpenAI, Google Gemini, or Ollama)\r\n\r\n### Recommended: Use Virtual Environment\r\n\r\nWe strongly recommend using a virtual environment to avoid dependency conflicts:\r\n\r\n```bash\r\n# Create virtual environment\r\npython -m venv universal-tester-env\r\n\r\n# Activate on Windows\r\nuniversal-tester-env\\Scripts\\activate\r\n\r\n# Activate on Linux/Mac\r\nsource universal-tester-env/bin/activate\r\n\r\n# Install universal-tester\r\npip install universal-tester\r\n```\r\n\r\n### Install from PyPI\r\n\r\n```bash\r\npip install universal-tester\r\n```\r\n\r\n**That's it!** Both CLI and Web UI are included.\r\n\r\n### Verify Installation\r\n\r\n```bash\r\nuniversal-tester --version\r\n```\r\n\r\n---\r\n\r\n## \ud83c\udfaf Quick Start\r\n\r\n### 1. Configure Your LLM Provider\r\n\r\nCopy `.env.example` to `.env` and configure:\r\n\r\n```bash\r\n# Ollama (FREE - Recommended for local development)\r\nLLM_PROVIDER=ollama\r\nOLLAMA_HOST=http://localhost:11434\r\nOLLAMA_MODEL=llama3.1:8b\r\n\r\n# OR Azure OpenAI\r\nLLM_PROVIDER=azure_openai\r\nAZURE_OPENAI_API_KEY=your-api-key\r\nAZURE_OPENAI_ENDPOINT=https://your-endpoint.openai.azure.com/\r\nAZURE_OPENAI_DEPLOYMENT=gpt-4\r\n\r\n# OR Google Gemini\r\nLLM_PROVIDER=google\r\nGOOGLE_API_KEY=your-google-api-key\r\nGOOGLE_MODEL=gemini-2.0-flash:generateContent\r\n```\r\n\r\n### 2. Generate Tests (CLI)\r\n\r\n```bash\r\n# Generate tests from a ZIP file\r\nuniversal-tester --input /path/to/your-project.zip\r\n\r\n# With custom output directory\r\nuniversal-tester -i project.zip -o ./generated-tests\r\n```\r\n\r\n### 3. Or Use the Web UI\r\n\r\n```bash\r\n# Launch the web interface\r\nuniversal-tester-ui\r\n```\r\n\r\nThen upload your ZIP file and click \"Generate Tests\"!\r\n\r\n---\r\n\r\n## \ud83d\udca1 Usage Examples\r\n\r\n### CLI Examples\r\n\r\n**Basic test generation:**\r\n```bash\r\nuniversal-tester --input myproject.zip\r\n```\r\n\r\n**Kotlin with MockK:**\r\n```bash\r\nuniversal-tester --input kotlin-app.zip --language kotlin --framework mockk\r\n```\r\n\r\n**Use specific LLM provider:**\r\n```bash\r\nuniversal-tester --input project.zip --llm-provider google\r\n```\r\n\r\n**Verbose mode:**\r\n```bash\r\nuniversal-tester --input project.zip --verbose\r\n```\r\n\r\n### Web UI\r\n\r\n1. Start the UI: `universal-tester-ui`\r\n2. Open `http://localhost:8000` in your browser\r\n3. Upload your Java/Kotlin project (ZIP format)\r\n4. Click \"Generate Tests\"\r\n5. Download the generated test files\r\n\r\n---\r\n\r\n## \ud83c\udfa8 What Tests Look Like\r\n\r\n**Input: `UserService.java`**\r\n```java\r\n@Service\r\npublic class UserService {\r\n @Autowired\r\n private UserRepository userRepository;\r\n \r\n public User findById(Long id) {\r\n return userRepository.findById(id)\r\n .orElseThrow(() -> new UserNotFoundException(id));\r\n }\r\n}\r\n```\r\n\r\n**Generated: `UserServiceTest.java`**\r\n```java\r\n@ExtendWith(MockitoExtension.class)\r\nclass UserServiceTest {\r\n @Mock\r\n private UserRepository userRepository;\r\n \r\n @InjectMocks\r\n private UserService userService;\r\n \r\n @Test\r\n void findById_WhenUserExists_ReturnsUser() {\r\n // Arrange\r\n Long userId = 1L;\r\n User expectedUser = new User(userId, \"John Doe\");\r\n when(userRepository.findById(userId)).thenReturn(Optional.of(expectedUser));\r\n \r\n // Act\r\n User result = userService.findById(userId);\r\n \r\n // Assert\r\n assertNotNull(result);\r\n assertEquals(expectedUser.getId(), result.getId());\r\n assertEquals(expectedUser.getName(), result.getName());\r\n verify(userRepository).findById(userId);\r\n }\r\n \r\n @Test\r\n void findById_WhenUserNotFound_ThrowsException() {\r\n // Arrange\r\n Long userId = 999L;\r\n when(userRepository.findById(userId)).thenReturn(Optional.empty());\r\n \r\n // Act & Assert\r\n assertThrows(UserNotFoundException.class, () -> userService.findById(userId));\r\n verify(userRepository).findById(userId);\r\n }\r\n}\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udd27 Configuration\r\n\r\n### Environment Variables\r\n\r\n| Variable | Description | Required |\r\n|----------|-------------|----------|\r\n| `LLM_PROVIDER` | LLM provider: `azure`, `google`, or `ollama` | \u2705 Yes |\r\n| `AZURE_OPENAI_API_KEY` | Azure OpenAI API key | If using Azure |\r\n| `AZURE_OPENAI_ENDPOINT` | Azure endpoint URL | If using Azure |\r\n| `AZURE_OPENAI_DEPLOYMENT_NAME` | Azure deployment name | If using Azure |\r\n| `GOOGLE_API_KEY` | Google Gemini API key | If using Google |\r\n| `OLLAMA_BASE_URL` | Ollama server URL | If using Ollama |\r\n| `OLLAMA_MODEL` | Ollama model name | If using Ollama |\r\n\r\n### CLI Options\r\n\r\n```bash\r\nuniversal-tester [OPTIONS]\r\n\r\nOptions:\r\n -i, --input PATH Input ZIP file path (required)\r\n -o, --output PATH Output directory (default: ./generated_tests)\r\n --llm-provider TEXT LLM provider override (azure/google/ollama)\r\n --language TEXT Source language (java/kotlin)\r\n --framework TEXT Test framework (junit/mockito/mockk/kotest)\r\n -v, --verbose Enable verbose logging\r\n --version Show version\r\n --help Show help message\r\n```\r\n\r\n---\r\n\r\n## \ud83d\udcda Documentation\r\n\r\n- **[Complete User Guide](USER_GUIDE.md)** - Detailed documentation\r\n- **[LLM Provider Setup](USER_GUIDE.md#llm-provider-setup)** - Configure Azure, Google, or Ollama\r\n- **[Troubleshooting](USER_GUIDE.md#troubleshooting)** - Common issues and solutions\r\n- **[FAQ](USER_GUIDE.md#faq)** - Frequently asked questions\r\n\r\n---\r\n\r\n## \ud83c\udfaf Use Cases\r\n\r\n### For Developers\r\n- Quickly create test scaffolding for new code\r\n- Improve test coverage on legacy code\r\n- Learn testing best practices from generated examples\r\n- Speed up TDD workflow\r\n\r\n### For Teams\r\n- Standardize test patterns across the codebase\r\n- Onboard new team members with consistent test examples\r\n- Reduce time spent writing boilerplate tests\r\n- Focus on complex business logic testing\r\n\r\n### For CI/CD\r\n- Integrate into build pipelines\r\n- Generate tests automatically on code commits\r\n- Maintain test coverage metrics\r\n- Automate test creation for new features\r\n\r\n---\r\n\r\n## \ud83c\udf1f Why Universal Tester?\r\n\r\n| Feature | Universal Tester | Manual Testing | Other Tools |\r\n|---------|-----------------|----------------|-------------|\r\n| Speed | \u26a1 Seconds | \ud83d\udc0c Hours | \u26a1 Fast |\r\n| Quality | \u2705 AI-powered | \ud83d\udc64 Variable | \u26a0\ufe0f Template-based |\r\n| Customization | \u2705 Flexible | \u2705 Full control | \u274c Limited |\r\n| LLM Choice | \u2705 3 providers | N/A | \u274c Usually locked |\r\n| UI + CLI | \u2705 Both | N/A | \u26a0\ufe0f Usually one |\r\n| Cost | \ud83d\udcb0 Free + LLM API | \ud83d\udcb0\ud83d\udcb0 Developer time | \ud83d\udcb0\ud83d\udcb0\ud83d\udcb0 Expensive |\r\n\r\n---\r\n\r\n## \ud83d\udd12 Privacy & Security\r\n\r\n- **Your code stays yours**: Code is only sent to your chosen LLM provider\r\n- **Use Ollama for local processing**: 100% offline operation available\r\n- **No data storage**: We don't store or log your code\r\n- **Open source**: Audit the code yourself (Apache 2.0 License)\r\n\r\n---\r\n\r\n## \ud83d\udee0\ufe0f Requirements\r\n\r\n- Python 3.8 or higher\r\n- Access to an LLM provider:\r\n - **Azure OpenAI** (paid)\r\n - **Google Gemini** (paid, but has free tier)\r\n - **Ollama** (free, runs locally)\r\n\r\n---\r\n\r\n## \ud83d\udcca Project Structure\r\n\r\n```\r\nuniversal-tester/\r\n\u251c\u2500\u2500 universal_tester/\r\n\u2502 \u251c\u2500\u2500 core.py # Main test generation logic\r\n\u2502 \u251c\u2500\u2500 cli.py # Command-line interface\r\n\u2502 \u251c\u2500\u2500 llm/\r\n\u2502 \u2502 \u251c\u2500\u2500 factory.py # Multi-LLM support\r\n\u2502 \u2502 \u251c\u2500\u2500 health_check.py # LLM health monitoring\r\n\u2502 \u2502 \u2514\u2500\u2500 java_validator.py # Code validation\r\n\u2502 \u251c\u2500\u2500 detectors/\r\n\u2502 \u2502 \u251c\u2500\u2500 enhanced_import_detector.py # Java import detection\r\n\u2502 \u2502 \u2514\u2500\u2500 kotlin_import_detector.py # Kotlin import detection\r\n\u2502 \u251c\u2500\u2500 prompts/\r\n\u2502 \u2502 \u251c\u2500\u2500 prompt_builder.py # LLM prompt construction\r\n\u2502 \u2502 \u251c\u2500\u2500 system_prompts.py # System-level prompts\r\n\u2502 \u2502 \u2514\u2500\u2500 ui_messages.py # UI messages\r\n\u2502 \u2514\u2500\u2500 ui/\r\n\u2502 \u251c\u2500\u2500 chainlit_ui.py # Web UI implementation\r\n\u2502 \u2514\u2500\u2500 main.py # UI entry point\r\n\u251c\u2500\u2500 USER_GUIDE.md # Complete documentation\r\n\u2514\u2500\u2500 README.md # This file\r\n```\r\n\r\n---\r\n\r\n## \ud83e\udd1d Contributing\r\n\r\nContributions are welcome! Here's how:\r\n\r\n1. Fork the repository\r\n2. Create a feature branch: `git checkout -b feature/amazing-feature`\r\n3. Commit your changes: `git commit -m 'Add amazing feature'`\r\n4. Push to the branch: `git push origin feature/amazing-feature`\r\n5. Open a Pull Request\r\n\r\n---\r\n\r\n## \ud83d\udcdd License\r\n\r\nThis project is licensed under the Apache License 2.0 - see the [LICENSE](LICENSE) file for details.\r\n\r\n**Note on Commercial Use**: While the software is open source under Apache 2.0, commercial use requires a separate license. Contact senthilthepro@hotmail.com for commercial licensing.\r\n\r\n**Patent Notice**: The author reserves all patent rights related to the concepts and methods embodied in this software.\r\n\r\n---\r\n\r\n## \ud83d\ude4f Acknowledgments\r\n\r\n- Built with [LangChain](https://langchain.com/)\r\n- UI powered by [Chainlit](https://chainlit.io/)\r\n- Inspired by the need for better automated testing tools\r\n\r\n---\r\n\r\n## \ud83d\udce7 Contact & Support\r\n\r\n- **Author**: Senthil Kumar Thanapal\r\n- **Email**: senthilthepro@hotmail.com\r\n- **PyPI Package**: https://pypi.org/project/universal-tester/\r\n\r\n---\r\n\r\n## \ud83d\ude80 Quick Links\r\n\r\n- [PyPI Package](https://pypi.org/project/universal-tester/)\r\n- [User Guide](USER_GUIDE.md)\r\n- Documentation included in package\r\n\r\n---\r\n\r\n**Made with \u2764\ufe0f for the testing community**\r\n\r\n*Star \u2b50 this repo if you find it useful!*\r\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "AI-powered automatic test case generation for Java and Kotlin projects with Web UI and CLI",
"version": "1.1.1",
"project_urls": {
"Documentation": "https://pypi.org/project/universal-tester/",
"Homepage": "https://pypi.org/project/universal-tester/",
"Repository": "https://pypi.org/project/universal-tester/"
},
"split_keywords": [
"testing",
" test-generation",
" junit",
" java",
" kotlin",
" ai",
" llm",
" automation",
" spring-boot",
" mockito"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "201fac6f0ed433be14915c76d6b36b90ee5390d9dc574bccc42244763c6f846d",
"md5": "90903cfccb260083941efde71a9735b1",
"sha256": "d293822acbe4c78d8974b31e59c9a9192413bd5770a52d20b6210dda5b971549"
},
"downloads": -1,
"filename": "universal_tester-1.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "90903cfccb260083941efde71a9735b1",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 91833,
"upload_time": "2025-10-24T03:23:07",
"upload_time_iso_8601": "2025-10-24T03:23:07.658435Z",
"url": "https://files.pythonhosted.org/packages/20/1f/ac6f0ed433be14915c76d6b36b90ee5390d9dc574bccc42244763c6f846d/universal_tester-1.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5149ead498efd15d7078a9f95b637dc8530492211e7245821058d802b483c365",
"md5": "8cb4ff9efe61f6796eb043c9d2f649eb",
"sha256": "8e68c9a7b13e6cc20a8e8395a07db1940abdaec4d2c297565d5976d8813c16d0"
},
"downloads": -1,
"filename": "universal_tester-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "8cb4ff9efe61f6796eb043c9d2f649eb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 93758,
"upload_time": "2025-10-24T03:23:08",
"upload_time_iso_8601": "2025-10-24T03:23:08.852754Z",
"url": "https://files.pythonhosted.org/packages/51/49/ead498efd15d7078a9f95b637dc8530492211e7245821058d802b483c365/universal_tester-1.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-24 03:23:08",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "universal-tester"
}