基于通用LLM的一次测试用例自动生成的实验

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
大数据开发治理平台 DataWorks,不限时长
简介: 基于通用LLM的一次测试用例自动生成的实验

基于通用LLM的一次测试用例自动生成的实验

选择很多,最后选择了讯飞的星火做本次实验,原因还是因为讯飞的LLM的API是有免费额度的,案例代码相对比较成熟易学易用

1 LLM和基于LLM的应用

最近这段实际LLM已经变成了一个炙手可热的词汇,现在任何技术不了到LLM都感觉好像没有彻底聊完一样。那么LLM到底是什么呢?其实LLM(大语言模型)是一种语言模型,由具有许多参数的人工神经网络组成,使用自监督学习或半监督学习对大量未标记文本进行训练。大型语言模型在2018年左右出现,并在各种任务中表现出色。这里面的大其实也是相对的,那么多少参数算大、多少参数又算小确实没有一个通用的定义,通常指的是参数数量在数十亿或更多数量级的模型就算大模型。

image.png

训练一个模型一般都是通过如上三个步骤完成的,先去确定一个候选算法的集合,然后确定一种评价方法,在这种评价方法上找到优的算法,最终达到预期目标的过程就是模型训练的过程。

image.png

训练一个模型一般需要很长时间,那么构建一个基于 LLM 的应用就需要更长时间。随着 Prompt 的发展现在基于 prompt 构建一个应用系统已经变的时间越来越多,有很多在几小时只能就能完成开发。

2 LLM生成测试用例

本文就在充分描述Prompt之上,构建了一个通过通用模型生成测试用例的例子(这只是一个demo)。为了方便,我先把被测试系统的逻辑(类似条目化的需求陈述如下)。
image.png

被测系统是地铁车票自助购票软件系统需求,系统只接收 5元或10元纸币,一次只能使用一张纸币,车票只有两种面值 5 元或者 10 元。其中:

  • 若投入5元纸币,并选择购买5元面值票,完成后出票,提示购票成功。
  • 若投入5元纸币,并选择购买10元面值票,提示金额不足,并退回5元纸币。
  • 若投入10元纸币,并选择购买5元面值票,完成后出票,提示购票成功,并找零5元。
  • 若投入10元纸币,并选择购买10元面值票,完成购买后出票,提示购买成功。
  • 若输入纸币后在规定时间内不选择票种类的按钮,退回的纸币,提示错误。
  • 若选择购票按钮后不投入纸币,提示错误

看到这个测试流程应用测试用力设计方法,设计测试用例如下图:
image.png

那么调用讯飞的 spark 生成测试用例的例如代码如下:

import SparkApi
import os
from dotenv import load_dotenv, find_dotenv

#加载环境变量

_=load_dotenv(find_dotenv())
appid = os.getenv("SPARK_APP_ID")
api_secret=os.getenv("SPARK_APP_SECRET")
api_key=os.getenv("SPARK_APP_KEY")


#用于配置大模型版本,默认“general/generalv2”
# domain = "general"   # v1.5版本
domain = "generalv2"    # v2.0版本
#云端环境的服务地址
# Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址ws(s)://spark-api.xf-yun.com/v2.1/chat



text =[]

# length = 0

def getText(role,content):
    jsoncon = {}
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text

def getlength(text):
    length = 0
    for content in text:
        temp = content["content"]
        leng = len(temp)
        length += leng
    return length

def checklen(text):
    while (getlength(text) > 8000):
        del text[0]
    return text



if __name__ == '__main__':
    text.clear
    while(1):
        Input = input("\n" +"我:")
        softprompt = "你是一名资深测试工程师,下面你会用等价类法设计测试用例,请根据下面的业务描述设计接口参数的入参:"
        question = checklen(getText("user",softprompt+Input))
        SparkApi.answer =""
        print("星火:",end = "")
        SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
        getText("assistant",SparkApi.answer)
        # print(str(text))

运行后,输入我们的业务逻辑后,LLM给设计的测试用例如下:
image.png

仔细分析一下如上流程,其实比人工设计的还要精简,但是按照业务流程的覆盖度上而言,确实还是很好的,人工可以通过完善一下对应的 cases 就可以执行测试了。

3 总结

如上就是一个小实验,尝试使用LLM帮助测试工程师,实验中可以看出prompting base构建的系统就足以满足测试工程师工作的助手的要求了,只要设计好prompt,并且给prompt足够的信息,那么就可以得出有效的测试用例,但是这距离工程化还有一段很长的路要走。

目录
相关文章
|
7月前
|
人工智能 自然语言处理 安全
【网安AIGC专题10.19】论文3代码生成:ChatGPT+自协作代码生成+角色扮演(分析员、程序员、测试员)+消融实验、用于MBPP+HumanEval数据集
【网安AIGC专题10.19】论文3代码生成:ChatGPT+自协作代码生成+角色扮演(分析员、程序员、测试员)+消融实验、用于MBPP+HumanEval数据集
119 0
|
7月前
|
分布式计算 测试技术 API
为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码)
为集成LLM到测试平台提供更便捷的方式:为讯飞的LLM星火创建接入LangChain类(全部源代码)
387 0
|
18天前
|
异构计算
FPGA片内ROM测试实验(二)
FPGA片内ROM测试实验
23 1
|
3天前
|
机器学习/深度学习 SQL 人工智能
Web LLM 实验:间接注入
Web LLM 实验:间接注入
|
3天前
|
机器学习/深度学习 存储 SQL
Web LLM 实验:利用 LLM 中不安全的输出处理
Web LLM 实验:利用 LLM 中不安全的输出处理
|
3天前
|
机器学习/深度学习 SQL 人工智能
Web LLM 实验:利用 LLM API 实现命令注入
Web LLM 实验:利用 LLM API 实现命令注入
|
3天前
|
SQL 机器学习/深度学习 人工智能
Web LLM 实验:利用 LLM API 实现 SQL 注入
Web LLM 实验:利用 LLM API 实现 SQL 注入
|
18天前
|
存储 数据格式 异构计算
FPGA片内ROM测试实验(一)
FPGA片内ROM测试实验
28 1
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
LLM的测试工具:LaVague平替成国内大模型
LaVague是一款使用LLM将自然语言转换为Selenium代码以实现自动化测试的工具。由于huggingface的某些模型需付费且访问不便,本文介绍了如何使用智谱的免费大模型作为替代。智谱提供免费的embedding模型和大量令牌。
122 1
|
7月前
|
自然语言处理 搜索推荐 Java
【网安AIGC专题10.25】9 LIBRO方法(ICSE2023顶会自动化测试生成):提示工程+查询LLM+选择、排序、后处理(测试用例函数放入对应测试类中,并解决执行该测试用例所需的依赖)
【网安AIGC专题10.25】9 LIBRO方法(ICSE2023顶会自动化测试生成):提示工程+查询LLM+选择、排序、后处理(测试用例函数放入对应测试类中,并解决执行该测试用例所需的依赖)
166 0