通过ChatGPT生成测试用例

简介: 通过ChatGPT生成测试用例

输入

产品注册页面如下:

代码语言:javascript

复制

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>用户注册界面</title>
<link rel="stylesheet" type="text/css" href="css/index.css"/>
<script src="js/index.js" type="text/javascript"></script>
    <script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/core.js"></script>
<script src="https://cdn.jsdelivr.net/npm/crypto-js@4.1.1/sha256.js"></script>
</head>
<body>
<div class="container">
    <h2>用户注册</h2>
     <form name="myForm" method="POST" action="jsp/register.jsp" onsubmit="return validateForm();">
        <label for="username">账号 (5-20位字母或数字):</label>
        <input type="text" id="username" name="username" required>
        <div id="usernameError" class="error"></div>
        <label for="password">密码 (5-30位,包含大小写字母、数字和特殊字符):</label>
        <input type="password" id="password" name="password" required>
        <div id="passwordError" class="error"></div>
        <label for="confirmPassword">密码确认:</label>
        <input type="password" id="confirmPassword" name="confirmPassword" required>
        <div id="confirmPasswordError" class="error"></div>
        <label for="phone">手机号 (中国):</label>
        <input type="tel" id="phone" name="phone" required>
        <div id="phoneError" class="error"></div>
        <label for="email">邮箱:</label>
        <input type="email" id="email" name="email" required>
        <div id="emailError" class="error"></div>
        <button type="submit">注册</button>
    </form>
</div>
</body>
</html>

用户注册界面包括。

  • 账号:文本框,5-20位大小写英文字符、数字。重复的账户不允许注册
  • 密码:密码框,必须包括大小写英文字符、数字和特殊字符,5-30位,SHA256散列传输。
  • 密码确认:与密码一致
  • 手机号:符合中国手机号码格式
  • Email:符合标准Email格式
  • 注册按键
  • 注册成功出现“注册成功!”提示。
  • 避免XSS注入
  • 避免CSRF注入
  • 避免SQL注入

请设计测试用例

输出

设计测试用例时,我们需要确保覆盖所有功能需求、安全需求以及边界条件。以下是基于您提供的用户注册界面需求的一组测试用例:

功能测试用例

账号验证

TC1: 输入少于5个字符的账号,验证是否提示错误。

TC2: 输入多于20个字符的账号,验证是否提示错误。

TC3: 输入含有非法字符的账号,验证是否提示错误。

TC4: 输入已存在的账号,验证是否提示重复账户错误。

TC5: 输入合法账号,验证是否接受。

密码验证

TC6: 输入少于5个字符的密码,验证是否提示错误。

TC7: 输入多于30个字符的密码,验证是否提示错误。

TC8: 输入不包含大小写英文字符、数字和特殊字符的密码,验证是否提示错误。

TC9: 输入合法密码,验证是否接受。

密码确认验证

TC10: 输入与密码不一致的确认密码,验证是否提示错误。

TC11: 输入与密码一致的确认密码,验证是否接受。

手机号验证

TC12: 输入非中国手机号格式的手机号,验证是否提示错误。

TC13: 输入合法中国手机号,验证是否接受。

Email验证

TC14: 输入非标准Email格式的Email,验证是否提示错误。

TC15: 输入合法Email,验证是否接受。

表单提交

TC16: 使用所有合法输入提交表单,验证是否显示“注册成功!”提示。

安全测试用例

XSS攻击防御

TC17: 在所有输入字段中尝试输入JavaScript代码,验证代码是否被执行。

CSRF攻击防御

TC18: 尝试从其他网站发起跨站请求提交表单,验证是否被阻止。

SQL注入防御

TC19: 在所有输入字段中尝试输入SQL注入攻击代码,验证系统是否安全处理,不执行非法SQL代码。

性能测试用例

TC20: 在高流量下提交表单,验证系统是否能稳定运行并及时响应。

兼容性测试用例

