【实测】用chatGPT来完整的走一次测试流程吧,看看它到底相当于我们什么等级的工程师?

简介: 【实测】用chatGPT来完整的走一次测试流程吧,看看它到底相当于我们什么等级的工程师?

   大家好,实测系列是含金量非常高且首发的专业论文性质文章,请一定要保存,点赞,分享哦~

   chatgpt我不多做介绍了,连我乡下的舅妈都知晓的东西。都说这玩意挺神的,那今天我就亲自来测试一下用gpt来做一次完整的测试流程吧?

   流程包括:

   分析需求-提炼测试点-写测试用例-生成执行用例的脚本-脚本优化

   用来测试的对象呢?一定要真实的,不能那种抽象的虚无缥缈的,比如我看别人让gpt来测试一个水杯,测试一个电梯的。咱直接就来测试网站吧,网站我为了避免引起什么商业纠纷,就用我自己的个人网站来吧。

   首先打开我的学员培训网站:

 目标:登录功能

   需求:用户名,密码,登录按钮。够简单吧?错误后有提示,正确后进入主页。

  让我们来看gpt的回答:

   不可否认的是,上述回答确实比较乱,没有条理,也确实漏掉了很多测试点,也没有丝毫考虑到我这个登录页面,仿佛回答的只是不知道哪里抄来的套词。于是我重新发问:


经过补充后,内容多了很多,但仍然只能作为自由测试来参考,无法去当做正式工作流程。于是我准备开始推进到写用例过程:


如上图所示,这次的用例确实还算不错,但是距离真正的工作中的用例要求还是相差很多,而且也没有吊我问的边界值,等价类,判定表等,仿佛依然是在拍脑袋随机写用例,而且和我一开始问的我自己的网站也已经仿佛没有任何关联了。但用来作为补充和借鉴是非常好的。

然后就是要去写用例脚本了:

如上图,gpt给出了一个很简单的线性脚本。我们先别管写的是否高级和完整,先来看看这段代码:

selenium自动化脚本的启动和收尾没太大问题;然后验证了用户名密码输入框是否存在,如果不存在就报错了;然后用一个错误的用户名密码 登录了一次,验证提示语是否正确;然后又登录了一次正确的用户名密码,验证是否可以跳转到主页;
然后又验证了一下主页的用户名显示元素是否包含用户名;
最后又点击了一下退出按钮,然后关闭了浏览器。

然后我来点评一下这段代码:

优点:gpt写的代码没有语法问题,直接扫描出来了我的页面中的几个关键元素的定位;代码注释还不错;

缺点:其中的正确用户名、密码、主页、主页用户名展示,主页退出按钮等都是gpt擅自揣测的且没有提前说明,如果给不懂脚本的人来看是会被忽悠住;用例脚本太少了,和上面一大堆的用例完全不是一起来的;用例没有引入什么标准框架,较落后;selenium的定位写法比较落后,最新的版本中这种写法是会报错的。

总结:代码还不能完全落地,仍然需要人来完善,但作为开个头来说还是不错的。类似或低于一个实习生没有经过测试培训的水平吧。

然后,我继续更新问题让其用unittest来重写,以便测试gpt能做到的极限。

继续点评:

   优点:使用了uniitest框架;增加了一条测试记住的用例;初始化的代码写在了setup可以保证每条用例的低耦合;

   缺点:数量仍然远远不足,且没有使用任何高级的写法,没有考虑时间等待等异常风险

   总结:相当于刚毕业的水准。

   然后我再次提高询问水准,看看其代码程度:

代码比较多,我就截取一些关键点和新的部分吧:

