首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >带着ChatGPT玩转软件开发-连载24

带着ChatGPT玩转软件开发-连载24

作者头像
顾翔
发布2025-12-29 11:18:37
发布2025-12-29 11:18:37
1390
举报

顾老师新作“带着ChatGPT玩转软件开发”将于今年底明年初出版

4.5.2 调整GUI和API测试用例

有种情况前面一直没有考虑到,就是用户如果在表单中输入数据前后误输了空格,程序应该将其屏蔽掉(比如:' Jerry',应该屏蔽'J'前的空格)。

提示词

JavaScript代码如下。

参看代码4-70 index.js

如何清除输入表单中前后的空格。

ChatGPT回答

在您的代码中,如果您希望在处理提交数据时自动去掉表单值前后的空格,可以在获取输入值时进行处理。您可以在validateRegisterForm(),validateLoginForm(),validateVeriCodeForm()和validateRecoverForm()函数中使用.trim()方法来去掉字符串前后的空格。

1.修改示例

以下是如何采用.trim()方法来修改这些函数,以确保在进行验证之前去掉用户输入的前后空格。

代码4-85 index.js

代码语言:javascript
复制
function validateRegisterForm(){
const username=document.getElementById('username')?document.getElementById('username').value.trim():'';
const password=document.getElementById('password')?document.getElementById('password').value.trim():'';
const confirmPassword=document.getElementById('confirmPassword')?document.getElementById('confirmPassword').value.trim():'';
const phone=document.getElementById('phone')?document.getElementById('phone').value.trim():'';
const email=document.getElementById('email')?document.getElementById('email').value.trim():'';
return checkRegister(username,password,confirmPassword,phone,email);
}
function validateLoginForm(){
const username=document.getElementById('username')?document.getElementById('username').value.trim():'';
const password=document.getElementById('password')?document.getElementById('password').value.trim():'';
return checkLogin(username,password); 
}
function validateVeriCodeForm(){
const contact=document.getElementById('contact')?document.getElementById('contact').value.trim():'';
return checkVeriCode(contact); 
}
function validateRecoverForm(){
const identifyingCode=document.getElementById('identifyingCode')?document.getElementById('identifyingCode').value.trim():'';
const newPassword=document.getElementById('newPassword')?document.getElementById('newPassword').value.trim():'';
const confirmPassword=document.getElementById('confirmPassword')?document.getElementById('confirmPassword').value.trim():'';
return checkRecover(identifyingCode,newPassword,confirmPassword); 
}

2.解释

.trim()方法将返回一个新的字符串,该字符串不包含原始字符串前后的空白字符。

使用这种方式可以确保在调用任何验证函数之前,您输入的数据是干净的,没有多余的空白字符。

确保根据您项目中的需求进行修改,这样可以避免因空格造成的验证失败。

提示词

如何在后端程序

String username=this.request.getParameter("username");

去掉首尾空格。

ChatGPT回答

在Java中,你可以使用String类的trim()方法去掉字符串首尾的空格。下面是如何在后端程序中获取参数并去掉首尾空格的示例:

代码语言:javascript
复制
//从请求中获取用户名参数
String username=this.request.getParameter("username");
//去掉首尾空格
username=username!=null?username.trim():null;//确保不对null值调用trim()
//现在username变量中存储的是去掉首尾空格后的字符串

解释

this.request.getParameter("username"):获取请求中的username参数。

trim():去掉字符串首尾的空白字符。

username!=null?username.trim():null:先检查获取到的username是否为null,以避免在对null调用trim() 方法时导致 NullPointerException。

这样,你就可以安全地处理输入并去掉多余的空格。

注解。

按照上面办法修改index.js。

在globals.py中加入。

代码4-86 globals.py

代码语言:javascript
复制
SPACE_USERNAME=" validUser123 "
SPACE_PASSWORD=" Valid123! "
SPACE_PASSWORD_1=" Abc@123 "
SPACE_PHONE=" 13812345677 "
SPACE_EMAIL=" valid@example.com "
SPACE_CODE=" 123456 "