TC21: 在不同的浏览器(如Chrome, Firefox, Safari, Edge等)上测试所有功能,验证是否均正常工作。

边界条件测试

TC22: 输入边界长度的账号和密码(正好5位和20位的账号,5位和30位的密码),验证是否正确处理。

通过这些测试用例,我们可以确保注册页面在功能上符合需求,在安全性上具备基本防护,并且具有良好的用户体验和性能表现。

二、生成测试代码

输入

基于TC22 产生基于playwright的GUI测试用例,其他基于python requests的接口测试用例

输出

以下是基于您提到的测试用例 TC22 和其他安全、功能测试的详细实现。我们将分为两部分:Playwright 用于GUI测试,Python Requests 用于接口测试。

1. 基于 Playwright 的 GUI 测试用例

Playwright 是一个非常强大的工具,可以用来执行自动化的Web应用程序测试。以下是一个示例测试用例,涵盖了 TC22(输入边界长度的账号和密码),以及其他常见功能测试。

安装依赖:

首先,您需要安装 Playwright 和 pytest(如果还没有安装的话):

代码语言:javascript

复制

pip install playwright pytest
playwright install

测试用例:test_registration.py

代码语言:javascript

复制

import pytest
from playwright.sync_api import sync_playwright
         
# 登录页面URL
URL = "http://localhost:8080/register"
           
# TC22:边界条件测试,账号和密码长度的验证
def test_registration_boundary_conditions():
    with sync_playwright() as p:
        # 启动浏览器
        browser = p.chromium.launch(headless=False)  # headless=False 可以查看执行过程
        page = browser.new_page()
         
        # 访问注册页面
        page.goto(URL)
         
        # TC22:测试账号(5位字符)和密码(5位字符)
        page.fill("input[name='username']", "abcde")  # 5个字符的账号
        page.fill("input[name='password']", "Abc12")  # 5个字符的密码
        page.fill("input[name='confirmPassword']", "Abc12")  # 密码确认
        page.fill("input[name='phone']", "13812345678")  # 合法手机号
        page.fill("input[name='email']", "test@example.com")  # 合法邮箱
        page.click("button[type='submit']")  # 提交表单
         
        # 验证注册成功提示
        page.wait_for_selector("text=注册成功!")
        success_message = page.inner_text("text=注册成功!")  
        assert success_message == "注册成功!", f"Expected success message, but got {success_message}"
         
        # TC22:测试账号(20位字符)和密码(30位字符)
        page.fill("input[name='username']", "a" * 20)  # 20个字符的账号
        page.fill("input[name='password']", "A1b2C3d4E5f6G7H8I9j0K1l2")  # 30个字符的密码
        page.fill("input[name='confirmPassword']", "A1b2C3d4E5f6G7H8I9j0K1l2")  # 密码确认
        page.click("button[type='submit']")  # 提交表单
         
        # 验证注册成功提示
        page.wait_for_selector("text=注册成功!")
        success_message = page.inner_text("text=注册成功!")
        assert success_message == "注册成功!", f"Expected success message, but got {success_message}"
         
        # 关闭浏览器
        browser.close()

2. 基于 Python Requests 的接口测试用例

对于接口测试,我们将使用 Python requests 库来模拟用户提交表单的数据。以下是用于测试接口的Python代码,包括验证边界条件、账号和密码的格式等。

安装依赖:

代码语言:javascript

复制

pip install requests pytest

测试用例:test_registration_api.py

代码语言:javascript

复制

import requests
import pytest
         
# 注册接口的URL
REGISTER_URL = "http://localhost:8080/api/register"
         
