在Selenium TestNG中如何判断登录凭证正误及如何开展负面测试?
登录页面显示成功后验证凭证有效性的方法
- 验证登录后特有元素是否存在:比如用户头像、昵称、退出登录按钮这类只有登录成功才会渲染的元素,用Selenium的
isDisplayed()方法做断言,注意不要只验证URL跳转,很多站点跳转了也可能是伪登录态 - 校验登录态标识:通过Selenium获取浏览器Cookie里的
sessionid、token这类字段,判断是否存在且不为默认无效值;也可以调用用户信息查询接口,看返回的用户信息是否和传入的凭证匹配 - 验证权限可访问性:跳转登录后才能访问的页面(比如个人中心、账户设置页),判断页面是否返回401/403状态码,或者有没有权限不足的提示
- 校验会话持久性:关闭浏览器再重启复用当前Cookie,判断是否还能保持登录状态,排除临时前端伪造的登录成功提示
Selenium+TestNG框架下登录负面测试实现方案
- 首先梳理全量负面测试用例场景:
- 用户名正确、密码错误
- 用户名不存在、密码任意
- 用户名/密码包含特殊字符、超长/超短不符合格式要求的内容
- 空用户名/空密码/两者都为空
- 已封禁/已注销的账户凭证
- 验证码错误/验证码为空(如果有验证码逻辑)
- 登录态过期后再次提交旧凭证
- TestNG落地技巧:
- 用
@DataProvider注解传入多组负面测试凭证,实现数据驱动,不用重复写多套测试逻辑,示例代码片段:
- 用
@DataProvider(name = "negativeLoginData") public Object[][] getNegativeLoginData() { return new Object[][]{ {"正确用户名", "错误密码", "密码错误提示"}, {"不存在的用户", "任意密码", "用户不存在提示"}, {"", "123456", "用户名不能为空提示"}, {"testUser", "", "密码不能为空提示"} }; }
- 用
@Test(dataProvider = "negativeLoginData")注解绑定测试方法,每组数据单独跑用例,失败互不影响 - 断言逻辑统一校验错误提示是否和预期一致,同时要确认没有跳转到登录后页面、也没有生成有效的登录Cookie,避免出现负面用例绕过校验登录成功的问题
- 可以加
@BeforeMethod注解实现每次测试前清空Cookie、刷新页面,保证每组测试用例的执行环境独立,不会受上一条用例的结果影响
注意:负面测试要避免短时间内高频请求触发站点的风控限制,可在每条用例执行后加适当的等待时间,或者配置测试环境的风控白名单。
内容的提问来源于stack exchange,提问作者Bug Finder
相关产品推荐
相关产品推荐