1.调整注册测试用例

在RegisterController.java中修改

代码4-87 RegisterController.java

代码语言:javascript
复制
private User getUser(){
String username=this.request.getParameter("username");
String password=this.request.getParameter("password");
String phone=this.request.getParameter("phone");
String email=this.request.getParameter("email");
User user=new User(username,password,phone,email);
return user;
}

为。

代码语言:javascript
复制
private User getUser(){
String username=this.request.getParameter("username").trim();
String password=this.request.getParameter("password");
String phone=this.request.getParameter("phone").trim();
String email=this.request.getParameter("email").trim();
User user=new User(username,password,phone,email);
return user;
}

注意:Password由于SHA256散列,所以不使用trim()去取前后空格。

在Test_Register_GUI.py中加入。

代码4-88 Test_Register_GUI.py

代码语言:javascript
复制
…
(Config.SPACE_USERNAME,Config.SPACE_PASSWORD,Config.SPACE_PASSWORD,Config.SPACE_PHONE,Config.SPACE_EMAIL,"登录"),#GTC-016-账号、密码、手机、邮箱前后都有空格
…

在Test_Register_GUI.py中加入。

代码4-88Test_Register_GUI.py

代码语言:javascript
复制
(Config.SPACE_USERNAME,Config.VALID_PASSWORD,Config.SPACE_PHONE,Config.SPACE_EMAIL,MESSAGES["LOGIN_PAGE"]),
…
"""TC-032:测试有效的账号、手机和邮箱地址,但是账号、手机和邮箱地址前后为空格,预期结果:注册成功"""

注意:这里不能用Config.SPACE_PASSWORD,否则首尾空格被加密了。

运行,Test_Register_GUI.py和Test_Register.py,测试通过。

2.调整登录测试用例

在LoginController.java中修改

代码4-89 LoginController.java

代码语言:javascript
复制
String username=request.getParameter("username");
String password=request.getParameter("password");

为。

代码语言:javascript
复制
String username=request.getParameter("username").trim();
String password=request.getParameter("password").trim();

在Test_Login_GUI.py中加入。

代码4-90 Test_Login_GUI.py

代码语言:javascript
复制
…
@pytest.mark.parametrize("username,password,expected_message",[
…
		(Config.SPACE_USERNAME,Config.SPACE_PASSWORD,"系统欢迎您"),#GTC-007
	])
def test_login(self,page:Page,username,password,expected_message):
		page.goto(Config.LOGIN_URL)
		page.reload()
self._fill_login_form(page,username,password)

                #等待页面加载并验证消息
if expected_message=="系统欢迎您":
			page.wait_for_selector("h1")#等待成功消息
else:
			page.wait_for_selector("h2")#等待登录错误
if ((username==Config.VALID_USERNAME and password==Config.VALID_PASSWORD) or username==Config.SPACE_USERNAME):
assert page.locator("h1").inner_text()==expected_message
elif username==Config.INVALID_USERNAME:
assert expected_message in page.locator("#loginError").inner_text()
elif username==Config.SHORT_USERNAME:
assert expected_message in page.locator("#usernameError").inner_text()
elif password==Config.SHORT_PASSWORD:
assert expected_message in page.locator("#passwordError").inner_text()
else:
assert 1==2
…

在Test_Login.py中加入。

代码4-91 Test_Login.py

代码语言:javascript
复制
(Config.SPACE_USERNAME,Config.VALID_PASSWORD,MESSAGES["VALID_MESSAGE"]),
…
"""TC-017,验证有效账号和密码登录,账号前后有空格"""

运行,Test_Login_GUI.py和Test_Login.py,测试通过。

3.调整重置密码测试用例

在LoginController.java中修改

代码4-92 PasswordRecoveryController.java

代码语言:javascript
复制
String contact=request.getParameter("contact");
…
String identifyingCode=request.getParameter("identifyingCode");

为。

