一)项目简介:
用户管理系统是依据于前后端分离来实现的,是基于Spring SpringBoot Spring MVC,SpringAOP,MyBatis等框架来实现的一个用户管理网站,并且已经部署到了云服务器上,
目前的用户管理系统实现了超级管理员的注册功能,用户管理员的新增,删除,修改,用户分页展示,批量删除,多条件查询等功能
二)测试计划:
测试对象:基于SSM实现的用户管理系统
测试目的:验证用户管理系统是否可以正常的运行,验证用户管理系统是否符合用户的需求
测试点:主要针对常用的主流程功能进行测试,除此之外还有界面测试+功能测试+兼容性测试+安全性测试+可靠性测试+容错性测试+性能测试+网络测试;
测试方法:主要使用黑盒测试方法,自动化测试工具使用Selenium4+junit5
三)手工测试用例的编写:
飞书访问链接:https://nxqjlyz94q2.feishu.cn/wik
i/GwIRwI5Ebi3qtDkfJq4cG3bPnWe?create_from=create_doc_to_wiki#mindmap一)针对于登录界面进行测试:
一)界面测试:
二)功能测试:
三)兼容性+易用性+安全性测试+性能测试:
4)可靠性:让软件运行几周,软件正常运行的时间/软件在这段期间运行的时间+软件在这段期间出故障的时间
二)针对于用户列表页进行功能测试:(其他非功能测试和上出的登录非功能测试类似)
三)针对于用户修改页面和用户修改页面进行功能测试(其他非功能测试和上出的登录非功能测试类似)
四)基于selenium4+junit5进行自动化测试
创建全局驱动对象,避免频繁创建销毁
一)针对于登录界面进行自动化测试
1)校验首页是否正常展示功能并且通过多参数验证用户登录功能
@SpringBootTest @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class LoginTest { private static ChromeDriver driver= (ChromeDriver) CommonDriver.getDriver(); //验证首页元素展示是正确 @BeforeEach public void getUrl(){ //打开浏览器 driver.get("http://127.0.0.1:8080/login.html"); driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10)); } @Order(1) @Test void CheckElementLogin(){ //1.检查页面上一些文字的显示,url是否正确 String text1=driver.findElement(By.cssSelector("#body > div > h3")).getText(); String text2=driver.findElement(By.cssSelector("#body > div > div:nth-child(2) > label")).getText(); String text3=driver.findElement(By.cssSelector("#body > div > div:nth-child(3) > label")).getText(); String text4=driver.findElement(By.cssSelector("#submit")).getAttribute("value"); String url=driver.getCurrentUrl(); //2.校验信息元素是否正确,比如说校验文本是否符合预期 Assertions.assertEquals(text1,"管理员登录"); Assertions.assertEquals(text2,"用户名:"); Assertions.assertEquals(text3,"密码:"); Assertions.assertEquals(text4,"登录"); Assertions.assertEquals(url,"http://127.0.0.1:8080/login.html"); } @AfterEach public void close(){ driver.close(); } }
2)针对于登录构建多数据登录
@ParameterizedTest @MethodSource("loginData") public void login(String username,String password) throws InterruptedException { //定位到登陆页面中的输入框核按钮进行登陆操作 driver.findElement(By.cssSelector("#loginname")).sendKeys(username); driver.findElement(By.cssSelector("#password")).sendKeys(password); driver.findElement(By.cssSelector("#submit")).click(); Thread.sleep(10); } public static Stream<Arguments> loginData(){ return Stream.of(Arguments.arguments("张三","123"),Arguments.arguments("zhangsan","admin")); }
多组参数化执行本身不会新打开一个浏览器的窗口重新进行输入第二组参数化的执行还是使用的是第一组参数画的界面,比如说构造数据的时候会出现当时用到第一组参数化的构造的参数以后,此时还会针对于第二组参数来进行参数化的构造(此时和第一组参数使用的是同一个界面),如果说此是针对于第一组参数用户登陆成功了,直接跳转到列表页了,那么当第二组参数参数构造以后,系统执行以后发现此时页面是在列表页,自然无法定位到输入框和按钮,此时就会出现nosuchelement异常
通过上面进行参数化的校验以后,就可以构造成正确的用户名和错误密码来进行测试,还可以根据更多的测试点进行测试
二)针对于列表页进行测试: