ChatGPT和百度文心一言写用例,谁更强?

2023-11-10

文心一言发布的第一时间,就排队申请了邀请码,昨晚看了下,邀请码已经到手,索性就拿一个例子试了一下,看看哪个能够真正意义上的提高生产力,最简单的录制了个GIF动画如下:

问题:
你是一个软件测试工程师,得到一个需求:软件程序Helios会自动采集容器内的socket调用记录、ptrace调用记录、userfaultfd调用记录、connect调用记录、core_pattern调用记录。请根据软件测试方法,为上述需求写出测试点,验证Helios程序采集容器内功能的完整性,并写出测试用例,包括正常和异常场景,分别为每个用例输出python测试程序。

ChatGPT的回答:aa8859c8dd65337bd2e4601f46ad00c2.gif

百度文心一言的回答:
a11b97aaa7698427259600d8c0138a05.gif

以下是ChatGPT回复的内容:

建立测试计划:

  1. 验证Helios程序是否能够完整地采集容器内的socket调用记录

  2. 验证Helios程序是否能够完整地采集容器内的ptrace调用记录

  3. 验证Helios程序是否能够完整地采集容器内的userfaultfd调用记录

  4. 验证Helios程序是否能够完整地采集容器内的connect调用记录

  5. 验证Helios程序是否能够完整地采集容器内的core_pattern调用记录

  6. 验证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_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

运行测试用例

test_socket()

在这个测试用例中,我们使用了Python的subprocess模块去控制Docker容器的内部执行,并读取Helios程序采集的结果,然后通过断言语句检查每个测试预期结果是否满足预期。需要注意的是,这个测试用例是以单个测试点为例的,其他测试用例的代码类似。

