ChatGPT生成接口测试用例(二)

5.1.4 自动生成测试数据

        测试数据的生成通常是接口测试的一个烦琐任务。ChatGPT可以帮助测试团队生成测试数据,包括各种输入和它们的组合。测试人员可以描述他们需要的数据类型和范围,ChatGPT可以生成符合要求的测试数据,从而减轻测试人员的负担。

        对于一个在线预订酒店的用户登录接口的测试,需要输入用户名、密码、电话和电子邮箱信息。ChatGPT可以根据接口测试的需要生成多条不同测试数据,下面以生成10000条user表的数据为例。在ChatGPT中输入提示词,其就能给出Python代码,运行代码后就能得到SQL文件。ChatGPT生成的部分SQL文件如图5-1所示。

图5-1  ChatGPT生成的部分SQL文件

        ChatGPT生成的完整的SQL文件如下所示。

ChatGPT生成的完整的SQL 文件  

要生成10000条包含用户名、密码、邮箱和手机号的SQL插入语句,你可以使用Python编写脚本,然后执行它以生成SQL语句。以下是一个示例Python脚本,用于生成这些SQL语句:

import random

import string

# 生成符合长度要求的随机用户名

def generate_username(length):

    username = ''.join(random.choice(string.ascii_letters) for _ in range(length))

    return username

# 生成包含大小写字母、数字和特殊符号的随机密码

def generate_password(length):

    characters = string.ascii_letters + string.digits + string.punctuation

    password = ''.join(random.choice(characters) for _ in range(length))

    return password

# 生成格式正确的随机邮箱地址

def generate_email():

    username = generate_username(random.randint(5 10))

    domain = ''.join(random.choice(string.ascii_lowercase) for _ in range(5))

    extension = random.choice(['com' 'net' 'org'])

    email = f"{username}@{domain}.{extension}"

    return email

# 生成符合手机号格式的随机数字

def generate_phone_number():

    area_code = random.randint(100 999)

    exchange = random.randint(100, 999)

    subscriber_number = random.randint(1000, 9999)

    phone_number = f"({area_code}) {exchange}-{subscriber_number}"

    return phone_number

# 生成10000SQL插入语句

sql_statements = []

for _ in range(10000):

    username = generate_username(8)

    password = generate_password(12)

    email = generate_email()

    phone_number = generate_phone_number()

   

    # 构建插入语句

    sql = f"INSERT INTO user (username password Email phone) VALUES ('{username}' '{password}' '{email}' '{phone_number}');"

    sql_statements.append(sql)

# 保存SQL语句到文件

with open("insert_data.sql" "w") as file:

    for statement in sql_statements:

        file.write(statement + "\n")

此脚本将生成10000SQL插入语句,将这些数据插入名为"user"的数据表中。你可以根据你的数据库类型和需求修改生成的SQL语句,确保它们与你的数据库架构相匹配。生成的SQL语句将保存在名为"insert_data.sql"的文本文件中。

5.1.5 更新和维护测试用例

        随着系统的演化,测试用例需要不断更新和维护。ChatGPT可以用来协助测试人员,根据新的接口规范和需求来修改测试用例。这有助于确保测试用例始终与系统的最新版本保持一致。

        在一个电子邮件应用程序的接口测试中,我们需要测试发送电子邮件的功能。随着新的电子邮件格式和附件要求的变化,我们需要更新测试用例以适应这些变化。ChatGPT可以帮助我们快速修改测试用例,以满足新的需求,从而减少维护测试用例的工作量。

5.1.6 自动生成接口测试代码

        对于常用的接口测试工具或者测试框架,如Postman、JMeter、pytest等,ChatGPT都可以生成相应的接口测试用例脚本等。测试人员只需描述接口信息和测试场景,通常就可以获得可直接运行的接口测试用例脚本。

        针对上例的购物车接口,ChatGPT生成的JMeter测试用例脚本,如下所示。

ChatGPT生成的JMeter测试用例脚本

<?xml version="1.0" encoding="UTF-8"?>

<jmeterTestPlan version="1.2" properties="5.0" jmeter="5.5">

  <hashTree>

    <TestPlan guiclass="TestPlanGui" testclass="TestPlan" testname="测试计划">

      <stringProp name="TestPlan.comments"></stringProp>

      <boolProp name="TestPlan.functional_mode">false</boolProp>

      <boolProp name="TestPlan.tearDown_on_shutdown">true</boolProp>

      <boolProp name="TestPlan.serialize_threadgroups">false</boolProp>

      <elementProp name="TestPlan.user_defined_variables"

