|
import transformers |
|
import streamlit as st |
|
import requests |
|
import json |
|
import sqlite3 |
|
import os |
|
from transformers import pipeline |
|
|
|
|
|
test_case_generator = pipeline("text-generation", model="microsoft/CodeGPT-small-py") |
|
|
|
DB_PATH = "results.db" |
|
|
|
|
|
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): |
|
|
|
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() |
|
|
|
|
|
def show_past_results(): |
|
conn = sqlite3.connect(DB_PATH) |
|
cursor = conn.cursor() |
|
cursor.execute("SELECT * FROM results") |
|
data = cursor.fetchall() |
|
conn.close() |
|
return data |
|
|
|
|
|
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) |
|
|