接口测试遇见大模型 陈磊 京东前测试架构师 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 陈磊 请替换 您的照片 京东前测试架构师 •阿⾥云MVP、华为云MVP •《接⼝测试⽅法论》、《持续测试》、《软件研发效能权威指南》《京东质量团队转型实践:从测试到测试开发的蜕变》、《软件研发⾏业创新实战案例解析》 •极客时间专栏“接⼝测试⼊⻔课” 技术选择的教训 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 大模型时代下测试技术的困境 测试和大模型落地走过的弯路 大模型驱动下的接口测试 目录提示词工程和软件测试技术 本地大模型驱动下的接口测试 01大模型下测试技术的困境和选择 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 大模型时代下测试技术的困境 自动化测试 手工 自动化 A 测试平台 测试框架 自研商采 智能化测试 人工智能驱动测试,就是研究如何使用计算机去做过去只有人能够做的智能的测试工作内容。测试工程师在这个工程承重变成了决策者和工具链的维护和创造者。 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 大模型时代下测试技术的困境 文生文 ChatGPT、Claude、Gemini 惊艳的能力 文生图 DALL-E2、Midjourney、StableDiffusion 文生Everything Sora、Sona、ChatTTS 输入提示词,生成内容 输入提示词,生成图片 输入提示词,生成内容 …… 冷静后的迷惑 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 大模型 大模型应用技术的选择:想用大模型 训练 就像小狗学会坐下,反复给它指令和奖励,直到它自己能听懂命令并做出 反应。 提示词工程 就像你让已经训练好的小狗去完成帮 你把拖鞋拿过来一样。 微调 就像小狗要被选拔为救生犬,除了简单的指令之外还需要学会特殊的搜救技能 RAG 就像是训练一只小狗捡球,先让它学会找到 球(检索信息),然后再教它如何把球带到你面前(生成回答),通过这样的组合训练,让小狗(模型)更聪明,能更好地完成任务。 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 02测试和大模型落地走过的弯路 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 测试和大模型落地走过的弯路 难度 训练模型 微调 RAG 提示词 训练模型 GPU、标注数据导致了无法选择 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 从零开始训练一个模型,简单调研后发现根本不可能实现 微调 利用特定领域的数据集对已预训练的大模型进行进一步训练的过程。 技术人该死的优越感 投入 警犬 导盲犬 猎犬 微调 特殊训练 测试和大模型落地走过的弯路:微调 坐 来 卧 站 参数高效微调 PEFT •调整部分参数模型或者加上一些新参数保持原参数不变 全面微调 •全部的模型参数都有所调整 •计算资源,数据规模都要求大投入 •很容易引起灾难性遗忘 •避免一下全面微调的问题 •适配器微调(adaptertuning)、前缀微调(prefixtuning)、提示词微调(prompttuning)、LoRA(低秩适配)。 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 测试和大模型落地走过的弯路:LoRA PEFT的LoRA: outputs 1、冻结原来的权重 2、用两个低秩序矩阵分解计算一个和原来权重相同行、列的矩阵。 3、用冻结的原来的权和计算后的低秩序矩阵实现原来的微调。 Temperaturesetting Softmax output Feedforwardnetwork Feedforwardnetwork A B B·A ·=Self-attention B·A += Encoder Dncoder Self-attention WeightsAppliedto Embeddingvectors inputs GOPS全球运维大会暨XOps技术创新峰会2024·北京站 测试和大模型落地走过的弯路 预训练模型 任务数据集 微调框架 评估和实验 LoRA的实现 LoRA GPU 超参设置 1个月以上 微调数据标注 3个月以上 VS 3个月以上 PromptEngineering 几分钟或几小时几分钟或者几小时 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 03提示词工程和软件测试技术 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 提示词工程 CO-STAR框架 思维链 #CONTEXT(上下文)# 我想推广公司的新产品。我的公司名为Alpha,新产品名为Beta,是一款新型超快速吹风机。 #OBJECTIVE(目标)# 帮我创建一条Facebook帖子,目的是吸引人们点击产品链接进行购买。 #STYLE(风格)# 参照Dyson等成功公司的宣传风格,它们在推广类似产品时的文案风格。#TONE(语调)# 说服性 #AUDIENCE(受众)# 我们公司在Facebook上的主要受众是老年人。请针对这一群体在选择护发产品时的典型关注点来定制帖子。 #RESPONSE(响应)# 保持Facebook帖子简洁而深具影响力。 问题理解 少样本 举个例子,角色催眠 步骤分解 零样本 直接问问题 再问问提 得到反馈 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 CoT下的测试用例生产 若投⼊5元纸币,并选择购买5元⾯值票,完成后�票,提示购票成功。 若投⼊5元纸币,并选择购买10元 ⾯值票,提示⾦额不⾜,并退回5元纸币。 若投⼊10元纸币,并选择购买5元 ⾯值票,完成后�票,提示购票成功,并找零5元。 若投⼊10元纸币,并选择购买10元 ⾯值票,完成购买后�票,提示购买成功。 若输⼊纸币后在规定时间内不选择票种类的按钮,退回的纸币,提示错误。 若选择购票按钮后不投⼊纸币,提示错误 Prompt模板 ####是分隔符 等价类测试用例设计方法是把输入的参数域划分成若等价类,这些等价类包含了有效等价类和无效等价类,有效等价类是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合,利用有效等价类可检验程序是否实现了规格说明中所规定的功能。无效等价类是指对于程序的规格说明来说是不合理的,无意义的输入数据构成的集合,利用无效等价类可检验程序是否有效的避免了规格说明中所规定的功能以外的内容。然后从每个等价类中选取少数代表性数据作为测试用例,每一类的代表性数据在测试中的作用等价于这一类中的其他值。特别注意,一条测试用例可以覆盖多个有效等价类,一条测试用例只能覆盖一个无效等价类#### 使用等价类测试用例设计方法需要经过如下几步:####step1:对输入的参数进行等价类划分,在划分等价类的时候,应该遵从如下的一些原则:####在输入条件规定了输入值的集合或者规定了必须满足的条件的情况下,可确立一个有效等价类和一个无效等价类。在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。布尔量是一个二值枚举类型,一个布尔量具有两种状态:true和false。在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类.例:输入条件说明输入字符为:中文、英文、阿拉伯文三种之一,则分别取这三种这三个值作为三个有效等价类,另外把三种字符之外的任何字符作为无效等价类。在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类#### step2:####将等价类转化成测试用例,按照[输入条件][有效等价类][无效等价类]建立等价类表,等价表可以用 markdown的方式给出,列出所有划分出的等价类,为每一个等价类规定一个唯一的编号。#### 设计一个测试用例覆盖有效等价类的时候,需要这个测试用例使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步。直到所有的有效等价类都被覆盖为止。####设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步.直到所有的无效等价类都被覆盖为止,测试用例用markdown的的表格形式输出。 输出按照如下步骤输出:#### step1:####<step1reasoning> step2:####<step2reasoning> 测试用例:####<responsetocustomer> 最后一定要输出一个markdown的表格形式测试用例,其他都不用了。 GOPS全球运维大会暨XOps技术创新峰会2024·北京站 CoT下的测试用例生产 你是⼀名资深测试⼯程师,下⾯你会⽤等价类测试⽤例设计⽅法设计测试⽤例,被测试逻辑如下####,请根据下⾯的业务描述设计接⼝参数的⼊参:#### 若投⼊5元纸币,并选择购买5元⾯值票,完成后�票,提示购票成功。 若投⼊5元纸币,并选择购买10元⾯值票,提示⾦额不⾜,并退回5元纸币。 若投⼊10元纸币,并选择购买5元⾯值票,完成后�票,提示购票成功,并找零5元。若投⼊10元纸币,并选择购买10元⾯值票,完成购买后�票,提示购买成功。 若输⼊纸币后在规定时间内不选择票种类的按钮,退回的纸币,提示错误。 若选择购票按钮后不投⼊纸币,提示错误 编号 用例输入参数预期结果 值票 1投入5元纸币,并选择购买5元面提示购票成功 ####是分隔符 等价类测试⽤例设计⽅法是把输⼊的参数域划分成若等价类,这些等价类包含了有效等价类和⽆效等价类,有效等价类是指对于程序的规格说明来说是合理的,有意义的输⼊数据构成的集合,利⽤有效等价类可检验程序是否实现了规格说明中所规定的功能。⽆效等价类是指对于程序的规格说明来说是不合理的,⽆意义的输⼊数据构成的集合,利⽤⽆效等价类可检验程序是否有效的避免了规格说明中所规定的功能以外的内容。然后从每个等价类中选取少数代表性数据作为测试⽤例,每⼀类的代表性数据在测试中的作⽤等价于这⼀类中的其他值。特别注意,⼀条测试⽤例可以覆盖多个有效等价类,⼀条测试⽤例只能覆盖⼀个⽆效等价类#### 使⽤等价类测试⽤例设计⽅法需要经过如下⼏步:####step1:对输⼊的参数进⾏等价类划分,在划分等价类的时候,应该遵从如下的⼀些原则:####在输⼊条件规定了输⼊值的集合或者规定了必须满⾜的条件的情况下,可确⽴⼀个有效等价类和⼀个⽆效等价类。在输⼊条件是⼀个布尔量的情况下,可确定⼀个有效等价类和 ⼀个⽆效等价类。布尔量是⼀个⼆值枚举类型,⼀个布尔量具有两种状态:true和false。在规定了输⼊数据的⼀组值(假定n个),并且程序要对每⼀个输⼊值分别处理的情况下,可确⽴n个有效等价类和⼀个⽆效等价类.例:输⼊条件说明输⼊字符为:中⽂、英⽂、阿拉伯 2投入5元纸币,并选择购买10元面值票 3投入10元纸币,并选择购买5元面值票 4投入10元纸币,并选择购买10元面值票 5输入纸币后在规定时间内不选择票种类的按钮 6选择购票按钮后不投入纸币 提示金额不足,并退回5元纸币 完成后出票,提示购票成功,并找零5元完成购买后出票,提示购买成功 提示错误提示错误 ⽂三种之⼀,则分别取这三种这三个值作为三个有效等价类,另外把三种字符之外的任何字符作为⽆效等价类。在规定了输⼊数据必须遵守的规则的情况下,可确⽴⼀个有效等价类(符合规则)和若⼲个⽆效等价类(从不同⻆度违反规则)。在确知已划分的等价类中各元素在程序处理中的⽅式不同的情况下,则应再将该等价类进⼀步的划分为更⼩的等价类#### step2:####将等价类转化成测试⽤例,按照[输⼊条件][有效等价类][⽆