代码语言:javascript
复制
String contact=request.getParameter("contact").trim();
…
String identifyingCode=request.getParameter("identifyingCode").trim();

在Test_Recover_GUI.py中加入。

代码4-93 Test_Recover_GUI.py

代码语言:javascript
复制
…
@pytest.mark.parametrize("contact,expected_message",[
		(" "+Config.CONTRACT_EMAIL+" ","找回密码"),#GTC-008:用户输入的邮箱正确,但是前后有空格
		(" "+Config.CONTRACT_PHONE+" ","找回密码"),#GTC-009:用户输入的手机正确,但是前后有空格
		])
def test_valid_phone_format(self,page:Page,contact,expected_message):
try:
			page.goto(Config.VERICODE_URL)
except TimeoutError:
			pytest.fail("加载页面失败:{"+Config.VERICODE_URL+"}")
		page.reload()
self._fill_phone_mail_form(page,contact)

                #检查信息提示
		title=page.title()
assert expected_message==title
…

在Test_Recover.py中加入。

代码4-94 Test_Recover.py

代码语言:javascript
复制
 	@parameterized.expand([
	…
	(1," "+Config.CONTRACT_EMAIL+" ",MESSAGES["OK"]),
	(0," "+Config.CONTRACT_PHONE+" ",MESSAGES["RECOVE_PAGE"]),
	…
	])
def test_valid_contact(self,sig,contact,message):
		…
"""TC16-输入EMAIL和验证码前后有空格"""
"""TC17-输入手机号前后有空格"""
		…
		uid=str(self.db.getId(Config.CONTRACT_EMAIL))
		data1={'csrftoken':self.csrf,'contact':contact}
self.token['uid']=uid
		response=self._post_request(Config.VERICODE_URL,data1)
if sig==0:
self.assertEqual(response.status_code,200)
self.assertIn(message,response.text)
else:
self.assertEqual(response.status_code,200)
self.assertIn("找回密码",response.text)
if message=="验证码错误,请重新输入!":
				vricode=Config.INVALID_CODE
else:
				vricode=self.db.geveriCode(uid)
if contact==" "+Config.CONTRACT_EMAIL+" ":
				vricode=" "+self.db.geveriCode(uid)+" "
if message=="这个密码以前设置过,请用一个新密码!":
				newpassword=Config.VALID_PASSWORD
else:
				newpassword=Config.DIFF_PASSWORD
			data2={
'csrftoken':self.csrf,
'identifyingCode':vricode,
'newPassword':HASH.hash_password(newpassword),
'confirmPassword':HASH.hash_password(newpassword)
			}

                        #进入输入新密码页面
self.csrf=CSRF.get_csrf(response.text)
			response=self._post_request(Config.RECOVER_URL,data2)
self.assertEqual(response.status_code,200)
self.assertIn(message,response.text)

运行,Test_Recover_GUI.py和Recover_Test.py,测试通过。

4调整globals.py

在globals.py加上注释。

代码4-95 globals.py

