哈嘍,大家好,我是六哥!今天咱們來聊一聊如何用AI大模型(比如GPT-3.5)來做自動化測試,別看這東西聽起來高大上,但也沒那麼神,跟著我咱們一步一步來,保證你也能輕鬆搞定,學會了保準讓你在工作中老省事兒了。
本文物件導向為功能測試及零基礎小白,這裡我會盡量用大白話的方式舉例講解,力求所有人都能看懂,建議大家先收藏,以免後面找不到。😎
前期準備,穩紮穩打
首先,咱們得準備點東西,就像做飯前得準備好食材一樣。
安裝Python
電腦上得先裝個Python,這個不用多說,現在誰家電腦還沒個Python啊。如果你還不知道怎麼裝,百度一下“Python 安裝教程”,跟著走就行了。
安裝OpenAI庫
接下來,咱們得裝個OpenAI的庫,這個庫是用來呼叫GPT-3.5模型的。開啟命令列(Windows上叫CMD,Mac和Linux上叫Terminal),輸入下面的命令:
pip install openai
獲取API金鑰
咱得先把那 API 金鑰啥的整明白嘍。這就跟你出門得帶鑰匙一樣,沒這玩意兒,門都進不去。
api_key = "your_openai_api_key"
openai.api_key = api_key
瞅見沒,就這兩句程式碼,把你的 API 金鑰給設定好。你就麻溜地把 “your_openai_api_key” 換成你自個兒的金鑰,這就妥了。
提出要求,明確目標
接下來咱得告訴那大模型咱要幹啥。咱就想要使用者登入的測試用例,正常情況和異常情況都得有,還不能多,就兩條用例。咱得把要求提得明明白白的,不然大模型都不知道咋給咱幹活。
prompt = "生成使用者登入的測試用例,只包含正常情況和異常情況,只生成 2 條用例"
就這麼一句話,告訴大模型咱的要求。簡單明瞭,不拖泥帶水。
構建訊息,有來有往
這就跟跟人嘮嗑似的,得有來言有去語。咱得告訴大模型它是幹啥的,咱是幹啥的。這樣它才能更好地為咱服務。
messages = [
{"role": "system", "content": "你是一個有用的助手。"},
{"role": "user", "content": prompt}
]
這兩句程式碼就是構建了一個訊息列表。第一個訊息告訴大模型它是個有用的助手,第二個訊息就是咱剛才寫的那個提示。這就像給大模型打了個招呼,然後把任務交給它。
呼叫 API,火力全開
這一步可老重要了。就跟打電話找人辦事兒似的,咱得把電話打出去,才能有人回應咱。而且咱還得找對人,找那個厲害的 GPT-3.5-turbo 大模型。
try:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=messages,
max_tokens=512
)
except Exception as e:
print(f"Error generating response: {e}")
exit(1)
這段程式碼就是呼叫那個 GPT-3.5-turbo 這個大模型。要是出啥岔子了,就會列印出錯誤資訊,然後程式就不幹了。咱可得小心點,別讓它出問題。
提取用例,如獲至寶
人家大模型給咱回應了,咱得把有用的資訊給挑出來。就跟在一堆破爛裡找寶貝似的。咱得仔細點,別把好東西給漏了。
generated_text = response.choices[0].message.content.strip()
test_cases = generated_text.split('\n')
第一句程式碼就是把大模型給咱的回應內容給拿出來,去掉兩邊的空白。第二句程式碼就是把這個回應內容按照換行符給分成一條條的測試用例。這下咱就有了一堆測試用例,就像有了一堆寶藏。
列印用例,先睹為快
咱得瞅瞅大模型給咱生成的測試用例是啥樣的。就跟收到快遞得開啟看看是啥玩意兒似的。咱得趕緊看看,心裡好有個底。
print("Generated Test Cases:")
for i, case in enumerate(test_cases):
print(f"Test Case {i+1}: {case}")
這段程式碼就是列印出大模型生成的測試用例。一個一個地打出來,讓咱看得明明白白的。這樣咱就能知道大模型給咱生成的用例好不好,有沒有用。
解析用例,刨根問底
大模型給咱生成的測試用例可能不太好直接用,咱得給它整明白嘍。就跟收到一封密碼信,得給它破解了似的。咱得把裡面的關鍵資訊都找出來,才能用得順手。
def parse_test_case(case):
parts = case.split(',')
username = parts[0].split(':')[1].strip()
password = parts[1].split(':')[1].strip()
expected_result = parts[2].split(':')[1].strip()
return username, password, expected_result
這個函式就是用來解析測試用例的。把一條測試用例按照逗號分成幾部分,再把每部分按照冒號分成兩部分,把有用的資訊給挑出來,去掉兩邊的空白。這樣咱就得到了使用者名稱、密碼和預期結果,就可以更好地進行自動化測試了。
再次列印,確認無誤
咱得看看解析後的測試用例是啥樣的。就跟破解完密碼信得看看寫的是啥似的。咱得確認一下解析得對不對,有沒有問題。
parsed_test_cases = []
for i, case in enumerate(test_cases):
try:
username, password, expected_result = parse_test_case(case)
parsed_test_cases.append((username, password, expected_result))
print(f"Parsed Test Case {i+1}: Username={username}, Password={password}, Expected Result={expected_result}")
except Exception as e:
print(f"Error parsing test case {i+1}: {e}")
這段程式碼就是遍歷大模型生成的測試用例,一個一個地解析,然後把解析後的結果列印出來。要是出啥岔子了,就列印出錯誤資訊。這樣咱就能及時發現問題,解決問題。
返回用例,準備戰鬥
最後咱得把解析後的測試用例給拿出來,好讓咱在別的地方用。就跟從超市買完東西得帶回家似的。咱得把這些用例準備好,隨時可以進行自動化測試。
print("\nParsed Test Cases:")
for i, (username, password, expected_result) in enumerate(parsed_test_cases):
print(f"Test Case {i+1}: Username={username}, Password={password}, Expected Result={expected_result}")
這段程式碼就是再次列印出解析後的測試用例,讓咱看得更清楚。這樣咱就可以放心地使用這些用例了。
彙總,畫龍點睛
咱這一套流程下來,就把那個 AI 大模型給使喚得明明白白的了。先是設定好 API 金鑰,然後告訴大模型咱要幹啥,接著呼叫 API 讓大模型給咱生成測試用例,再把生成的測試用例給提取出來,列印出來瞅瞅,然後解析一下,再列印出來瞅瞅,最後把解析後的測試用例給拿出來用。
老簡單了,你就跟著我這步驟一步一步來,指定能學會。
執行後,你能得到大模型生成的使用者登入的測試用例,而且還能把這些測試用例給解析得明明白白的,方便你在自動化測試中使用。真的老好使了!
效果如下
Generated Test Cases:
Test Case 1: 以下是一些簡單的使用者登入測試用例,包括了正常情況和一些常見的異常情況:
1. 正常情況:
- 輸入正確的使用者名稱和密碼。
- 應該被允許成功地登入。
示例程式碼(Python):
```python
def test_login_normal(self):
self.driver.get("https://example.com/login")
username = self.driver.find_element_by_name("username")
password = self.driver.find_element_by_name("password")
username.send_keys("test_user")
password.send_keys("test_password")
login_button = self.driver.find_element_by_css_selector(".login-button")
login_button.click()
# 確保登入頁面顯示為正確的內容
assert "Home" in self.driver.page_source, "Failed to navigate to Home page after successful login"
```
2. 異常情況:
- 輸入無效的使用者名稱或密碼。
- 未能成功登入。
- 網頁載入失敗。
- 驗證碼錯誤。
示例程式碼(Python):
```python
def test_login_failure(self):
self.driver.get("https://example.com/login")
username = self.driver.find_element_by_name("username")
password = self.driver.find_element_by_name("password")
username.send_keys("invalid_username")
password.send_keys("invalid_password")
login_button = self.driver.find_element_by_css_selector(".login-button")
login_button.click()
# 確保沒有跳轉到登入頁面
assert self.driver.current_url != "https://example.com/login", "Failed to navigate to login page"
# 確保沒有出現驗證碼提示
assert not self.driver.find_elements_by_class_name("captcha"), "Captcha should be hidden"
# 確保沒有顯示錯誤資訊
assert not self.driver.find_element_by_class_name("error-message").is_displayed(), "Error message should not be displayed"
# 確保沒有跳轉到註冊頁面
assert self.driver.current_url != "https://example.com/register", "Failed to navigate to register page"
def test_login_timeout(self):
self.driver.get("https://example.com/login")
username = self.driver.find_element_by_name("username")
password = self.driver.find_element_by_name("password")
username.send_keys("test_user")
password.send_keys("test_password")
login_button = self.driver.find_element_by_css_selector(".login-button
Error parsing test case 1: list index out of range
我敢說,這篇文章絕對是真的是乾貨滿滿,要是你還不會用 AI 大模型搞自動化測試,那就趕緊跟著咱這文章學起來吧。保證讓你成為自動化測試的高手,在工作中大放異彩。
如需要全部原始碼,公眾號回覆 “AI自動化” 獲取,沒有引號哦!