APIGenAI / app.py
vishwas3086's picture
Update app.py
a61ac7e verified
import transformers
import streamlit as st
import requests
import json
import sqlite3
import os
from transformers import pipeline
# Load AI model for test case generation
test_case_generator = pipeline("text-generation", model="microsoft/CodeGPT-small-py")
DB_PATH = "results.db"
# Agar database file exist nahi karti toh create karo
if not os.path.exists(DB_PATH):
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS results (
id INTEGER PRIMARY KEY AUTOINCREMENT,
api_name TEXT,
test_status TEXT,
run_timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
)
''')
conn.commit()
conn.close()
def fetch_swagger_data(swagger_url):
try:
response = requests.get(swagger_url)
return response.json()
except Exception as e:
st.error(f"Error fetching Swagger data: {e}")
return None
def generate_bdd_test_cases(swagger_data):
test_cases = {}
for path, methods in swagger_data.get("paths", {}).items():
for method, details in methods.items():
prompt = f"Generate BDD test case for {method.upper()} {path} with {details.get('parameters', [])}"
ai_response = test_case_generator(prompt, max_length=200, num_return_sequences=1)
test_cases[f"{method.upper()} {path}"] = ai_response[0]['generated_text']
return test_cases
def execute_test_script(test_case):
# Simulate API call execution
st.write(f"Executing test: {test_case}")
return {"status": "Passed", "response_time": "200ms"}
def store_test_results(test_case, result):
conn = sqlite3.connect("test_results.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS results (test_case TEXT, status TEXT, response_time TEXT)
""")
cursor.execute("INSERT INTO results (test_case, status, response_time) VALUES (?, ?, ?)",
(test_case, result["status"], result["response_time"]))
conn.commit()
conn.close()
# Function to get past results
def show_past_results():
conn = sqlite3.connect(DB_PATH)
cursor = conn.cursor()
cursor.execute("SELECT * FROM results")
data = cursor.fetchall()
conn.close()
return data
# Streamlit UI
st.title("AI-Powered API Test Case Generator")
swagger_url = st.text_input("Enter Swagger URL")
if st.button("Generate Test Cases"):
swagger_data = fetch_swagger_data(swagger_url)
if swagger_data:
test_cases = generate_bdd_test_cases(swagger_data)
st.session_state["test_cases"] = test_cases
st.success("Test Cases Generated!")
st.json(test_cases)
if "test_cases" in st.session_state:
st.subheader("Execute Test Cases")
for api, test_case in st.session_state["test_cases"].items():
if st.button(f"Run {api}"):
result = execute_test_script(test_case)
store_test_results(api, result)
st.success(f"{api} - {result['status']}")
st.subheader("Past Execution Results")
past_results = show_past_results()
st.table(past_results)