哈喽,大家好,我是六哥!今天咱们来聊一聊如何用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自动化” 获取,没有引号哦!