elementType="Arguments" guiclass="ArgumentsPanel"

testclass="Arguments" testname="用户定义的变量" enabled="true">

        <collectionProp name="Arguments.arguments"/>

      </elementProp>

      <stringProp name="TestPlan.user_define_classpath"></stringProp>

    </TestPlan>

    <hashTree>

      <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup"

testname="线程组">

        <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>

        <elementProp name="ThreadGroup.main_controller"

elementType="LoopController" guiclass="LoopControlPanel"

testclass="LoopController" testname="循环控制器" enabled="true">

          <boolProp name="LoopController.continue_forever">false</boolProp>

          <stringProp name="LoopController.loops">1</stringProp>

        </elementProp>

        <stringProp name="ThreadGroup.num_threads">1</stringProp>

        <stringProp name="ThreadGroup.ramp_time">1</stringProp>

        <boolProp name="ThreadGroup.scheduler">false</boolProp>

        <stringProp name="ThreadGroup.duration"></stringProp>

        <stringProp name="ThreadGroup.delay"></stringProp>

        <boolProp

name="ThreadGroup.same_user_on_next_iteration">true</boolProp>

      </ThreadGroup>

      <hashTree>

        <HTTPSamplerProxy guiclass="HttpTestSampleGui"

testclass="HTTPSamplerProxy" testname="HTTP请求" enabled="true">

          <elementProp name="HTTPsampler.Arguments" elementType="Arguments"

guiclass="HTTPArgumentsPanel" testclass="Arguments"

testname="用户定义的变量" enabled="true">

            <collectionProp name="Arguments.arguments">

              <elementProp name="item_id" elementType="HTTPArgument">

                <boolProp name="HTTPArgument.always_encode">false</boolProp>

                <stringProp name="Argument.value">123456</stringProp>

                <stringProp name="Argument.metadata">=</stringProp>

                <boolProp name="HTTPArgument.use_equals">true</boolProp>

                <stringProp name="Argument.name">item_id</stringProp>

              </elementProp>

              <elementProp name="num" elementType="HTTPArgument">

                <boolProp name="HTTPArgument.always_encode">false</boolProp>

                <stringProp name="Argument.value">1</stringProp>

                <stringProp name="Argument.metadata">=</stringProp>

                <boolProp name="HTTPArgument.use_equals">true</boolProp>

                <stringProp name="Argument.name">num</stringProp>

              </elementProp>

            </collectionProp>

          </elementProp>

          <stringProp name="HTTPSampler.domain">www.example.com</stringProp>

          <stringProp name="HTTPSampler.port"></stringProp>

          <stringProp name="HTTPSampler.protocol">http</stringProp>

          <stringProp name="HTTPSampler.contentEncoding"></stringProp>

          <stringProp name="HTTPSampler.path">/cart/add</stringProp>

          <stringProp name="HTTPSampler.method">POST</stringProp>

          <boolProp name="HTTPSampler.follow_redirects">true</boolProp>

          <boolProp name="HTTPSampler.auto_redirects">false</boolProp>

          <boolProp name="HTTPSampler.use_keepalive">true</boolProp>

          <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>

          <stringProp name="HTTPSampler.embedded_url_re"></stringProp>

          <stringProp name="HTTPSampler.connect_timeout"></stringProp>

          <stringProp name="HTTPSampler.response_timeout"></stringProp>

        </HTTPSamplerProxy>

        <hashTree>

          <ResponseAssertion guiclass="AssertionGui"

testclass="ResponseAssertion" testname="响应断言" enabled="true">

            <collectionProp name="Asserion.test_strings">

              <stringProp name="49586">200</stringProp>

            </collectionProp>

            <stringProp name="Assertion.custom_message"></stringProp>

            <stringProp

name="Assertion.test_field">Assertion.response_code</stringProp>

            <boolProp name="Assertion.assume_success">false</boolProp>

            <intProp name="Assertion.test_type">8</intProp>

          </ResponseAssertion>

          <hashTree/>

        </hashTree>

      </hashTree>

    </hashTree>

  </hashTree>

</jmeterTestPlan>

5.1.7 智能对比新旧接口

        在接口迭代升级的过程中,往往需要修改对应的接口测试用例。ChatGPT可以通过对比新旧接口规范,智能生成修改接口测试用例的建议。

        例如,购物车接口进行了变更,新旧接口文档示例如下所示。