import unittest
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
class LoginTestCase(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
        self.driver.get('http:/')
    def tearDown(self):
        self.driver.quit()
    def test_invalid_credentials(self):
        # 测试无效用户名和密码
    def test_valid_credentials(self):
        # 测试正确凭据
    def test_remember_me(self):
        # 测试是否记住用户名和密码
    def test_empty_credentials(self):
        # 测试空用户名和密码
    def test_long_credentials(self):
        # 测试过长的用户名和密码
    def test_lockout_after_failed_attempts(self):
        # 测试多次失败登录后账户锁定
        invalid_username = 'testuser'
        invalid_password = 'wrongpass'
        username_input, password_input, submit_button = self._get_login_elements()
        for _ in range(3):
            ...
        # 检查账户是否被锁定
        error_msg = self.driver.find_element_by_css_selector('.alert-danger').text
        self.assertIn('您的账户已被锁定', error_msg)
    def _get_login_elements(self):
        # 获取登录表单元素
        username_input = self.driver.find_element_by_name('username')
        password_input = self.driver.find_element_by_name('password')
        remember_me_checkbox = self.driver.find_element_by_id('remember-me')
        submit_button = self.driver.find_element_by_css_selector('button[type="submit"]')
        return username_input, password_input, remember_me_checkbox, submit_button
if __name__ == '__main__':
    unittest.main()

继续点评:

优点:用例条数增多,如果继续追问下去,应该还可以增加;有了初级page-object模式的影子,元素定位独立出来了;

缺点:代码冗余,没有充分利用好用例规程和并发线程,浪费了很多执行时间。仍然没有考虑到一些网络延迟,卡顿等异常风险的处理。尚无数据驱动和关键字驱动概念。

总结:已经可以相当于工作一年左右的工程师水准了。当然代码仍然运行起来很多问题。需要大量人工矫正,不过和之前相比,人要做的事情已经少了不少。

然后我们继续升级提问文案,让其并发一下:

点评:

优点:上述代码中,使用了thread库进行多线程并发;巧妙的初步运用了数据驱动的概念,不但用户名密码是不同的,连每次的提示语和url都进行了断言;初步运用了关键字驱动,来让每个线程自动判断自身的断言目的。而po模式的影子仍然存在;

缺点:多线程的运用没有进行系统的封装,存在较大风险和局限;用例的内容结构比较单一,之前复杂的如测试浏览器记住用户密码等无法参与到这个并发中;线程是按照用例作为基本单位,对需要前后文关联的多用例是无法实现的,(所以需要在线程和用例之间制作新的中间层作为单位比较好);数据分离仍然没有实现。

结论:这种脚本一般来说,市场上的自动化测试人员有的刚毕业就可以写出来,大多是需要3-5年才可以流畅写出来的。还有很多写不到这种水平。

继续优化提问,看看结果:(代码仍然简化,只留下了关键行)

class LoginPage:
    def __init__(self, driver):
        self.driver = driver
    def load(self):
        self.driver.get('http:/t/')
    def login(self, username, password, remember_me):
        # 输入用户名和密码
        username_input, password_input, remember_me_checkbox, submit_button = self._get_login_elements()
        ...
        # 点击“登录”按钮
    def get_error_message(self):
        return error_msg
    def get_user_info(self):
        return user_info
    def _get_login_elements(self):
        # 获取登录表单元素
        return username_input, password_input, remember_me_checkbox, submit_button
class LoginTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
        self.login_page = LoginPage(self.driver)
    def tearDown(self):
        self.driver.quit()
    def test_valid_login(self):
        # 测试正确凭据登录
        test_data = {'username': 'testuser', 'password': 'testpass', 'remember_me': True}
        self.login_page.load()
        self.login_page.login(test_data['username'], test_data['password'], test_data['remember_me'])
        # 验证是否成功跳转到主页并显示用户信息
    def test_invalid_login(self):
        # 测试无效凭据登录
    def test_empty_username(self):
        # 测试空用户名登录
class LoginKeywordTest(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome(executable_path='/path/to/chromedriver')
    def tearDown(self):
        self.driver.quit()
    def test_valid_login(self):
        # 测试正确凭据登录
        test_data = {'username': 'testuser', 'password': 'testpass', 'remember_me': True}
        self._perform_login(test_data)
        # 验证是否成功跳转到主页并显示用户信息
    def test_invalid_login(self):
        # 测试无效凭据登录
        test_data = {'username': 'fakeuser', 'password': 'fakepass', 'expected_error': '用户名或密码不正确'}
        self._perform_login(test_data)
        # 检查错误消息是否正确显示
    def test_empty_username(self):
        # 测试空用户名登录
         ......

点评:

优点:增加了关键字驱动,数据驱动,po模式,并发等高级用法。

缺点:各种高级用法割裂严重,并没有融合到一起去实现,而是单纯的写了好几个独立的类demo。(应该是网上没搜到真正核心的高阶脚本,全是教程水平)

总结:作为一个高级助手存在已经非常合格且优秀了,这可以帮助那些大佬自动化工程师,可以更夸张的效率去实现高水平的脚本。gpt生成的脚本,仍然需要人力去矫正和做最后优化,虽然工作量减少了,但是工作难度却一点没降低,上述的代码让不太懂自动化去优化是很难办到的

尾语:

chatGPT在目前的测试流程中,可以作为全程的一个辅助存在,但距离真正的人类相比仍然有着难以跨越的鸿沟,而操作gpt的人的水准却一点降不了。所以网传gpt可以替代高级以上工程师还是不现实的,但却可以大幅加快工作效率,恐怕这些让领导知道后以后的排期都会短的可怜,大家摸鱼难了。gpt的答案也是从网上到处进行理解后拼接而成,但网上的代码水准一般都是皮毛和入门级,相比较从未出现在网上的工作核心代码仍然差距不小,和那些专家工程师的水准也不在一个世界。作为借鉴和省力来说很棒,堪比一个超级搜索引擎了,并且作为语言模型,能更好的理解我们的需求和说出人类可理解的话才是gpt的真正作用。


大家不必为此焦虑,但是后续互联网的超超超加速发展,和跟不上的人类意识,很可能会爆发出很多的漏洞和机遇。所以为了避免落伍,大家还是要尽快的提高自己的水平,当然这个尽快是真的可以尽快,你可以忽略一些细节和底层,这些gpt会辅助你开发,更加注重表层应用和交互使用等,学习速度当然可以提升。毕竟想要操控gpt写出多牛x的代码的前提是你到了这个牛x的境界才行,否则你都看不懂,更何谈优化和修改矫正等工作,理论上,你要超过gpt的水准才能进行优化。


对于市场的预测,我觉得,gpt对大佬们如虎添翼,哪怕就是我这个假大佬来说,我平时有很多不错的点子和设计,但是没足够的时间去亲力亲为的实现,大量的代码也在浪费自己的精力,有了gpt,我就可以短时间内输出爆炸。那无数个大佬都这样做的结果是什么?就是高技术的饱和式出现。这意味着什么呢?意味着全体工程师的水平断层更加严重,通俗来说就是技术垄断,让底层工程师没机会去学习和研究。这种情况在历史上屡见不鲜,后续的技术阶层固化后,靠知识改变命运会变得困难重重,那么现在就是最后的机会,冲上去赚更多的工资吧!

相关文章
|
4月前
|
人工智能 自然语言处理 测试技术
从人工到AI驱动:天猫测试全流程自动化变革实践
天猫技术质量团队探索AI在测试全流程的落地应用,覆盖需求解析、用例生成、数据构造、执行验证等核心环节。通过AI+自然语言驱动,实现测试自动化、可溯化与可管理化,在用例生成、数据构造和执行校验中显著提效,推动测试体系从人工迈向AI全流程自动化,提升效率40%以上,用例覆盖超70%,并构建行业级知识资产沉淀平台。
从人工到AI驱动:天猫测试全流程自动化变革实践
|
9月前
|
存储 人工智能 测试技术
HarmonyOS Next~HarmonyOS应用测试全流程解析:从一级类目上架到二级类目专项测试
本文深入解析HarmonyOS应用测试全流程,涵盖从一级类目通用测试到二级类目专项测试的技术方案。针对兼容性、性能、安全测试及分布式能力验证等关键环节,提供详细实践指导与代码示例。同时,结合典型案例分析常见问题及优化策略,帮助开发者满足华为严苛的质量标准,顺利上架应用。文章强调测试在开发中的核心地位,助力打造高品质HarmonyOS应用。
493 2
|
4月前
|
人工智能 自然语言处理 测试技术
让AI帮你跑用例-重复执行,不该成为测试工程师的主旋律
测试不该止步于重复执行。测吧科技推出用例自动执行智能体,通过AI理解自然语言用例,动态规划路径、自主操作工具、自动重试并生成报告,让测试工程师从“点点点”中解放,专注质量思考与创新,提升效率3倍以上,节约人力超50%,重构测试生产力。
|
6月前
|
算法 测试技术 API
从自学到实战:一位测试工程师的成长之路
在技术快速发展的今天,自动化测试已成为提升职场竞争力的关键技能。本文讲述了一位测试工程师从自学到实战的成长之路,分享他在学习UI、APP和API自动化过程中遇到的挑战,以及如何通过实际项目磨炼技术、突破瓶颈。他从最初自学的迷茫,到实战中发现问题、解决问题,再到得到导师指导,逐步掌握测试开发的核心思维,并向测试平台建设方向迈进。文章总结了他从理论到实践、从执行到思考的转变经验,强调了实战、导师指导和技术服务于业务的重要性。最后,邀请读者分享自己的技术突破故事,共同交流成长。
|
6月前
|
Prometheus 监控 Cloud Native
测试开发工程师的必备法宝:性能监控与分析工具全面指南
在软件开发高速迭代的今天,性能问题直接决定着产品质量和用户体验。作为测试开发工程师,熟练运用专业的性能监控与剖析工具,不仅能精准定位系统瓶颈,更能为优化决策提供可靠依据。本文将系统解析当前主流的性能监控与剖析工具及其应用场景。
|
7月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
253 0
|
7月前
|
人工智能 Java 测试技术
Java or Python?测试开发工程师如何选择合适的编程语言?
测试工程师如何选择编程语言?Java 还是 Python?多位资深专家分享建议:Python 入门简单、开发效率高,适合新手及自动化测试;Java 生态成熟,适合大型项目和平台开发。建议结合公司技术栈、个人基础及发展方向选择。长远来看,两者兼通更佳,同时关注 Go 等新兴语言。快速学习与实践才是关键。
|
10月前
|
人工智能 自然语言处理 JavaScript
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
Magnitude是一个基于视觉AI代理的开源端到端测试框架,通过自然语言构建测试用例,结合推理代理和视觉代理实现智能化的Web应用测试,支持本地运行和CI/CD集成。
1406 15
测试工程师要失业?Magnitude:开源AI Agent驱动的端到端测试框架,让Web测试更智能,自动完善测试用例!
|
8月前
|
消息中间件 缓存 监控
性能测试怎么做?方法、流程与核心要点解析
本文系统阐述了性能测试的核心方法论、实施流程、问题定位优化及报告编写规范。涵盖五大测试类型(负载验证、极限压力、基准比对、持续稳定性、弹性扩展)与七项关键指标,详解各阶段任务如需求分析、场景设计和环境搭建,并提供常见瓶颈识别与优化实战案例。最后规范测试报告内容框架与数据可视化建议,为企业级实践提出建立基线库、自动化回归和全链路压测体系等建议,助力高效开展性能测试工作。
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
879 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!

热门文章

最新文章