通过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攻击,确保接口可以阻止非法的跨站请求。

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

目录
相关文章
|
9月前
|
测试技术 UED
测试方案有点难?ChatGPT助你轻松编写测试方案!
使用ChatGPT辅助编写测试方案,以高级搜索功能为例,涉及关键词搜索、过滤条件、界面兼容性、错误处理等测试点。首先明确测试需求,如按作者、时间范围和分类搜索,产品形态为App和Web应用。然后,通过提示词逐步细化方案,包括App的移动设备适配、耗电量和内存占用测试。通过不断优化提示词,确保测试方案全面覆盖功能性能、用户体验及专项测试内容。
|
27天前
|
前端开发 JavaScript 测试技术
使用ChatGPT生成登录产品代码的测试用例和测试脚本
使用ChatGPT生成登录产品代码的测试用例和测试脚本
84 35
|
27天前
|
前端开发 JavaScript Java
通过ChatGPT生成测试用例和测试脚本(2)
通过ChatGPT生成测试用例和测试脚本
68 21
|
27天前
|
JavaScript 前端开发 Java
使用ChatGPT生成关于登录产品代码的单元测试代码
使用ChatGPT生成关于登录产品代码的单元测试代码
42 16
|
4月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
111 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
5月前
|
Web App开发 JavaScript 前端开发
ChatGPT与基于GUI的自动化测试
ChatGPT与基于GUI的自动化测试,chrome浏览器+ cypress +HTML代码需要主机名脚本语言和测试目标的URL。
62 10
|
5月前
|
JavaScript 前端开发 Java
ChatGPT与单元测试
ChatGPT与单元测试,ChatGPT没有给答案,只给了个方法。
53 9
|
5月前
|
监控 安全 测试技术
ChatGPT回答关于软件测试问题
ChatGPT回答关于软件测试的问题。
60 7
|
5月前
|
JavaScript 前端开发 测试技术
ChatGPT与接口测试
ChatGPT与接口测试,测试通过
84 5
|
5月前
|
SQL 搜索推荐 测试技术
ChatGPT与测试分析
本产品需求文档(PRD)针对论坛网站的搜索功能优化,旨在提升搜索结果的准确性和速度,增强用户体验。文档涵盖项目背景、目标、功能需求(如搜索结果准确性、搜索速度优化、过滤和排序等)、非功能需求(如兼容性、性能、安全性等)、用户界面设计和技术架构等内容,并制定了详细的测试和上线计划,确保项目顺利实施。
52 0