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界面。安全帽检…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
Rust 异步编程
Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...

如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...