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的输出, 结合上下文需要调教一番:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2Fa3244866-264f-4ab8-af4f-1a5c95492e4b%2FUntitled.png?table=block&id=ee918262-3b23-4c52-b296-3bfdf5b53d26&t=ee918262-3b23-4c52-b296-3bfdf5b53d26&width=918&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2Fe271ef6e-7a0e-4cc0-923d-4e501369f459%2FUntitled.png?table=block&id=60efbc5d-6a40-4b6d-9144-e7a158dfbbc9&t=60efbc5d-6a40-4b6d-9144-e7a158dfbbc9&width=982&cache=v2)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2F6e1772b4-2a3d-4383-9257-af68c43b5157%2FUntitled.png?table=block&id=900658c3-b409-4a0c-8dd3-38e719df5d45&t=900658c3-b409-4a0c-8dd3-38e719df5d45&width=624&cache=v2)
调研过程
什么是Fuzzing
模糊测试(Fuzzing)的核心思想是通过系统自动生成随机数据作为输入, 来验证被测程序的可靠性.
在测试领域中, Fuzzing经常作为一种补充接口测试手段, 来覆盖/探索接口中潜在的异常/临界值场景.
简单来说, 系统通过给定种子用例, 随机生成大批量用例, 调用被测接口, 尝试发现问题(挖掘bug).
模糊测试的难点在于如何基于种子用例生成随机有效的用例数据, 从业界的经验来看, 测试人员通过对生成内容进行建模、设计相应算法来匹配被测对象, 才能取得比较好的生成效果.
随着ChatGPT的发布, 其AIGC的能力令人惊艳,如果借助ChatGPT的优势,能否降低生成随机数据的成本, so, 围绕ChatGPT生成用例的可行性进行了尝试.
结合Fuzzing与ChatGPT可以做什么
经过上述的调研,模糊测试(Fuzzing)的思路是 : 基于种子用例生成随机用例 -> 执行用例 -> 发现问题(bug挖掘),但其难点在于如何生成高质量的随机用例, 而ChatGPT的内容生成能力,似乎可以解决这一问题. 将两者尝试结合, 模糊测试作为核心思想, ChatGPT作为用例生成服务,目标是通过大量ChatGPT生成的用例,来挖掘被测对象潜在的问题.
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2Fcdfba82b-73dd-452e-9a40-519ea834ca46%2FUntitled.png?table=block&id=ac93cda8-88ab-4c72-83cd-3768ebe50063&t=ac93cda8-88ab-4c72-83cd-3768ebe50063&width=1292&cache=v2)
设计实践
在自动化测试中, 以模糊测试为基石, 让ChatGPT来充当规则变异器, 自动生成接口测试用例, 覆盖率作为检验生成用例的有效性,目的是发现问题和提高自动化测试的效率.
ChatGPT生成用例的可行性
1) 结合现有的自动化测试项目进行改造优化,使期达到预期目的
2) 为了保证公司接口不全部暴露给ChatGPT , 设计前置规则:不提供接口地址
3) 基于 auto_api_tc 项目
一键执行(测试人员尽可能少的输入相关入参,以下流程步骤全部自动完成):
- 脚本自动生成相关目录及文件(脚本代码)
- 调用openai生成测试用例数据并写入临时表
- 将数据格式化后根据模板写入yaml
- 执行测试脚本并生成allure报告
设计思路
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2F491307cf-d194-4f2d-9334-d221765756ff%2FUntitled.png?table=block&id=4156ac68-11cc-4099-9382-1b723bf8e846&t=4156ac68-11cc-4099-9382-1b723bf8e846&width=1172&cache=v2)
实现过程
代码部分
基于pytest框架 将conftest\test_xxx.py\yml等文件封装成模板,一键生成
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2F714b2ccd-ebf5-4df9-b0c0-a1f8dc000bd6%2FUntitled.png?table=block&id=66103d92-7142-4e85-8416-72f4f5c843c1&t=66103d92-7142-4e85-8416-72f4f5c843c1&width=720&cache=v2)
ChatGPT_prompt 提示词信息写在markdown文件中,便于维护及gpt更好的识别
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2Fbbffea10-b359-4f95-aa8b-5927de6c79c9%2FUntitled.png?table=block&id=2f2d982f-d146-4897-a2bb-c3cf04ac9aa6&t=2f2d982f-d146-4897-a2bb-c3cf04ac9aa6&width=2292&cache=v2)
封装执行文件
(初始化文件夹及文件→ChatGPT调用提示词生成测试用例→存入临时文件json→将用例提取转化接口数据文件data_yml→执行测试用例)
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2Fe45774a1-3fe2-4255-88c3-6b5da99b8dfd%2FUntitled.png?table=block&id=79c9b085-753c-4177-baba-478760b2a629&t=79c9b085-753c-4177-baba-478760b2a629&width=720&cache=v2)
测试执行文件
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2F1b53ee8b-6e50-4429-9069-6ce098da3c59%2FUntitled.png?table=block&id=d9d9e32f-fb9b-45b5-b9fc-671104c27234&t=d9d9e32f-fb9b-45b5-b9fc-671104c27234&width=2000&cache=v2)
参数说明:
安装:
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](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F68202bb5-9faf-4bfe-9cc4-aaf29bc1fbcc%2F2a84b4c8-7df8-4e5c-bcc4-8507b8bf6307%2FUntitled.png?table=block&id=24ac0366-9c98-4d03-bdc7-ec36536890d5&t=24ac0366-9c98-4d03-bdc7-ec36536890d5&width=2882&cache=v2)
工具定位
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/
![notion image](https://cdn.jsdelivr.net/gh/xsoway/xmylog_imgs@main/wechat.jpeg?t=53791898-c743-43cb-bb3b-0197212923c1)
![notion image](https://cdn.jsdelivr.net/gh/xsoway/xmylog_imgs@main/%E5%85%AC%E4%BC%97%E5%8F%B7.jpeg?t=27ab87a8-cbd7-497e-a7a8-77220e732482)
- 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!
Relate Posts