代码语言:javascript
复制
class Config:

        #URL
	REGISTER_URL="http://127.0.0.1:8080/CharGPTEbusiness/jsp/RegisterPage.jsp"
	LOGIN_URL="http://127.0.0.1:8080/CharGPTEbusiness/jsp/LoginPage.jsp"
	WELCOME_URL="http://127.0.0.1:8080/CharGPTEbusiness/jsp/WelcomePage.jsp"
	VERICODE_URL="http://127.0.0.1:8080/CharGPTEbusiness/jsp/VeriCodePage.jsp"
	RECOVER_URL="http://127.0.0.1:8080/CharGPTEbusiness/jsp/RecoverPage.jsp"

        #账号
	VALID_USERNAME="validUser123"#正确的账号(默认的账号)
	INVALID_USERNAME="validUser321" #错误的账号(非默认的账号)
	SHORT_USERNAME="usr2"#长度为4的账号
	LONG_USERNAME="user12345678901234567"#长度为21的账号
	SHORT_PLUS1_USERNAME="usr12"#长度为5的账号
	LONG_REDUCE1_USERNAME="user1234567890123456"#长度为20的账号
	OTHER_USERNAME="validUser456"#测试相同邮箱或手机注册,不同的账号
	XSS_USERNAME="<script>alert('XSS')</script>"#测试XSS注入的账号
	SQL_USERNAME="admin' --"#测试SQL注入的账号

        #密码
	VALID_PASSWORD="Valid123!" #正确的密码(默认的密码)
	INVALID_PASSWORD ="Valid321!"#错误的账号(非默认的密码)
	DIFF_PASSWORD="Abc@123"#不同的密码
	SHORT_PASSWORD="abc1"#长度为4的密码
	LONG_PASSWORD="iLongpassword12@Longpassword12@"#长度为31的密码
	SIMPLE_PASSWORD="12345"#长度为4的密码
	FIVE_LENGTH_PASSWORD="Ab@12"#长度为5的密码
	THIRTY_LENGTH_PASSWORD="Ab@1212345Ab@1212345Ab@1212345Ab@1212345"#长度为30的密码
	NOT_INCLUE_OTHER_CHAR_PASSWORD="Abc123"#不含特殊字符的密码
	NOT_INCLUE_LOWERCASE_CHAR_PASSWORD="A@@123" #不含小写字母的密码
	NOT_INCLUE_CAPITAL_CHAR_PASSWORD=" a@@123"#不含大写字母的密码
	NOT_INCLUE_DIGEST_PASSWORD=" a@@ABC"#不含数字的密码
        
        #电话
	VALID_PHONE="13812345677"#正确的电话(默认的电话)
	OTHER_PHONE="13812345688" #其他的电话,用于注册相同的账号和Email
	INVALID_PHONE="12345"#错误格式的电话
	CONTRACT_PHONE="13681732596" #重置密码的电话

        #Email
	VALID_EMAIL="valid@example.com"#正确的Email(默认的Email)
	INVALID_EMAIL="invalid@example"#错误格式的Email
	OTHER_EMAIL="valid1@example.com"#其他的Email,用于注册相同的账号和手机
	CONTRACT_EMAIL="xianggu625@126.com"#重置密码的Email

        #验证码
	CODE="123456"  #正确的验证码
	INVALID_CODE="000000"#错误的验证码

        #字符串前后带空格
	SPACE_USERNAME=" "+VALID_USERNAME+" "#用于注册登录
	SPACE_PASSWORD=" "+VALID_PASSWORD+" "#用于注册登录
	SPACE_PHONE=" "+VALID_PHONE+" "#用于注册登录
	SPACE_EMAIL=" "+VALID_EMAIL+" "#用于注册登录
	SPACE_EMAIL_1=" "+CONTRACT_EMAIL+" "#用于重置密码
	SPACE_PHONE_1=" "+CONTRACT_PHONE+" "#用于重置密码
	SPACE_CODE=" "+CODE+" "#用于重置密码
	ZERO_SIZE_STRING=""#空串字符

5总结

注册、登录和找回密码三个模块,API、GUI和手工测试总结如表4-3所示。

表4-3登录、注册和找回密码端到端测试用例

运行所有GUI和API测试用例,保证通过。

