password
URL
type
status
date
slug
summary
tags
category
icon
周起始
标签
是否汉化
多少人都在自己的认知里想的通透,然而活不通透.
前言调研过程什么是Fuzzing结合Fuzzing与ChatGPT可以做什么设计实践ChatGPT生成用例的可行性设计思路实现过程代码部分基于pytest框架 将conftest\test_xxx.py\yml等文件封装成模板,一键生成ChatGPT_prompt 提示词信息写在markdown文件中,便于维护及gpt更好的识别封装执行文件测试执行文件执行结果工具定位1.扫描接口, 利用随机入参带来的不确定性,来验证接口的稳定性2.在不同代码版本中,回归接口的稳定性3.生成的推荐用例可以用来验证同一接口在不同代码版本下响应,理论上针对推荐用例的响应,预期是一致的它能做什么、不能做什么可以做暂时不能做后续规划
前言
在AI能力大幅进步的背景下,日常的编码工作ChatGPT使用频率确实较高,突出表现在报错问题排查及代码优化方面给予了很大帮助.
近段时间在尝试调研自动化测试辅助方面如何借助AI相关或ChatGPT来提高效率或找一个突破口尝试下,将实际的业务场景给到ChatGPT,进行json数据生成并输出测试用例,在对ChatGPT的输出结果进行简单的调整和修改后,就可以用于业务测试中了. 以下是对比了ChatGPT_3.5模型和ClaudeAI2.0的输出, 结合上下文需要调教一番:
调研过程
什么是Fuzzing
模糊测试(Fuzzing)的核心思想是通过系统自动生成随机数据作为输入, 来验证被测程序的可靠性.
在测试领域中, Fuzzing经常作为一种补充接口测试手段, 来覆盖/探索接口中潜在的异常/临界值场景.
简单来说, 系统通过给定种子用例, 随机生成大批量用例, 调用被测接口, 尝试发现问题(挖掘bug).
模糊测试的难点在于如何基于种子用例生成随机有效的用例数据, 从业界的经验来看, 测试人员通过对生成内容进行建模、设计相应算法来匹配被测对象, 才能取得比较好的生成效果.
随着ChatGPT的发布, 其AIGC的能力令人惊艳,如果借助ChatGPT的优势,能否降低生成随机数据的成本, so, 围绕ChatGPT生成用例的可行性进行了尝试.
结合Fuzzing与ChatGPT可以做什么
经过上述的调研,模糊测试(Fuzzing)的思路是 : 基于种子用例生成随机用例 -> 执行用例 -> 发现问题(bug挖掘),但其难点在于如何生成高质量的随机用例, 而ChatGPT的内容生成能力,似乎可以解决这一问题. 将两者尝试结合, 模糊测试作为核心思想, ChatGPT作为用例生成服务,目标是通过大量ChatGPT生成的用例,来挖掘被测对象潜在的问题.
设计实践
在自动化测试中, 以模糊测试为基石, 让ChatGPT来充当规则变异器, 自动生成接口测试用例, 覆盖率作为检验生成用例的有效性,目的是发现问题和提高自动化测试的效率.
ChatGPT生成用例的可行性
1) 结合现有的自动化测试项目进行改造优化,使期达到预期目的
2) 为了保证公司接口不全部暴露给ChatGPT , 设计前置规则:不提供接口地址
3) 基于 auto_api_tc 项目
一键执行(测试人员尽可能少的输入相关入参,以下流程步骤全部自动完成):
- 脚本自动生成相关目录及文件(脚本代码)
- 调用openai生成测试用例数据并写入临时表
- 将数据格式化后根据模板写入yaml
- 执行测试脚本并生成allure报告
设计思路
实现过程
代码部分
基于pytest框架 将conftest\test_xxx.py\yml等文件封装成模板,一键生成
ChatGPT_prompt 提示词信息写在markdown文件中,便于维护及gpt更好的识别
封装执行文件
(初始化文件夹及文件→ChatGPT调用提示词生成测试用例→存入临时文件json→将用例提取转化接口数据文件data_yml→执行测试用例)
测试执行文件
参数说明:
安装:
pip install openai==0.28
说明:
一.调用方法说明:
默认路径: auto_api_tc/testSimple
实例化 AITestCase类,传入参数
类方法: create_files(): 创建用例文件夹及其下相关文件:__init__.py, data_xxx.yml, conftest.py, test_xxx.py
类方法: generate(): 根据要求调用openai生成用例数据以字典格式输出
类方法: write_yml_data(): 根据要求调用openai生成用例数据以字典格式输出,并写入yml文件
类方法: run_test(): 执行用例文件,并生成allure报告
用例执行:
方式1: 直接执行test_xxx.py文件
方式2: 执行pytest命令,如: pytest -s test_xxx.py;生成allure报告:allure serve report/result
执行结果
工具定位
1.扫描接口, 利用随机入参带来的不确定性,来验证接口的稳定性
比如:用作新接口的异常测试入参验证
新接口的异常测试入参校验在没有经过测试验证前,校验项是容易存在遗漏缺失,通过随机生成的入参内容,可以用来验证校验逻辑的完备性
2.在不同代码版本中,回归接口的稳定性
比如用作新老代码在异常入参测试领域用作回归测试
3.生成的推荐用例可以用来验证同一接口在不同代码版本下响应,理论上针对推荐用例的响应,预期是一致的
它能做什么、不能做什么
可以做
1.创建并执行随机参数输入的模糊测试
2.批量测试用例生成(非业务语义)
3.基于创建的执行集,在每个代码版本中用作回归测试验证(不同代码版本对同一份测试用例的结果校验)
暂时不能做
1.替代手工测试/场景化测试,原因是ChatGPT还不能很好的生成具有业务语义内容的数据
与现有自动化/功能测试之间的关系
2.原有自动化/功能测试不会针对异常入参场景做详尽的参数输入测试,而自动推荐用例服务,可以在数量上弥补这一场景
3.从替代性上来说,目前无法替代现有的自动化/功能测试,只能用作辅助测试,最大的问题还是自动推荐用例服务
还不具备完善的业务语义(真实)数据生成的能力
后续规划
- 补充完善自动化断言输出部分
- 测试报告结果分析自动化输出
- 优化调试prompt(提高入参推荐准确度及内容生成质量)
- 结合django_vue 开发可视化页面,使其更方便使用
- 用例数据生成部分加入安全测试相关case
- 深度挖掘ChatGPT在自动化测试领域的其他可行性
- 设计ChatGPT可识别的语言模板,使期更精准输出
- 搭建私有化数据模型,搜集并存储所有(业务)用例数据,进行标注训练 #(idea)
离开乏味的皮囊,自由的灵魂在路上
- Name: Alan Hsu
- Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
- Email:xulanzhong521gmail.com
- Twitter:@AlanHsu521
- Telegram:@AlanHsu521
- WeChat: Alan_Hsu_521
- Github: https://github.com/xsoway/
- Blog: https://xmylog.com
- Author:Alan_Hsu
- URL:https://xmylog.com/article/articles_python_ai_test_api
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!