5.1.4 自动生成测试数据

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

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

图5-1  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

# 生成10000条SQL插入语句

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")
此脚本将生成10000条SQL插入语句,将这些数据插入名为"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参数可以传入0或1,表示状态是否选中。需要新增用例验证该参数的逻辑。

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

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

 

ChatGPT生成接口测试用例(二)的更多相关文章

  1. swagger 自动生成接口测试用例

    ---整体更新一波--- 1.实际工作中,因为要动手输入的地方比较多,自动生成的异常接口用例感觉用处不大,就先去掉了,只保留了正常的: 2.接口有改动的,如果开发人员没有及时告知或没有详细告知,会增加 ...

  2. python实战-基于正交实验(工具:allpairs)自动生成接口异常测试用例

    实现思路 1.抓取api信息(目前公司用的swagger),uri.method.params.response,解析完成后写入excle 2.读取抓取完毕的api信息,处理为allpairs所需要的 ...

  3. Groovy元编程应用之自动生成订单搜索接口测试用例集

    背景 在 "Groovy元编程简明教程" 一文中,简明地介绍了 Groovy 元编程的特性. 那么,元编程可以应用哪些场合呢?元编程通常可以用来自动生成一些相似的模板代码. 在 & ...

  4. 请以excel管理你的接口测试用例

    闲话休扯,上需求:自动读取.执行excel里面的接口测试用例,测试完成后,返回错误结果并发送邮件通知. 分析: 1.设计excel表格2.读取excel表格3.拼接url,发送请求4.汇总错误结果.发 ...

  5. ChatGPT API接口编程基础与使用技巧

    总结/朱季谦 趁着这周末空闲时间,在研读完OpenAi官网文档的基础上,及时总结了这篇<ChatGPT API接口编程基础与使用技巧>. 本文大部分内容是围绕编程方面,包括ChatGPT模 ...

  6. Java生成与解析二维码

    1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...

  7. python实现树莓派生成并识别二维码

    python实现树莓派生成并识别二维码 参考来源:http://blog.csdn.net/Burgess_Liu/article/details/40397803 设备及环境 树莓派2代 官方系统R ...

  8. asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

    asp.net core中使用Swashbuckle.AspNetCore(swagger)生成接口文档 Swashbuckle.AspNetCore:swagger的asp.net core实现 项 ...

  9. MSIL实用指南-生成接口

    本篇讲解怎么样生成接口,即interface. 一.创建类型创建一个接口类型依旧用ModuleBuilder的DefineType方法,但是它的第二个参数必须要有TypeAttributes.Inte ...

  10. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

随机推荐

  1. 14. 迭代器、生成器、模块与包、json模块

    1.迭代器 1.1 迭代器介绍 迭代器是用来迭代取值的工具 每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代 # while循环实现迭代取值 a = [1, 2, 3, 4, 5, ...

  2. o1 式开源推理链项目 g1:可基于 Llama 3.2-90b 模型

    g1 简介 g1 是一个开源项目,利用 Llama 3.1 70b 模型在 Groq 硬件上实现类似 OpenAI o1 的推理链能力.项目通过精心设计的提示策略引导语言模型进行逐步推理,解决了传统语 ...

  3. Linux内核中cpu_capacity是什么?

    cpu_capacity 在Linux内核中,cpu_capacity 是用于表示每个CPU的处理能力的一个参数,通常用于调度器的负载均衡.它表明不同的CPU核心在计算资源分配中的相对性能,尤其在异构 ...

  4. 数据库周刊29│2020数据库研究报告;Oracle取消今年技术大会;腾讯云DBbridge发布支持一键迁库;饿了么迁至阿里云;PG数组查询;Oracle被比特币勒索;DM8 安全管理…

    摘要:墨天轮数据库周刊第29期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档.   热门资讯 1.快讯:2020年Oracle OOW大会因疫情取消 系近20年首度[摘要]Oracle ...

  5. C#的 ArrayList集合 和 List 集合

    // 集合 & 字典的初识 // 集合的使用 // 集合与数组比较类似,都用于存放一组值 // 数组的优劣势分析 // 1. 优势:数组在内存中是连续存储的,所以他的索引速度非常的快,而且赋值 ...

  6. redis 配置文件 - 启动redis 使用文件配置启动

    # Redis configuration file example. # # Note that in order to read the configuration file, Redis mus ...

  7. Android复习(二)应用资源——>可绘制对象资源

    可绘制对象资源是图形的一般概念,是指可在屏幕上绘制的图形,以及可使用 getDrawable(int) 等 API 检索,或应用到拥有 android:drawable 和 android:icon  ...

  8. 四、Spring Boot集成Spring Security之认证流程

    二.概要说明 本文主要介绍登录登出业务流程,所以使用基于内存的用户名密码,暂不介绍授权相关内容,后续会详细介绍基于数据库的认证及授权 如何查看基于内存的默认用户名密码 如何配置基于内存的自定义用户名密 ...

  9. web服务器静态资源下载

    1. 使用 Beego 实现静态文件下载 Beego 是一个强大的 Go Web 框架,提供了处理静态文件的功能.通过简单的配置,我们可以将本地文件夹作为静态资源目录,并为用户提供下载链接. 1.1 ...

  10. KubeSphere Meetup 北京站火热报名中 | 搭载 CIC 2021 云计算峰会

    "CIC 2021 云计算峰会"是一场 Top 级行业盛会,将汇聚 800 家青云QingCloud 企业客户信息化负责人,采取线上线下相结合的方式,与会规模将超过 10000 人 ...