新旧接口文档示例

原接口:

接口:add_to_cart

方法:POST 

参数:item_id num

......

新接口:

接口:add_to_cart

方法:POST

参数:item_id num selected

......

        ChatGPT可以快速指出新接口文档中添加了selected参数,并给出更新测试用例的建议。ChatGPT给出的更新测试用例的建议如下所示。

ChatGPT给出的更新测试用例的建议

- 新接口在原有基础上新增了selected参数,需要在原有用例中补充该参数的测试。

- selected参数可以传入01,表示状态是否选中。需要新增用例验证该参数的逻辑。

- 需要保留原有不传selected参数的兼容性用例。

        这样可以避免测试人员逐一手动对比了解接口的变更,从而大幅提升修改接口测试用例的效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

@pytest.fixture() 跟 @pytest.fixture有区别吗?

在iOS UI 自动化工程里面最早我用的是pytest.fixture()&#xff0c;因为在pycharm中联想出来的fixture是带&#xff08;&#xff09;的&#xff0c;后来偶然一次我没有带&#xff08;&#xff09;发现也没有问题&#xff0c;于是详细查了一下pytest.fixture() 和 pytest.fixtur…

项目管理工具Maven(一)

Maven的概念 什么是Maven 翻译为“专家”&#xff0c;“内行”Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。什么是理想的项目构建&#xff1f; 高度自动化&#xff0c;跨平台&#xff0c;可重用的组件&#xff0c;标准…

webstorm中vue项目import的内容不能直接ctrl+鼠标点击跳转(若依等vue项目)

webstorm中vue项目import的内容不能直接ctrl鼠标点击跳转&#xff08;若依等vue项目&#xff09; https://blog.csdn.net/wangzhenhuait/article/details/121231087 https://blog.csdn.net/qq_26711723/article/details/137586701?spm1001.2101.3001.6650.5&utm_mediumd…

深入解析MySQL Explain关键字:字段意义及调优策略

一、引言 在数据库优化过程中&#xff0c;Explain关键字发挥着至关重要的作用。它可以帮助我们了解MySQL如何执行SQL语句&#xff0c;从而找出潜在的性能瓶颈。下面我们将从Explain表的各个字段入手&#xff0c;逐一解释其意义&#xff0c;并探讨如何利用Explain进行调优。 二…

C++设计模式:组合模式(公司架构案例)

组合模式是一种非常有用的设计模式&#xff0c;用于解决**“部分-整体”**问题。它允许我们用树形结构来表示对象的层次结构&#xff0c;并且让客户端可以统一地操作单个对象和组合对象。 组合模式的核心思想 什么是组合模式&#xff1f; 组合模式的目的是将对象组织成树形结…

ElasticSearch 自动补全

1、前言 当用户在搜索框输入字符时&#xff0c;我们应该提示出与该字符有关的搜索项&#xff0c;根据用户输入的字母&#xff0c;提示完整词条的功能&#xff0c;就是自动补全。 2、安装拼音分词器 Github地址&#xff1a;https://github.com/infinilabs/analysis-pinyin 插件…

UML 建模实验

文章目录 实验一 用例图一、安装并熟悉软件EnterpriseArchitect16二、用例图建模 实验二 类图、包图、对象图类图第一题第二题 包图对象图第一题第二题 实验三 顺序图、通信图顺序图银行系统学生指纹考勤系统饮料自动销售系统“买到饮料”“饮料已售完”“无法找零”完整版 通信…

Linux环境下 搭建ELk项目 -单机版练习

前言 ELK 项目是一个由三个开源工具组成的日志处理和分析解决方案&#xff0c;ELK 是 Elasticsearch、Logstash 和 Kibana 的首字母缩写。这个项目的目标是帮助用户采集、存储、搜索和可视化大量的日志和事件数据&#xff0c;尤其是在分布式系统中。下面是每个组件的概述&…

探索 Vue.js 组件开发:从基础到进阶的完整指南

引言 在现代前端开发中&#xff0c;Vue.js 凭借其易用性和强大的功能&#xff0c;成为了开发者钟爱的框架之一。其核心理念——组件化开发&#xff0c;不仅让代码更加模块化、可维护&#xff0c;还大大提高了开发效率。本文将从基础入手&#xff0c;详细探讨 Vue.js 组件开发的…