# TC22:账号和密码的边界条件测试
@pytest.mark.parametrize("username, password, confirm_password", [
    ("abcde", "Abc12", "Abc12"),  # 5个字符的账号和密码
    ("a" * 20, "A1b2C3d4E5f6G7H8I9j0K1l2", "A1b2C3d4E5f6G7H8I9j0K1l2"),  # 20个字符的账号和30个字符的密码
])
def test_registration_boundary_conditions(username, password, confirm_password):
    data = {
        "username": username,
        "password": password,
        "confirmPassword": confirm_password,
        "phone": "13812345678",  # 合法手机号  
        "email": "test@example.com"  # 合法邮箱
    }
         
    response = requests.post(REGISTER_URL, data=data)
    assert response.status_code == 200, f"Expected status code 200, but got {response.status_code}"
    assert "注册成功" in response.text, f"Expected '注册成功' in response, but got {response.text}"
         
# TC23:测试输入非法账号
def test_invalid_username():
    data = {
        "username": "abc",  # 小于5个字符
        "password": "Abc123!",
        "confirmPassword": "Abc123!",
        "phone": "13812345678",
        "email": "test@example.com"
    }
         
    response = requests.post(REGISTER_URL, data=data)
    assert response.status_code == 400, f"Expected status code 400, but got {response.status_code}"  
    assert "账号必须是5-20位字母或数字" in response.text, f"Expected validation error for username, but got {response.text}"
         
# TC24:测试密码格式不合法
def test_invalid_password():
    data = {
        "username": "validUser",
        "password": "abc",  # 不符合密码格式要求
        "confirmPassword": "abc",
        "phone": "13812345678",
        "email": "test@example.com"
    }
         
    response = requests.post(REGISTER_URL, data=data)
    assert response.status_code == 400, f"Expected status code 400, but got {response.status_code}"
    assert "密码必须包含大小写字母、数字和特殊字符" in response.text, f"Expected validation error for password, but got {response.text}"
         
# TC25:测试SQL注入
def test_sql_injection():
    data = {  
        "username": "' OR 1=1 --",  # SQL注入攻击
        "password": "Abc123!",
        "confirmPassword": "Abc123!",
        "phone": "13812345678",
        "email": "test@example.com"
    }
         
    response = requests.post(REGISTER_URL, data=data)
    assert response.status_code == 400, f"Expected status code 400, but got {response.status_code}"
    assert "输入无效" in response.text, f"Expected '输入无效' error, but got {response.text}"
         
# TC26:测试XSS攻击
def test_xss_injection():
    data = {
        "username": "    <>
     alert('XSS')
    
",  # XSS攻击
        "password": "Abc123!",
        "confirmPassword": "Abc123!",
        "phone": "13812345678",
        "email": "test@example.com"
    }  
         
    response = requests.post(REGISTER_URL, data=data)
    assert response.status_code == 400, f"Expected status code 400, but got {response.status_code}"
    assert "输入无效" in response.text, f"Expected '输入无效' error, but got {response.text}"
         
# TC27:测试CSRF防护
def test_csrf_attack():
    headers = {
        "X-CSRF-TOKEN": "malicious_token",  # 模拟恶意的CSRF令牌
    }
    data = {
        "username": "validUser",
        "password": "Abc123!",
        "confirmPassword": "Abc123!",
        "phone": "13812345678",
        "email": "test@example.com"
    }
         
    response = requests.post(REGISTER_URL, data=data, headers=headers)
    assert response.status_code == 403, f"Expected status code 403, but got {response.status_code}"  
    assert "CSRF攻击" in response.text, f"Expected 'CSRF攻击' error, but got {response.text}"

3. 说明

Playwright测试:

·TC22:通过在浏览器中自动化输入账号和密码,并提交表单,检查是否能够成功注册。

·每个步骤通过断言检查页面是否正确显示“注册成功”的消息。

Python Requests测试:

·TC22:测试边界条件:账号5位、密码5位和账号20位、密码30位,确保接口正确处理。

·TC23:测试账号长度小于5字符的情况。

·TC24:测试不符合密码规则的情况(比如缺少特殊字符、数字等)。

·TC25:测试SQL注入的情况,确保接口防止SQL注入攻击。

·TC26:测试XSS攻击,确保输入被正确处理,防止执行JavaScript代码。

·TC27:测试CSRF攻击,确保接口可以阻止非法的跨站请求。

