一、项目介绍
1.本博客系统采用前后端分离技术,使用mysql存储用户数据,包括用户名,博客标题,博客编号,博客内容,编写时间等。
2.博客系统分为四个模块:分别是博客系统登陆页、博客系统详情页、博客系统列表页,博客系统编辑页。采用的是http协议,涉及到get、post等方法,请求头类型为Content-Type: application/x-www-form-urlencoded,其中包括登录接口、用户接口、博客接口、注销接口。
3.操作步骤通常是先登录博客系统,登录后可以看到博客列表页,按时间降序排列,可点击所写的每一篇博客查看内容,也可以点击写博客按钮来书写新博客并提交,提交完毕也可再次查看所写博客,最后还可以注销用户,下次再进入博客系统则需要重新登陆。
二、测试目的和工具
2.1测试目的
本测试报告为博客系统项目的测试报告,目的在于总结测试阶段以及分析测试结果,描述系统是否符合需求。预期参考人员包括用户、测试人员、开发人员、项目管理者、其他质量管理人员。本次测试的目的在于确保系统功能测试、接口测试和自动化测试正常无误,满足系统需要。
2.2测试工具
本次测试过程中用到的工具有fiddler、postman、开发者工具等,其中fiddler用于抓包,详细的对HTTP 请求进行分析,Postman用于模拟客户端向服务器发送请求,开发者工具用于查找页面元素及查找bug。
三、测试
3.1功能测试
3.1.1用Xmind画出思维导图
3.3.2设计测试用例,列出表格
博客登录页
博客编辑页
博客详情页
博客列表页
经过手动测试输入测试用例后发现,测试大部分通过 ,只有一项测试用例出现问题,后续已修复。
3.2接口测试
用postman为各个接口设置断言验证响应中包含的字符串和返回的状态码,结果如下。
博客登录页
登录成功的情况
登陆失败的情况
由于登陆失败的情况过多,就不在此处一一展示了。
博客编辑页
博客详情页
博客列表页
综上可见,使用postman测试时,设置断言验证响应中包含的字符串和返回的状态码测试全部通过。
3.3自动化测试
3.3.1自动化测试预览
20240810_181746
3.3.2测试环境
自动化测试环境:
计算机型号:HP Pavilion Aero Laptop 13-be0xxx
操作系统:Windows10家庭版
数据库:MySQL5.7
测试工具:selenium、JUnit 5.9.1
浏览器:chrome、Firefox
3.3.3测试代码
将每次打开浏览器和关闭浏览器的操作单独放在一个文件中
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class InitAndEndBrowser {
static WebDriver webDriver;
@BeforeAll
static void OpenBlogSystem(){
webDriver=new ChromeDriver();
}
@AfterAll
static void CloseBlogSystem(){
webDriver.close();
}
}
自动化测试登录博客成功、登录博客失败、编辑博客、注销博客的功能。
自动化测试登录博客成功
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.openqa.selenium.*;
import static java.lang.Thread.sleep;
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class Tests extends InitAndEndBrowser{
@Order(1)
@ParameterizedTest
@CsvSource({"'http://127.0.0.1:9000/blog_system/login.html','小颜','http://127.0.0.1:9000/blog_system/blog_list.html','112233'"})
void Login(String url,String username,String expect_url,String password) throws InterruptedException {
webDriver.get(url);
sleep(2000);
webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
sleep(1000);
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
sleep(1000);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(2000);
String userName=webDriver.findElement(By.cssSelector("body > div.container > div.container-left > div > h3")).getText();
if (userName.equals(username)){
System.out.println("测试通过");
}else {
System.out.println("测试不通过");
}
String URL=webDriver.getCurrentUrl();
if(URL.equals(expect_url)){
System.out.println("测试通过");
}else {
System.out.println("测试失败");
}
}
自动化测试发布博客(编辑)
@Test
@Order(2)
void PublishBlog() throws InterruptedException {
//打开博客列表页,点击写博客按钮
webDriver.get("http://127.0.0.1:9000/blog_system/blog_list.html");
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
sleep(2000);
//输入标题(还可以通过Selenium执行JS脚本完成)
//((JavascriptExecutor)webDriver).executeScript("document.querySelector(\"#title-input\").value=\"好好学习,天天向上!!!\"");
webDriver.findElement(By.cssSelector("#title-input")).sendKeys("这是我的第四篇博客");
sleep(2000);
// 点击发布博客按钮
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(2000);
WebElement title=webDriver.findElement(By.cssSelector("body > div.container > div.container-right > div > div.title"));
sleep(2000);
Assertions.assertNotNull(title);
}
自动化测试注销博客
@Test
@Order(3)
void LoginOut() throws InterruptedException {
webDriver.get("http://127.0.0.1:9000/blog_system/blog_list.html");
webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
sleep(2000);
String LoginURL=webDriver.getCurrentUrl();
String username=webDriver.findElement(By.cssSelector("body > div.login-container > div > form > div:nth-child(1) > span")).getText();
if (LoginURL.equals("http://127.0.0.1:9000/blog_system/login.html")&&(username.equals("用户名"))){
System.out.println("测试通过");
}else {
System.out.println("测试失败");
}
Assertions.assertEquals("http://127.0.0.1:9000/blog_system/login.html",LoginURL);
Assertions.assertEquals("用户名",username);
}
自动化测试登录博客失败
@Test
@Order(4)
void LoginError() throws InterruptedException {
String username="小怡";
String password="112233";
webDriver.get("http://127.0.0.1:9000/blog_system/login.html");
sleep(2000);
webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
sleep(1000);
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
sleep(1000);
webDriver.findElement(By.cssSelector("#submit")).click();
sleep(2000);
WebElement webElement=webDriver.findElement(By.cssSelector("body"));
sleep(2000);
Assertions.assertEquals("您输入的用户名或密码不正确!",webElement.getText());
}
}
运行结果如下,测试通过与否可以通过断言或if条件语句来判断,上述代码中是穿插使用(最好统一,此处是为了展示两种写法)。
四、测试结果
4.1出现的bug
经过实际测试发现预期结果与实际结果大部分一致!需要提交修改的bug如下:
1.在登陆成功以后发现博客列表页不能正常显示,编辑博客发布后也不会显示在页面中抓包后发现前端没有错误,是原本项目中的jequery链接失效了,访问不了,后面修改后发现页面可以正常显示。
2.在自动化测试发布博客的时候出现以下报错Unable to locate element: {"method":"css selector","selector":"body > div.container > div.container-right > div > div.title"}即不能定位元素。检查代码发现,页面渲染需要一定的时间,而后端中代码执行速度较快,页面无法快速显现而报错,最终通过设置sleep()来满足渲染所需时间。
4.2bug提交
附件
后续查出了错误原因后,已将bug全部修复。
五、总结
功能测试较为充分且测试目标已全部完成,在测试过程中发现存在bug导致页面无法正常显示。经排查,发现是原本项目中的jequery链接失效了,随之替换后正常运行。
接口测试一切顺利。
性能测试出现报错情况,是由于页面渲染速度慢于代码执行速度,导致页面无法及时显示,最终报错。最后在代码中搭配使用sleep即可解决。
在测试的过程中,我们要保持头脑清醒,写测试用例的时候不要漏写,特别要注意在范围边界值附近时的测试,要熟练运用Xmind、Excel来编写测试用例,postman、fiddler、开发者工具等来查错、抓包,发现bug的时候要及时记录、上报,并附上bug出现的截图,bug解决后要及时关闭,每次测试完成之后要及时总结,吸取教训,不断学习,提升自身专业能力以便后续工作的执行,加油!
本文转载自: https://blog.csdn.net/m0_72776676/article/details/141090579
版权归原作者 m0_72776676 所有, 如有侵权,请联系我们删除。
版权归原作者 m0_72776676 所有, 如有侵权,请联系我们删除。