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 定义测试用例运行测试用例 test_socket() 在这个测试用例中,我们使用了Python的subprocess模块去控制Docker容器的内部执行,并读取Helios程序采集的结果,然后通过断言语句检查每个测试预期结果是否满足预期。需要注意的是,这个测试用例是以单个测试点为例的,其他测试用例的代码类似。 以下是百度文心一言的回复:
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_result
assert "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
-
测试点:采集容器内的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还是文言一心,无疑都是好帮手,毕竟,强者恒强,借助人工智能去创新创造才是根本。