通过这些自动化测试,您可以有效验证注册页面的功能是否满足要求,并保证系统的安全性。

目录
相关文章
|
13小时前
|
测试技术
更正以前风险调整中的一个缺陷
以前在我写的书《软件测试技术实战——设计、工具及管理》中提及一个关于风险调整的策略是完全错误的,现在更正如下
48 36
|
8天前
|
弹性计算 运维 Linux
|
10天前
|
人工智能 自然语言处理 算法
阴阳怪气的路人与大师来啦
通义千问帮你分析了获奖文章的共性,包括创新性、实用性、完整性、技术深度和表达能力。根据这些标准,你的文章若能在技术细节、创新方法和实际应用方面有所突破,尤其是结合实际案例和效果展示,未来仍有机会获奖。虽然此次未获奖,但保持积极心态,持续创作高质量内容,相信你会取得更好的成绩。继续加油!
47 29
|
13小时前
|
前端开发 JavaScript Java
使用ChatGPT生成登录产品代码
使用ChatGPT生成登录产品代码
38 28
|
13小时前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
43 28
|
8天前
|
Java 测试技术 应用服务中间件
Spring Boot 配置文件总结
Spring Boot 提供全局配置文件 `application.properties` 和 `application.yml`,用于修改自动配置的默认值。前者使用键值对配置,后者使用缩进和冒号。不同环境(开发、测试、生产)可切换配置文件,通过 `spring.profiles.active` 指定。例如,开发环境端口为4790,测试环境为4791,生产环境为4792。配置示例展示了属性、List、Map定义及引用方法。
48 14
|
7天前
|
监控 数据可视化 数据挖掘
惊叹!燕云十六声运营团队靠它提升工作效率!
在游戏行业竞争激烈的2025蛇年新春,燕云十六声团队通过选择合适的可视化协作软件实现了高效工作。板栗看板以其高度可视化的任务管理、灵活的任务分配和强大的文件管理功能脱颖而出。Trello、Asana、Monday.com、Zeplin和Slack等工具也各具特色,提供了丰富的插件、权限管理和实时沟通等功能,助力团队应对巨大工作量和协作挑战,提升工作效率,打造更优质的游戏产品。
39 12
|
6天前
|
小程序 数据安全/隐私保护
跑腿小程序系统源码
这是一款跑腿小程序,带有智能派单、系统派单、同城配送、校园跑腿、预约取件、用户端+骑手端 基于FastAdmin+thinkphp和uniapp开发的优创同城跑腿系统,支持帮取、帮送模式,包含用户端、骑手端、运营后台。
55 32
|
6天前
|
弹性计算 运维 自然语言处理
Copilot测评报告------终端智能化
作为一名后端开发工程师,我日常需要进行云资源的运维和管理。2025年初,我尝试了阿里云推出的OS Copilot,这款基于大模型的操作系统智能助手支持Alinux、CentOS、Ubuntu等系统,具备自然语言问答、辅助命令执行、系统运维调优等功能。安装过程简单流畅,通过简单的配置即可使用。Copilot不仅能处理复杂指令,还能解释管道命令,极大提升了Linux系统的使用效率。尤其在agent模式下,智能化程度更高,显著减轻了工程师的工作负担。总的来说,Copilot的表现令人惊艳,终端操作从此更加智能便捷。
|
3天前
|
弹性计算 运维 自然语言处理
测评OS Copilot,深度体验其功能
作为一名大数据方向的学生,我参与了阿里云OS Copilot的测评活动,体验其对Linux操作系统的优化效果。OS Copilot结合自然语言处理技术,通过简单命令实现系统健康检查等高效管理任务。测评中,我发现`-t`参数能快速精准地调用agent模式,显著提高运维效率,节省至少80%的时间。整体而言,OS Copilot自动化功能强大,操作简便,特别适合不熟悉命令行的用户,极大提升了云服务器管理效率,是一款值得推荐的工具。
35 12