输入
产品注册页面如下:
代码语言: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攻击,确保接口可以阻止非法的跨站请求。
通过这些自动化测试,您可以有效验证注册页面的功能是否满足要求,并保证系统的安全性。