以下是百度文心一言的回复:

  1. 测试点:采集容器内的socket调用记录、ptrace调用记录、userfaultfd调用记录、connect调用记录、core_pattern调用记录。

  2. 正常场景:输出Helios程序采集到的数据,包括socket调用记录、ptrace调用记录、userfault fd调用记录、connect调用记录和core_pattern调用记录。

  3. 异常场景:当发现Helios程序没有输出相应的数据时,需要进行确认测试验证其完整性。

  4. 测试用例:

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还是文言一心,无疑都是好帮手,毕竟,强者恒强,借助人工智能去创新创造才是根本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ChatGPT和百度文心一言写用例,谁更强? 的相关文章

  • 刷脸支付驱动新零售构建全新的消费场景

    毋庸置疑 刷脸支付是一场属于商家与用户的双赢技术 逐渐成为零售行业新的增长点 不但改变着人们的生活方式 支付也将更方便 更快捷 更安全 同时还能为商家带来更多的便利 较大地降低了人工和管理成本 除此之外 3D视觉作为AI感知核心技术 还可以
  • 矩阵图有何用处?XMind完美展示多对多对象间的关系!

    矩阵图是思维导图中运用非常广泛的图形 通俗来说 它其实就是一个表格 但却能非常紧凑的展现出对象之间的多对多关系 它提供的维度至少比其他树形图多一个维度 矩阵图 下图称为MD 表示多对多关系 但是 如何使MD与XMind中的其他图表区别开来
  • 【git】git报错:git checkout xxx error: The following untracked working tree files would be overwritten b

    git报错 git checkout xxx error The following untracked working tree files would be overwritten by checkout README md Pleas
  • SpringBoot实现导入功能

    实体类 gt MeetRestaurantArrange package com krt meet entity import com baomidou mybatisplus annotation TableName import com
  • 小米手机如何安装fiddler证书

    在手机浏览器输入ip port 1 找到设置 2 更多设置 3 系统安全 4 从存储设备安装 以上问题可以解决在fiddler抓包https的问题
  • python 类的__str__方法

    转载自文章 str 方法 当使用print输出对象的时候 只要类中自己定义了 str self 方法 那么就会打印从在这个方法中return的数据 例如 class Cat 定义一个猫类 def init self new name new
  • OpenCV移植到ARM全过程-III

    gt 目录 在上一篇文章里面我们已经交叉编译好了opencv的第三方依赖库 并且解压好了opencv源码 现在开始正式的交叉编译opencv源码 进入opencv源码目录下 上一篇在源码的的根目录下建立了2个文件夹build和output
  • 基于Spring-Data-Elasticsearch 优雅的实现 多字段搜索 + 高亮 + 分页 + 数据同步✨

    持续创作 加速成长 这是我参与 掘金日新计划 10 月更文挑战 的第17天 点击查看活动详情 系列说明 本系列文章基于我的开源微服务项目 校园博客 进行分析和讲解 所有源码均可在GitHub仓库上找到 系列文章地址请见我的 校园博客专栏 G
  • LinearEyeDepth 定义

    UnityCG cginc中原函数如下 Z buffer to linear 0 1 depth 0 at eye 1 at far plane inline float Linear01Depth float z return 1 0 Z
  • 重学STM32---(六)DAC+DMA+TIM

    这两天复习了DAC DMA再加上把基本定时器TIM6和TIM7看了一下 打算写一个综合点的程序 就在网上找了一些关于DAC DMA和定时器相关的程序 最终打算写了输出正弦波的程序 由于没有示波器 也就不能显示出效果了 本来是打算用软件调试看
  • linux获取ipv6公网ip,Linux 获取IPv6网关

    基于hisi3536实现的 ubuntu下只要找到对应的配置文件 ipv6 route 即可 include include include include include include include include include i
  • #ifdef #if defined #ifndef和#if !defined区别 详解-覆盖所有说明

    首先 让我们先从头文件开始 在很多头文件里 我们会看到这样的语句 ifndef MYHEADFILE H define MYHEADFILE H 语句 endif MYHEADFILE H 为了避免同一个文件被include多次 我们常使用
  • 浅谈构建iOS一个动态化页面的思路

    随着产品的不断迭代 功能的不断完善 我们的项目的中会给用户分成区域呈现出越来越多的东西 咕咚的精选给用户一种信息广场的概念 让用户可以快速的抵达我们感兴趣的点 既然如此 那么每一个项目的综合信息的页面经常会被改动 出现位置的调整 出现新的模
  • STM32中断与事件的理解

    推荐文档 事件与中断区别 目录 事件与中断区别 举例 膝跳反射 人们看见火灾之后打119 事件与中断区别 很多时候 我们经常使用到中断 但是STM32还有一个东西叫做事件 那么这个事件是什么呢 看了上面这个文档我们知道 1 中断是需要CPU
  • MyBatis的Mapper接口以及Example的实例函数及详解

    一 mapper接口中的方法解析 mapper接口中的函数及方法 方法 功能说明 int countByExample UserExample example thorws SQLException 按条件计数 int deleteByPr
  • c#中函数参数中的this(扩展方法)

    首先和大家说一下 最近参加实习了 所以更新可能比较少 而且对于大家提出的问题可能不能及时回复 希望大家理解 在我看完大佬的项目之后 感觉自己啥也不会 于是不出意外 之后再csdn上我就会更新我在项目中遇到的问题 希望对大家也有些帮助 c 函
  • Web前端vueDemo—实现简单计数器功能(一)

    系列文章目录 Web前端vueDemo 实现简单计数器功能 一 Web前端vueDemo 实现图片切换功能 二 Web前端vueDemo 实现记事本功能 三 Web前端vueDemo 实现天气预报功能 四 文章目录 系列文章目录 前言 一
  • mysql数据库登录失败次数_mysql数据库限制多次登录失败,限定用户重试时间

    前言 最近的项目开始进行安全测试 其中有一个安全问题是这样的 应该增加用户登录失败处理功能 限制非法登录次数 建议是增加mysql数据库的登陆失败的锁定功能 相信大家也都会遇到这样的问题 在这里写一下 方便大家直接使用 设置方法 登录mys
  • 封装、继承、多态 详解

    面向对象的三个基本特征 封装 继承 多态 1 封装 1 封装是实现面向对象的第一步 封装就是将数据或函数等集合在一个单元中 类 被封装的对象通常被称为抽象数据类型 2 类具有封装性 类能够把数据和算法 操作数据的函数 组合在一起 构成一个不
  • 【C++】虚函数

    2023年8月23日 周三上午 目录 虚函数 在派生类中重写虚函数 纯虚函数 示例程序 虚函数 在函数返回值前面加上关键字virtual 虚函数必须在类中声明 否则会报错 Error virtual outside class declar

随机推荐