File size: 5,174 Bytes
cbcbbca
 
 
 
 
 
 
 
6839638
6c16efa
 
6839638
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cbcbbca
6839638
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cbcbbca
 
6839638
cbcbbca
 
6839638
cbcbbca
 
 
 
6839638
cbcbbca
 
6839638
 
 
 
cbcbbca
 
6839638
 
 
 
 
 
 
 
 
 
cbcbbca
 
 
 
 
 
 
6839638
 
 
 
cbcbbca
6839638
 
 
 
 
 
 
 
 
cbcbbca
6839638
 
 
6c16efa
6839638
6c16efa
6839638
 
 
 
 
 
6c16efa
cbcbbca
 
6839638
cbcbbca
 
6839638
cbcbbca
6839638
 
6c16efa
cbcbbca
6839638
cbcbbca
6c16efa
 
 
6839638
 
6c16efa
6839638
6c16efa
cbcbbca
6839638
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
import streamlit as st
import unittest
import io
import sys
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

# Define the functional code snippets
test_code = {
    "Unit Test": """
def add_numbers(a, b):
    return a + b

# Unit test example
class TestAddNumbers(unittest.TestCase):
    def test_add_positive_numbers(self):
        self.assertEqual(add_numbers(2, 3), 5)
    def test_add_negative_numbers(self):
        self.assertEqual(add_numbers(-2, -3), -5)
""",
    "Smoke Test": """
import requests

def test_smoke():
    response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
    assert response.status_code == 200
    return "Smoke Test Passed!"
""",
    "Integration Test": """
import sqlite3

def test_integration():
    conn = sqlite3.connect(":memory:")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE users (id INT, name TEXT)")
    cursor.execute("INSERT INTO users VALUES (1, 'Alice')")
    conn.commit()
    result = cursor.execute("SELECT name FROM users WHERE id = 1").fetchone()
    conn.close()
    assert result[0] == "Alice"
    return "Integration Test Passed!"
""",
    "Regression Test": """
def login(username, password):
    if username == "admin" and password == "password":
        return "Login successful"
    else:
        return "Invalid credentials"

# Regression test example
def test_regression():
    assert login("admin", "password") == "Login successful"
    assert login("user", "wrongpassword") == "Invalid credentials"
    return "Regression Test Passed!"
""",
    "End-to-End Test (Selenium)": """
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

def test_e2e():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com")
    search_box = driver.find_element(By.NAME, "q")
    search_box.send_keys("Streamlit Selenium Test")
    search_box.send_keys(Keys.RETURN)
    assert "Streamlit Selenium Test" in driver.page_source
    driver.quit()
    return "E2E Test Passed!"
""",
    "Acceptance Test": """
def test_acceptance():
    meets_requirements = True
    assert meets_requirements
    return "Acceptance Test Passed!"
""",
}

# Define test execution functions
def run_unit_test():
    class TestAddNumbers(unittest.TestCase):
        def test_add_positive_numbers(self):
            self.assertEqual(2 + 3, 5)

        def test_add_negative_numbers(self):
            self.assertEqual(-2 + -3, -5)

    suite = unittest.TestLoader().loadTestsFromTestCase(TestAddNumbers)
    result = unittest.TextTestRunner(stream=sys.stdout, verbosity=2).run(suite)
    return result

def run_smoke_test():
    import requests
    response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
    assert response.status_code == 200
    return "Smoke Test Passed!"

def run_integration_test():
    import sqlite3
    conn = sqlite3.connect(":memory:")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE users (id INT, name TEXT)")
    cursor.execute("INSERT INTO users VALUES (1, 'Alice')")
    conn.commit()
    result = cursor.execute("SELECT name FROM users WHERE id = 1").fetchone()
    conn.close()
    assert result[0] == "Alice"
    return "Integration Test Passed!"

def run_regression_test():
    def login(username, password):
        if username == "admin" and password == "password":
            return "Login successful"
        else:
            return "Invalid credentials"

    assert login("admin", "password") == "Login successful"
    assert login("user", "wrongpassword") == "Invalid credentials"
    return "Regression Test Passed!"

def run_e2e_test():
    driver = webdriver.Chrome()
    driver.get("https://www.google.com")
    search_box = driver.find_element(By.NAME, "q")
    search_box.send_keys("Streamlit Selenium Test")
    search_box.send_keys(Keys.RETURN)
    assert "Streamlit Selenium Test" in driver.page_source
    driver.quit()
    return "E2E Test Passed!"

def run_acceptance_test():
    meets_requirements = True
    assert meets_requirements
    return "Acceptance Test Passed!"

# Map test names to functions
test_functions = {
    "Unit Test": run_unit_test,
    "Smoke Test": run_smoke_test,
    "Integration Test": run_integration_test,
    "Regression Test": run_regression_test,
    "End-to-End Test (Selenium)": run_e2e_test,
    "Acceptance Test": run_acceptance_test,
}

# Streamlit Interface
st.title("Interactive Test Runner with Code Display")

# Dropdown for test selection
selected_test = st.selectbox("Select a test to run:", list(test_functions.keys()))

# Display the functional code snippet
st.subheader("Code for Selected Test")
st.code(test_code[selected_test], language="python")

# Run the test and show results
if st.button("Run Test"):
    with io.StringIO() as buf:
        sys.stdout = buf
        try:
            result = test_functions[selected_test]()
            st.success(f"Result: {result}")
        except Exception as e:
            st.error(f"Test Failed: {e}")
        finally:
            sys.stdout = sys.__stdout__
        st.text(buf.getvalue())