赞
踩
曾在工作之余,设想过一个能提升测试流程左侧效率的点子,结合人工智能,将自然语言自动转化为通用的功能用例、接口用例、代码单元测试用例等一系列用例,碰上这2年LLM模型大爆发,遂有自己炼一个用例生成的专用模型的想法。
用户需求:
功能需求:
非功能需求:
环境需求:
数据收集与准备:
模型训练:
输入和输出处理:
质量控制和优化:
部署和集成:
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer
def generate_test_case(model, tokenizer, input_text):
# 编码
input_ids = tokenizer.encode(input_text, return_tensors="pt")
# 模型生成测试用例
outputs = model.generate(input_ids=input_ids, max_length=50, num_return_sequences=1)
# 解码生成的测试用例
test_case = tokenizer.decode(outputs[0], skip_special_tokens=True)
return test_case
# 加载预训练的 GPT-2 模型
model = GPT2LMHeadModel.from_pretrained("gpt2")
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
# 输入自然语言文本
input_text = "在登录页面点击“忘记密码”,然后输入邮箱地址进行验证"
# 生成测试用例
test_case = generate_test_case(model, tokenizer, input_text)
# 打印生成的测试用例
print("生成的测试用例:", test_case)
import torch
from transformers import GPT2LMHeadModel, GPT2Tokenizer, GPT2Config
from torch.utils.data import Dataset, DataLoader
# 自定义数据集类
class CustomDataset(Dataset):
def __init__(self, texts, tokenizer, max_length):
self.texts = texts
self.tokenizer = tokenizer
self.max_length = max_length
def __len__(self):
return len(self.texts)
def __getitem__(self, idx):
input_text = self.texts[idx]
input_ids = self.tokenizer.encode(input_text, add_special_tokens=True, truncation=True, max_length=self.max_length)
return torch.tensor(input_ids)
# 批量生成数据
def collate_fn(data):
input_ids = [item for item in data]
input_ids = torch.stack(input_ids, dim=0)
return input_ids
# 定义模型和tokenizer
model_name = "gpt2" # 可根据需要更换其他预训练模型
output_dir = "./fine_tuned_model"
config = GPT2Config.from_pretrained(model_name)
model = GPT2LMHeadModel.from_pretrained(model_name, config=config)
tokenizer = GPT2Tokenizer.from_pretrained(model_name)
# 加载并准备训练数据
train_data = ["测试用例1", "测试用例2", "测试用例3"] # 根据实际需求提供训练数据集
dataset = CustomDataset(train_data, tokenizer, max_length=128) # 自定义数据集
dataloader = DataLoader(dataset, batch_size=8, shuffle=True, collate_fn=collate_fn) # 数据加载器
# 定义训练参数
num_train_epochs = 3 # 训练轮数
learning_rate = 5e-5 # 学习率
warmup_steps = int(len(dataset) * num_train_epochs / 256 * 0.1) # 预热步数(10%的训练步数)
# 将模型切换为训练模式,并移动到合适的设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
model.train()
# 定义优化器和学习率调度器
optimizer = torch.optim.AdamW(model.parameters(), lr=learning_rate)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=1, gamma=0.1)
# 开始微调
for epoch in range(num_train_epochs):
total_loss = 0
for batch in dataloader:
inputs = batch.to(device)
labels = inputs.clone()
inputs = inputs[:, :-1]
labels = labels[:, 1:]
optimizer.zero_grad()
outputs = model(inputs, labels=labels)
loss = outputs.loss
loss.backward()
optimizer.step()
scheduler.step()
total_loss += loss.item()
avg_loss = total_loss / len(dataloader)
print("Epoch:", epoch+1, "Avg Loss:", avg_loss)
# 保存微调后的模型
model.save_pretrained(output_dir)
tokenizer.save_pretrained(output_dir)
这些代码的主要步骤如下:
CustomDataset
,用于加载并处理训练数据。GPT2LMHeadModel
类和预训练的 tokenizer 创建模型和 tokenizer 对象。DataLoader
创建数据加载器。在完成微调后,再重复第一步,使用微调后的模型来生成测试用例。
– //待进行
– //待进行
– //完善数据处理流程以及用户操作界面和集成方式,以实现完整的自动化软件测试用例生成系统。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。