File size: 4,260 Bytes
df11144 dac5949 df11144 a76211f df11144 8b55d5e 7668197 df11144 439d8a3 df11144 2b8f81c df11144 439d8a3 a25e0f7 d03af90 1139cec 5e25e4d e71685b 439d8a3 a25e0f7 439d8a3 df11144 2b8f81c df11144 38c59e6 df11144 439d8a3 df11144 5fe37f4 32e0ed6 a477e6a df11144 439d8a3 dac5949 df11144 dac5949 df11144 dac5949 |
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 |
import json
import io
import requests
import html # For escaping HTML characters
from bs4 import BeautifulSoup
import pandas as pd # Added pandas for Excel export
# Initialize OpenAI API with Nvidia's Llama model
client = OpenAI(
base_url="https://integrate.api.nvidia.com/v1",
api_key="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"
)
def clean_test_case_output(text):
"""
Cleans the output to handle HTML characters and unwanted tags.
"""
text = html.unescape(text) # Unescape HTML entities
soup = BeautifulSoup(text, 'html.parser') # Use BeautifulSoup to handle HTML tags
cleaned_text = soup.get_text(separator="\n").strip() # Remove tags and handle newlines
return cleaned_text
def generate_testcases(user_story):
"""
Generates advanced QA test cases based on a provided user story by interacting
with Nvidia's llama model API. The prompt is refined for clarity,
and the output is processed for better quality.
:param user_story: A string representing the user story for which to generate test cases.
:return: A list of test cases in the form of dictionaries.
"""
# Few-shot learning examples to guide the model
few_shot_examples = """
"if its not a DropBury or ODAC Portal User Story, then we perform testing in Tech360 iOS App"
"Generate as many as testcases possible minimum 6 ,maximum it can be anything"
"Understand the story thoroughly"
"If it's a DropBury or ODAC Portal User Story, then we perform testing in ODAC Portal"
"""
# Combine the few-shot examples with the user story for the model to process
prompt = few_shot_examples + f"\nUser Story: {user_story}\n"
try:
# Call the Nvidia llama API with the refined prompt
completion = client.chat.completions.create(
model="meta/llama-3.1-405b-instruct", # Using llama3.1 405b model
messages=[
{"role": "user", "content": prompt}
],
temperature=0.03, # Further lowering temperature for precise and deterministic output
top_p=0.7, # Prioritize high-probability tokens even more
max_tokens=4096, # Increase max tokens to allow longer content
stream=True # Streaming the response for faster retrieval
)
# Initialize an empty string to accumulate the response
test_cases_text = ""
# Accumulate the response from the streaming chunks
for chunk in completion:
if chunk.choices[0].delta.content is not None:
test_cases_text += chunk.choices[0].delta.content
# Ensure the entire response is captured before cleaning
if test_cases_text.strip() == "":
return [{"test_case": "No test cases generated or output was empty."}]
# Clean the output by unescaping HTML entities and replacing <br> tags
test_cases_text = clean_test_case_output(test_cases_text)
try:
# Try to parse the output as JSON, assuming the model returns structured test cases
test_cases = json.loads(test_cases_text)
if isinstance(test_cases, list):
return test_cases # Return structured test cases
else:
return [{"test_case": test_cases_text}] # Return as a list with the text wrapped in a dict
except json.JSONDecodeError:
# Fallback: return the raw text if JSON parsing fails
return [{"test_case": test_cases_text}]
except requests.exceptions.RequestException as e:
print(f"API request failed: {str(e)}")
return []
def export_test_cases(test_cases):
if not test_cases:
return "No test cases to export."
# Use pandas to export the test cases to Excel
df = pd.DataFrame(test_cases)
output = io.BytesIO()
df.to_excel(output, index=False)
output.seek(0)
return output.getvalue()
def save_test_cases_as_file(test_cases):
if not test_cases:
return "No test cases to save."
# Use pandas to save the test cases to an Excel file
df = pd.DataFrame(test_cases)
df.to_excel('test_cases.xlsx', index=False)
return 'excel file saved'
|