ChatGPT和百度文心一言写用例,谁更强?
文心一言发布的第一时间,就排队申请了邀请码,昨晚看了下,邀请码已经到手,索性就拿一个例子试了一下,看看哪个能够真正意义上的提高生产力,最简单的录制了个GIF动画如下:
问题:
你是一个软件测试工程师,得到一个需求:软件程序Helios会自动采集容器内的socket调用记录、ptrace调用记录、userfaultfd调用记录、connect调用记录、core_pattern调用记录。请根据软件测试方法,为上述需求写出测试点,验证Helios程序采集容器内功能的完整性,并写出测试用例,包括正常和异常场景,分别为每个用例输出python测试程序。
ChatGPT的回答:
百度文心一言的回答:
以下是ChatGPT回复的内容:
建立测试计划:
验证Helios程序是否能够完整地采集容器内的socket调用记录
验证Helios程序是否能够完整地采集容器内的ptrace调用记录
验证Helios程序是否能够完整地采集容器内的userfaultfd调用记录
验证Helios程序是否能够完整地采集容器内的connect调用记录
验证Helios程序是否能够完整地采集容器内的core_pattern调用记录
验证Helios程序是否在容器内部运行稳定,不会发生系统崩溃等异常情况
设计测试用例 使用以下步骤检查每个测试点是否满足需求:
测试点1:验证Helios程序是否能够完整地采集容器内的socket调用记录
测试用例:
正常场景:步骤1:在容器内执行socket调用 步骤2:检查是否能够在采集结果中找到socket调用记录 预期结果:采集结果中包括所有的socket调用记录
异常场景:步骤1:在容器内关闭socket 步骤2:检查是否能够在采集结果中找到socket调用记录 预期结果:不应该有任何socket调用记录
测试点2:验证Helios程序是否能够完整地采集容器内的ptrace调用记录
测试用例:
正常场景:步骤1:在容器内执行ptrace系统调用 步骤2:检查是否能够在采集结果中找到ptrace调用记录 预期结果:采集结果中包括所有的ptrace调用记录
异常场景:步骤1:在容器内关闭ptrace 步骤2:检查是否能够在采集结果中找到ptrace调用记录 预期结果:不应该有任何ptrace调用记录
测试点3:验证Helios程序是否能够完整地采集容器内的userfaultfd调用记录
测试用例:
正常场景:步骤1:在容器内执行userfaultfd系统调用 步骤2:检查是否能够在采集结果中找到userfaultfd调用记录 预期结果:采集结果中包括所有的userfaultfd调用记录
异常场景:步骤1:在容器内关闭userfaultfd 步骤2:检查是否能够在采集结果中找到userfaultfd调用记录 预期结果:不应该有任何userfaultfd调用记录
测试点4:验证Helios程序是否能够完整地采集容器内的connect调用记录
测试用例:
正常场景:步骤1:在容器内执行connect系统调用 步骤2:检查是否能够在采集结果中找到connect调用记录 预期结果:采集结果中包括所有的connect调用记录
异常场景:步骤1:在容器内关闭connect 步骤2:检查是否能够在采集结果中找到connect调用记录 预期结果:不应该有任何connect调用记录
测试点5:验证Helios程序是否能够完整地采集容器内的core_pattern调用记录
测试用例:
正常场景:步骤1:在容器内执行core_pattern系统调用 步骤2:检查是否能够在采集结果中找到core_pattern调用记录 预期结果:采集结果中包括所有的core_pattern调用记录
异常场景:步骤1:在容器内关闭core_pattern 步骤2:检查是否能够在采集结果中找到core_pattern调用记录 预期结果:不应该有任何core_pattern调用记录
测试点6:验证Helios程序是否在容器内部运行稳定,不会发生系统崩溃等异常情况
测试用例:
正常场景:步骤1:在容器内执行正常操作 步骤2:检查容器是否运行稳定 预期结果:容器应该在正常操作下保持稳定且运行正常
异常场景:步骤1:在容器内执行一个异常操作 步骤2:检查容器是否发生崩溃等异常情况 预期结果:容器不应该发生崩溃等异常情况
以上测试点和测试用例都已经定义好了,只需要根据需求和预期结果使用Python写出测试代码即可。
追问ChatGPT:请给出你所提到的Python测试代码。
以下是一个测试用例的代码样例,可以根据需求和预期结果进行相应的修改。其他测试用例的代码类似,可以使用类似的代码格式:
导入需要使用的模块
import subprocess
定义测试用例
def test_socket():# 在容器内执行socket调用subprocess.call(["docker", "exec", "container_name", "python", "-c", "import socket; s = socket.socket(); s.bind(('localhost', 1234)); s.listen(5);"])# 读取Helios程序采集的结果with open("helios_result.txt", "r") as file:helios_result = file.read()# 检查是否采集到了socket调用记录assert "socket.bind((\'localhost\', 1234))" in helios_resultassert "socket.listen(5)" in helios_result# 关闭socket连接subprocess.call(["docker", "exec", "container_name", "python", "-c", "s = socket.socket(); s.connect(('localhost', 1234)); s.close()"])# 读取Helios程序采集的结果with open("helios_result.txt", "r") as file:helios_result = file.read()# 检查是否没有采集到socket调用记录assert "socket.connect((\'localhost\', 1234))" not in helios_result运行测试用例
test_socket()
在这个测试用例中,我们使用了Python的subprocess模块去控制Docker容器的内部执行,并读取Helios程序采集的结果,然后通过断言语句检查每个测试预期结果是否满足预期。需要注意的是,这个测试用例是以单个测试点为例的,其他测试用例的代码类似。
以下是百度文心一言的回复:
测试点:采集容器内的socket调用记录、ptrace调用记录、userfaultfd调用记录、connect调用记录、core_pattern调用记录。
正常场景:输出Helios程序采集到的数据,包括socket调用记录、ptrace调用记录、userfault fd调用记录、connect调用记录和core_pattern调用记录。
异常场景:当发现Helios程序没有输出相应的数据时,需要进行确认测试验证其完整性。
测试用例:
class TestHelio: def test_collect(self): # input = ["localhost:12345", "somehost2:23456", ...] input = ["stdio-recv0*16+0*8[0x7ff00000,0x3f3fffff]\x00|i64 00=0x7ffffbe60d802'r;R>e$7fh!?o7i@2g~qz%^{y#w}vZYuDxqy&dV<u4BkcJQXp/Ia" \
=\
,82WNmrOtIjU1nSG67PvFg3kslIZCeAzubBu8IWdHKoRgcsLwRS5Il+ @9rprt) (11hkbsic9iqnt/ j28anE> pPy$ \l; xIdoSM - g' G? )bCu= +OTep / mWe + s1T /fA3< 6 !~ M- ]Q! B " expected = [ '127.0.0.1socklenght=32 addrtype=SocketAddr sockaddrLen=24 family=AFamily id=5 pid=52 time stamp=0x52f4e54a16c40 readahead cnt=0 writeback cnt=0 cpu占用率%dpcs freq msec num rx bytes tx bytes mi register select | 100000000 00000000000000 00000000 0007f000000 00442d304a5ff000 000000000000000166c91000 00000200064e9400020e6cbc5ab38f678f73ba922c38cbd7e92e588ad5b6ed414e4a3a208baac1dccdfe2ecd96ed34d562aa09a8cca3a55af4f45e768aea65ca37bb46db16ef2bf22e9bea39bcf375b347c001f579cd27ce15d18a80b8dc43ee63d923da73abc7d58` ] assert type(input) is list and len(input) > 0, str(input) for i in range(len(input)): res = util.getallsocketcallrecord( int(input[i][31:25]), int(input[i][26:28]), int(input[i][29:30]), int(input[i][23:22]), int(input[i][21:20]), int(input[i][19:18]), int(input[i][17:16]), int(input[i][15:14]), int(input[i][13:12]), int(input[i][11:10]), int(input[i][9:8]), int(input[i][7:6]), int(input[i][5:4]), int(input[i][3:2]), int(input[i][1:0]) ) print(res) def test_collect_failure(self): # in回复速度:ChatGPT明显快很多;
回复精准度上:ChatGPT明显是真正的理解了输入这段文字的意思,并且逐一做出了回复,而且回复的内容精准度较高,可以作为一个提效工具去使用,相比文心一言,做的回复就很粗糙,所以说只能是个小玩具,也可能是引导回答的方式不对。
虽然还有一定差距,但是百度已经很努力了,被强者牵引之后,相信百度能够很快赶上,精神可嘉,毕竟是第一个迎面而上的男人,希望文心一言一样也变强,变成一个强有力的提效工具。
回到软件测试人员甚至程序员会不会被替代这个问题上,很难说,如果不学习,还不到被AI提到就早已经被别人替代了,所以还是要坚持学习的;至少,当前还不会,因为将人工智能应用到不用人为干预就完成用例输出还需要一定的适应和转换成本,所以说学会如何借助人工智能把用例写的更好,这才是核心;
另外一点是可以借助ChatGPT更快速高效的写代码,当然前提是使用者懂代码,如果不懂代码,也不一定能够很好的利用起来,毕竟你也不知道AI给你的代码正确性如何,再或者你想修改代码,还是得知道代码怎么修改,整体而言,对懂代码的人、对懂测试用例的人,无论是ChatGPT还是文言一心,无疑都是好帮手,毕竟,强者恒强,借助人工智能去创新创造才是根本。
相关文章:
ChatGPT和百度文心一言写用例,谁更强?
文心一言发布的第一时间,就排队申请了邀请码,昨晚看了下,邀请码已经到手,索性就拿一个例子试了一下,看看哪个能够真正意义上的提高生产力,最简单的录制了个GIF动画如下:问题:你是一个…...
设计模式总结
设计模式的六大原则 开放-封闭原则(OCP) (总原则) Open-Close Principle:该对扩展开放,对修改关闭。 目的就是保证程序的扩展性好,易于维护和升级。 开放-封闭原则是面向对象设计的核心所在, 开闭原则是Java世界里最基础的设计原则。 开闭…...
【K8S系列】深入解析Pod对象(一)
目录 序言 1.问题引入 1.1 问题描述 2 问题解答 2.1 pod 属性 2.1.1 NodeSelector 2.1.2 HostAliases 2.1.3 shareProcessNamespace 2.1.4 NodeName 2.1.5 其他pod属性 2.2 容器属性 2.2.1 ImagePullPolicy 2.2.2 Lifecycle 3 总结 4. 投票 序言 任何一件事情&am…...
JVM学习.02 内存分配和回收策略
1、前言《JVM学习.01 内存模型》篇讲述了JVM的内存布局,其中每个区域是作用,以及创建实例对象的时候内存区域的工作流程。上文还讲到了关于对象存货后,会被回收清理的过程。今天这里就着重讲一下对象实例是如何被清理回收的,以及清…...
logstash+elasticsearch+Kibana(ELK)日志收集
文章目录一.安装ELK 7.17二.为Elasticsearch设置密码三.配置logstash四.springboot整合logstash五.spring整合Elastic Search一.安装ELK 7.17 不要一股脑执行以下语句,请观察修改要修改的地方 安装logstash # logstash安装docker run -d --name logstash \-p 5043:5043 -p 5…...
今天面试了一个2年Java经验的
今天去面试了一个26岁的程序员,看了简历,2年经验,本科,写得很牛叉。 Spring cloud alibaba全家桶、redis,分布式锁,服务调用,数据库事务,线程,Zookeeper、Dubbo 、Rabbi…...
逻辑覆盖测试用例设计
逻辑覆盖测试用例设计 实验目标 能够依据程序画出程序流程图理解常用覆盖方法的内涵理解常用覆盖方法的强弱关系能够使用常用覆盖方法设计测试用例 背景知识 白盒测试通常采用静态测试方法和动态测试方法开展。动态测试是参照系统需求或测试规则,通过预先设计一…...
面试官:说一下MySQL中的锁机制吧
5. 1MySQL有哪些锁? 为保证数据的一致性,需要对并发操作进行控制,因此产生了锁。同时锁机制也为实现MySQL的各个隔离级别提供了保证。 锁冲突 也是影响数据库并发访问性能的一个重要因素。所以锁对数据库而言显得尤其重要,也更加…...
STL库中list的迭代器实现痛点分析
前文本篇文章准备换个模式,之前都是先详解模拟实现,但是模拟实现的基本逻辑大多数老铁都是明白的,所以我们这次主要讲解STL库中list的独特性,也就是模拟实现中的重难点文末有模拟实现的源码一,list实现的特殊类list实现…...
字符编码对比(GBK、Unicode、UTF-8)
摘要我们在网上能看到各种文字和符号,那么它们是怎么存储和转化的,还有我们常常提及的UTF-8,为什么都要设置这种编码方式,这里就探讨下。字符集字符集:就是各国文字、符号、数字的集合。常见的字符集有:ASC…...
【百面成神】Redis基础11问,你能坚持到第几问
前 言 🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端 ☕专栏简介:纯手打总结面试题,自用备用 🌰 文章简介:Redis最基础、重要的11道面试题 文章目录…...
十大排序算法极简汇总篇
说明 十大排序算法可以说是每个程序员都必须得掌握的了,如果你们像从 0 详细学习每一篇,那么你们可以看前面的文章。 但是呢,有些人可能已经学过,想要快速复习一下,看看代码怎么写的,那么可以看这篇十大排…...
数据结构笔记
文章目录第一章:数据结构与算法第二章:稀疏数组和队列一 、稀疏sparsearray 数组(一)案例需求(二)稀疏数组介绍(三)应用实列(四)代码实现二、队列(…...
web前端框架——Vue的特性
目录 前言: 一.vue 二.特性 1.轻量级 2.数据绑定 3.指令 4.插件 三.比较Angular 、React 、Vue 框架之间的比较 1. Angular Angular的优点: 2. React React 的优点: 3.vue 3.Vue的优点: 前言: 本篇文章…...
提权工具推荐(PEASS-ng、linpeas_linux_amd64、winPEASany_ofs)
介绍 在这里,您可以找到适用于Windows、Linux/Unix*和MacOS的权限提升工具。 这些工具搜索您可以利用的可能的本地权限提升路径,并用漂亮的颜色打印给您,这样您就可以很容易地识别错误配置。 查看book.hacktricks.xyz中的本地Windows权限提升检查表WinPEAS-Windows本地权限…...
Spark - 继承 FileOutputFormat 实现向 HDFS 地址追加文件
目录 一.引言 二.源码浅析 1.RDD.saveAsTextFile 2.TextOutputFormat 3.FileOutputFormat 三.源码修改 1.修改文件生成逻辑 - getRecordWriter 2.允许目录存在 - checkoutputSpecs 3.全部代码 - TextOutputFormatV2 四.追加存储代码实战 五.总结 一.引言 Output d…...
树莓派编程控制继电器及继电器组
目录 一,继电器说明 ● 继电器接口说明 ① 继电器输入端: ② 继电器输出端: 二,树莓派控制继电器 三,树莓派控制继电器组 一,继电器说明 通俗点讲,可以把继电器理解成是一些功能设备的控制开关。 ● LOW&#…...
oracle和mysql的区别
Oracle与MySQL的区别以及优缺点 MySQL的特点 1、性能卓越,服务稳定,很少出现异常宕机; 2、开放源代码无版本制约,自主性及使用成本低; 3、历史悠久,社区和用户非常活跃,遇到问题及时寻求帮助…...
<Linux开发> linux应用开发-之-uart通信开发例程
一、简介 串口全称叫做串行接口,串行接口指的是数据一个一个的按顺序传输,通信线路简单。使用两条线即可. 实现双向通信,一条用于发送,一条用于接收。串口通信距离远,但是速度相对会低,串口是一种很常用的工…...
基于深度学习的安全帽检测系统(YOLOv5清新界面版,Python代码)
摘要:安全帽检测系统用于自动化监测安全帽佩戴情况,在需要佩戴安全帽的场合自动安全提醒,实现图片、视频和摄像头等多种形式监测。在介绍算法原理的同时,给出Python的实现代码、训练数据集,以及PyQt的UI界面。安全帽检…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
