type
status
date
slug
summary
tags
category
icon
password
标签
是否汉化
📌
多少人都在自己的认知里想的通透,然而活不通透.

前言


✍🏻
在AI能力大幅进步的背景下,日常的编码工作ChatGPT使用频率确实较高,突出表现在报错问题排查及代码优化方面给予了很大帮助. 近段时间在尝试调研自动化测试辅助方面如何借助AI相关或ChatGPT来提高效率或找一个突破口尝试下,将实际的业务场景给到ChatGPT,进行json数据生成并输出测试用例,在对ChatGPT的输出结果进行简单的调整和修改后,就可以用于业务测试中了. 以下是对比了ChatGPT_3.5模型和ClaudeAI2.0的输出, 结合上下文需要调教一番:
notion image
notion image
notion image

调研过程

什么是Fuzzing

模糊测试(Fuzzing)的核心思想是通过系统自动生成随机数据作为输入, 来验证被测程序的可靠性.
在测试领域中, Fuzzing经常作为一种补充接口测试手段, 来覆盖/探索接口中潜在的异常/临界值场景.
简单来说, 系统通过给定种子用例, 随机生成大批量用例, 调用被测接口, 尝试发现问题(挖掘bug).
模糊测试的难点在于如何基于种子用例生成随机有效的用例数据, 从业界的经验来看, 测试人员通过对生成内容进行建模、设计相应算法来匹配被测对象, 才能取得比较好的生成效果.
随着ChatGPT的发布, 其AIGC的能力令人惊艳,如果借助ChatGPT的优势,能否降低生成随机数据的成本, so, 围绕ChatGPT生成用例的可行性进行了尝试.

结合Fuzzing与ChatGPT可以做什么

经过上述的调研,模糊测试(Fuzzing)的思路是 : 基于种子用例生成随机用例 -> 执行用例 -> 发现问题(bug挖掘),但其难点在于如何生成高质量的随机用例, 而ChatGPT的内容生成能力,似乎可以解决这一问题. 将两者尝试结合, 模糊测试作为核心思想, ChatGPT作为用例生成服务,目标是通过大量ChatGPT生成的用例,来挖掘被测对象潜在的问题.
notion image

设计实践

✍🏻
在自动化测试中, 以模糊测试为基石, 让ChatGPT来充当规则变异器, 自动生成接口测试用例, 覆盖率作为检验生成用例的有效性,目的是发现问题和提高自动化测试的效率.

ChatGPT生成用例的可行性

1) 结合现有的自动化测试项目进行改造优化,使期达到预期目的
2) 为了保证公司接口不全部暴露给ChatGPT , 设计前置规则:不提供接口地址
3) 基于 auto_api_tc 项目
一键执行(测试人员尽可能少的输入相关入参,以下流程步骤全部自动完成):
  • 脚本自动生成相关目录及文件(脚本代码)
  • 调用openai生成测试用例数据并写入临时表
  • 将数据格式化后根据模板写入yaml
  • 执行测试脚本并生成allure报告

设计思路

notion image

实现过程

代码部分

基于pytest框架 将conftest\test_xxx.py\yml等文件封装成模板,一键生成

notion image

ChatGPT_prompt 提示词信息写在markdown文件中,便于维护及gpt更好的识别

notion image

封装执行文件

(初始化文件夹及文件→ChatGPT调用提示词生成测试用例→存入临时文件json→将用例提取转化接口数据文件data_yml→执行测试用例)
notion image

测试执行文件

notion image
✍🏻
参数说明: 安装: 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

执行结果

notion image

工具定位

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
  • WeChat: Alan_Hsu_521
notion image
notion image
 
 
 
python 中的特殊方法(魔术方法)2024_周报 #05
  • Twikoo
  • Cusdis