代码语言:javascript
复制
C:\..\.\test_code>python Test_Login.py
.............
----------------------------------------------------------------------
Ran 13 tests in 0.772s
OK
C:\Users\...\test_code>python Test_Register.py
.............
----------------------------------------------------------------------
Ran 13 tests in 0.828s
OK
C:\..\.\test_code>python Test_Recover.py
..........
----------------------------------------------------------------------
Ran 10 tests in 118.766s
OK
C:\..\.\test_code>pytest -sv Test_Register_GUI.py
=====================test session starts=====================
platform win32 -- Python 3.12.3, pytest-7.4.4, pluggy-1.5.0 -- C:\Users\...\python.exe
cachedir: .pytest_cache
metadata:{'Python': '3.12.3', 'Platform': 'Windows-11-10.0.26100-SP0', 'Packages':{'pytest': '7.4.4', 'pluggy': '1.5.0'}, 'Plugins':{'allure-pytest': '2.13.5', 'anyio': '4.3.0', 'base-url': '2.1.0', 'html': '3.2.0', 'metadata': '3.1.1', 'playwright': '0.5.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk-11.0.5', 'Base URL': ''}
rootdir: C:\..\.\test_code
plugins: allure-pytest-2.13.5, anyio-4.3.0, base-url-2.1.0, html-3.2.0, metadata-3.1.1, playwright-0.5.0
collected 16 items
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-Valid123!-Valid123!-13812345677-valid@example.com-\u767b\u5f55] PASSED
Test_Register_GUI.py::TestUserRegistration::test_duplicate[chromium-validUser123-Valid123!-Valid123!-13812345677-valid@example.com-validUser123-13812345688-valid1@example.com-\u6ce8\u518c\u7528\u6237\u7684\u7528\u6237\u540d\u5fc5\u987b\u552f\u4e00] PASSED
Test_Register_GUI.py::TestUserRegistration::test_XSS_URL[chromium] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-abc1-abc1-13812345677-valid@example.com-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_duplicate[chromium-validUser123-Valid123!-Valid123!-13812345677-valid@example.com-validUser456-13812345677-valid1@example.com-\u6ce8\u518c\u7528\u6237\u7684\u624b\u673a\u5fc5\u987b\u552f\u4e00] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-iLongpassword12@Longpassword12@-iLongpassword12@Longpassword12@-13812345677-valid@example.com-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_duplicate[chromium-validUser123-Valid123!-Valid123!-13812345677-valid@example.com-validUser456-13812345688-valid@example.com-\u6ce8\u518c\u7528\u6237\u7684\u90ae\u7bb1\u5fc5\u987b\u552f\u4e00] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-Valid123!-Valid321!-13812345677-valid@example.com-\u5bc6\u7801\u786e\u8ba4\u4e0d\u4e00\u81f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-Valid123!-Valid123!-12345-valid@example.com-\u8bf7\u8f93\u5165\u6709\u6548\u7684\u4e2d\u56fd\u624b\u673a\u53f7] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-Ab@12-Ab@12-13812345677-valid@example.com-\u767b\u5f55] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-Ab@1212345Ab@1212345Ab@1212345Ab@1212345-Ab@1212345Ab@1212345Ab@1212345Ab@1212345-13812345677-valid@example.com-\u767b\u5f55] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-Abc123-Abc123-13812345677-valid@example.com-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123-A@@123-A@@123-13812345677-valid@example.com-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123- a@@123- a@@123-13812345677-valid@example.com-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium-validUser123- a@@ABC- a@@ABC-13812345677-valid@example.com-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Register_GUI.py::TestUserRegistration::test_login[chromium- validUser123 - Valid123! - Valid123! - 13812345677 - valid@example.com -\u767b\u5f55] PASSED
=====================16 passed in 8.94s =====================
C:\..\.\test_code>pytest -sv Test_Login_GUI.py
=====================test session starts =====================
platform win32 -- Python 3.12.3, pytest-7.4.4, pluggy-1.5.0 -- C:\Users\...\python.exe
cachedir: .pytest_cache
metadata:{'Python': '3.12.3', 'Platform': 'Windows-11-10.0.26100-SP0', 'Packages':{'pytest': '7.4.4', 'pluggy': '1.5.0'}, 'Plugins':{'allure-pytest': '2.13.5', 'anyio': '4.3.0', 'base-url': '2.1.0', 'html': '3.2.0', 'metadata': '3.1.1', 'playwright': '0.5.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk-11.0.5', 'Base URL': ''}
rootdir: C:\..\.\test_code
plugins: allure-pytest-2.13.5, anyio-4.3.0, base-url-2.1.0, html-3.2.0, metadata-3.1.1, playwright-0.5.0
collected 7 items
Test_Login_GUI.py::TestUserLogin::test_login[chromium-validUser123-Valid123!-\u7cfb\u7edf\u6b22\u8fce\u60a8] PASSED
Test_Login_GUI.py::TestUserLogin::test_access_protected_page_after_logout[chromium] PASSED
Test_Login_GUI.py::TestUserLogin::test_XSS_URL[chromium] PASSED
Test_Login_GUI.py::TestUserLogin::test_login[chromium-validUser321-Valid123!-\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef] PASSED
Test_Login_GUI.py::TestUserLogin::test_login[chromium-usr2-Valid123!-\u8d26\u53f7\u5fc5\u987b\u662f5-20\u4f4d\u7684\u5b57\u6bcd\u6216\u6570\u5b57] PASSED
Test_Login_GUI.py::TestUserLogin::test_login[chromium-validUser123-abc1-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Login_GUI.py::TestUserLogin::test_login[chromium- validUser123 - Valid123! -\u7cfb\u7edf\u6b22\u8fce\u60a8] PASSED
===================== 7 passed in 4.51s =====================
C:\..\.\test_code>pytest -sv Test_Recover_GUI.py
===================== test session starts =====================
platform win32 -- Python 3.12.3, pytest-7.4.4, pluggy-1.5.0 -- C:\Users\...\python.exe
cachedir: .pytest_cache
metadata:{'Python': '3.12.3', 'Platform': 'Windows-11-10.0.26100-SP0', 'Packages':{'pytest': '7.4.4', 'pluggy': '1.5.0'}, 'Plugins':{'allure-pytest': '2.13.5', 'anyio': '4.3.0', 'base-url': '2.1.0', 'html': '3.2.0', 'metadata': '3.1.1', 'playwright': '0.5.0'}, 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk-11.0.5', 'Base URL': ''}
rootdir: C:\..\.\test_code
plugins: allure-pytest-2.13.5, anyio-4.3.0, base-url-2.1.0, html-3.2.0, metadata-3.1.1, playwright-0.5.0
collected 9 items
Test_Recover_GUI.py::TestRecover::test_reset_password[chromium-123456-Valid123!-Abc@123-\u5bc6\u7801\u786e\u8ba4\u4e0d\u4e00\u81f4!] PASSED
Test_Recover_GUI.py::TestRecover::test_invalid_phone_format[chromium-12345-\u8bf7\u8f93\u5165\u6709\u6548\u7684\u4e2d\u56fd\u624b\u673a\u53f7\u6216Email] PASSED
Test_Recover_GUI.py::TestRecover::test_valid_phone_format[chromium- xianggu625@126.com -\u627e\u56de\u5bc6\u7801] PASSED
Test_Recover_GUI.py::TestRecover::test_XSS_URL_For_Recover_Page[chromium] PASSED
Test_Recover_GUI.py::TestRecover::test_XSS_URL_For_Vericode_Page[chromium] PASSED
Test_Recover_GUI.py::TestRecover::test_reset_password[chromium-123456-12345-12345-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
Test_Recover_GUI.py::TestRecover::test_invalid_phone_format[chromium-invalid@example-\u8bf7\u8f93\u5165\u6709\u6548\u7684\u4e2d\u56fd\u624b\u673a\u53f7\u6216Email] PASSED
Test_Recover_GUI.py::TestRecover::test_valid_phone_format[chromium- 13681732596 -\u627e\u56de\u5bc6\u7801] PASSED
Test_Recover_GUI.py::TestRecover::test_reset_password[chromium-123456-abc1-abc1-\u5bc6\u7801\u5fc5\u987b\u5305\u542b\u5927\u5c0f\u5199\u5b57\u6bcd\u3001\u6570\u5b57\u548c\u7279\u6b8a\u5b57\u7b26,\u957f\u5ea6\u57285-30\u4e4b\u95f4] PASSED
===================== 9 passed in 24.65s =====================
C:\..\.\test_code>

4.6 总结

本章共有95个代码片段。

代码4-1 login.html

代码4-2 VeriCodePage.html/RecoverPage.html

代码4-3 VeriCodePage.jsp

代码4-4 RecoverPage.jsp

代码4-5 index.css

代码4-6 index.js

代码4-7 index.js

代码4-8 ValidateUser.java

代码4-9 PasswordRecovery.java

代码4-10 VeriCodePage.jsp

代码4-11 RecoverPage.jsp

代码4-12 VeriCodePage.jsp

代码4-13 RecoverPage.jsp

代码4-14 PasswordRecoveryController.java

代码4-15 PasswordRecoveryController.java

代码4-16 PasswordRecoveryController.java

代码4-17 PasswordRecovery.java

代码4-18 PasswordRecovery.java

代码4-19 SendSms.java

代码4-20 pom.xml

代码4-21 EmailSender.java

代码4-22 config.properties

代码4-23 Util.java

代码4-24 pom.xml

代码4-25 sms.properties

代码4-26 PasswordRecovery.java

代码4-27 UserRepository.java

代码4-28 RegisterPage.jsp

代码4-29 RegisterController.java

代码4-30 CookiesManagerTest.java

代码4-31 PasswordRecoveryTest.java

代码4-32 PasswordRecoveryController.java

代码4-33 pom.xml

代码4-34 myUtilTest.java

代码4-35 SendSmsTest.java

代码4-36 pom.xml

代码4-37 UserRepositoryTest.java

代码4-38UserRepositoryTest.java

代码4-39 UserRepositoryTest.java

代码4-40 UserRepositoryTest.java

代码4-41 UserRepositoryTest.java

代码4-42 UserRepositoryTest.java

代码4-43 UserRepositoryTest.java

代码4-44 CookiesManager.java

代码4-45 CookiesManagerTest.java

代码4-46 CookiesManager.java

代码4-47 PasswordRecoveryTest.java

代码4-47 PasswordRecoveryTest.java

代码4-48 PasswordRecoveryControllerTest.java

代码4-49 myUtilTest.java

代码4-50 Test_Recover.py

代码4-51 globals.py

代码4-52 Test_Recover.py

代码4-53 Test_Recover_GUI.py

代码4-54 globals.py

代码4-55 Test_Recover_GUI.py

代码4-56 RecoverPage.jsp/VeriCodePage.jsp

代码4-57 Test_Recover_GUI.py

代码4-58 index.js

代码4-59 UserRepository.java

代码4-60 Util.java

代码4-61 UserRepository.java

代码4-62 UserRepository.java

代码4-63 PasswordRecovery.java

代码4-64 PasswordRecovery.java

代码4-65 PasswordRecovery.java

代码4-66 PasswordRecoveryController.java

代码4-67 PasswordRecoveryController.java

代码4-68 LoginController.java

代码4-69 LoginController.java

代码4-70 index.js

代码4-71 ValidateUser.java

代码4-72 CookiesManager.java

代码4-73 RegisterController.java

代码4-74 RegisterController.java

代码4-75 globals.py

代码4-76 Test_Recover.py

代码4-77 Test_Recover_GUI.py

代码4-78 SendSms.java

代码4-79 User.java

代码4-80 UserTest.java

代码4-81 UserTest.java

代码4-82 PasswordRecovery.java

代码4-83 pom.xml

代码4-84 PasswordRecoveryTest.java

代码4-85 index.js

代码4-86 globals.py

代码4-87 RegisterController.java

代码4-88 Test_Register_GUI.py

代码4-89 LoginController.java

代码4-90 Test_Login_GUI.py

代码4-91 Test_Login.py

代码4-92 PasswordRecoveryController.java

代码4-93 Test_Recover_GUI.py

代码4-94 Test_Recover.py

代码4-95 globals.py

同一代码,编号大的是编号小的更新版本。

顾翔凡言:AI时代,掌握已知的未知已非难事,关键在于如何发现未知的未知——而它往往就藏在探索已知之未知的过程中。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档