智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之3(百度文库答问 之1)

Q&A&#xff08;百度文库&#xff09; Q1、今天聊聊“智能工厂的设计软件”中的三种处理单元&#xff08;NPU/GPU/CPU&#xff09;。一般来说提起这三者就不得不说“深度学习”。那我们就从这里开始。 请先给出一个程序例子来说明NPU 如何协作CPU和GPU来完成深度学习任务 …

jdk 离线安装脚本

jdk 离线安装脚本 说明脚本使用完整脚本脚本内容说明1、是否卸载原有jdk&#xff0c;检查安装包是否正确2、先卸载、再安装并检验安装成果 说明 经常装服务器环境&#xff0c;根据以前的安装经验写了个安装脚本。本人不是专业运维&#xff0c;也是边百度边写的&#xff0c;发现…

HTTP 常见的请求头有哪些? 作用?常见的使用场景都有哪些?

在 HTTP 协议中,**请求头(Request Headers)**是客户端向服务器发送请求时附带的元数据,主要用于传递请求的相关信息,比如客户端信息、请求的格式要求、认证信息等。理解这些请求头的作用和使用场景对于开发现代 Web 应用至关重要。以下是一些常见的 HTTP 请求头及其作用和…

day14-16系统服务管理和ntp和防火墙

一、自有服务概述 服务是一些特定的进程&#xff0c;自有服务就是系统开机后就自动运行的一些进程&#xff0c;一旦客户发出请求&#xff0c;这些进程就自动为他们提供服务&#xff0c;windows系统中&#xff0c;把这些自动运行的进程&#xff0c;称为"服务" window…

2024年底-Sre面试回顾

前言 背景: 2024.11月底 公司不大行了, 裁员收缩, 12月初开始面试, 2周大概面试了十几家公司, 3个2面要去线下, 有1个还不错的offer, 想结束战斗但还没到时候 个人情况: base上海 5年经验(2年实施3年运维半年开发) 面试岗位: Sre、云原生运维、驻场运维、高级运维、实施交付 …

pytest入门十:配置文件

pytest.ini&#xff1a;pytest的主配置文件&#xff0c;可以改变pytest的默认行为conftest.py&#xff1a;测试用例的一些fixture配置 pytest.ini marks mark 打标的执行 pytest.mark.add add需要些marks配置否则报warning [pytest] markersadd:测试打标 测试用例中添加了 p…

【Rust自学】3.6. 控制流:循环

3.6.0. 写在正文之前 欢迎来到Rust自学的第三章&#xff0c;一共有6个小节&#xff0c;分别是: 变量与可变性数据类型&#xff1a;标量类型数据类型&#xff1a;复合类型函数和注释控制流&#xff1a;if else控制流&#xff1a;循环&#xff08;本文&#xff09; 通过第二章…

【C#】方法参数的修饰符ref 与 out

在 C# 中&#xff0c;ref 和 out 是方法参数的修饰符&#xff0c;用于将参数 按引用传递&#xff0c;而不是按值传递。这允许方法修改调用者传递的变量的值。尽管它们的行为类似&#xff0c;但有重要的区别和适用场景。 1. ref 的含义与使用 含义 引用传递&#xff1a; 参数通…

js进阶语法详解

文章目录 js进阶语法详解一、引言二、闭包与作用域1、闭包1.1、示例代码 2、作用域2.1、示例代码 三、this关键字与函数调用1、this的指向1.1、示例代码 2、apply和call方法2.1、示例代码 四、异步编程1、Promise1.1、示例代码 五、JS的面向对象封装1、封装的概念1.1、构造函数…

Qt WORD/PDF(一)使用 QtPdfium库实现 PDF 预览

文章目录 一、简介二、下载 QtPdfium三、加载 QtPdfium 动态库四、Demo 使用 关于QT Widget 其它文章请点击这里: QT Widget 国际站点 GitHub: https://github.com/chenchuhan 国内站点 Gitee : https://gitee.com/chuck_chee 姊妹篇: Qt WORD/PDF&#x…

.Net WebAPI(一)

文章目录 项目地址一、WebAPI基础1. 项目初始化1.1 创建简单的API1.1.1 get请求1.1.2 post请求1.1.3 put请求1.1.4 Delete请求 1.2 webapi的流程 2.Controllers2.1 创建一个shirts的Controller 3. Routing3.1 使用和创建MapControllers3.2 使用Routing的模板语言 4. Mould Bind…