• 个人博客项目测试报告


    目录

    一. 项目背景

    二. 概述

    三. 功能测试用例

    四. 自动化测试用例


    一. 项目背景

    项目链接: http://81.70.189.104:8080/login.html

    个人博客系统提供了 登录、注册、写博客&发布博客、删除博客、修改博客功能。前端的页面有 登录页、注册页、个人博客列表页、博客详情页、博客列表页(覆盖所有用户文章)。

    二. 概述

    该测试报告主要对项目的主流程进行测试,分别是注册功能、登录功能、查看全文功能、修改功能、删除功能、发布文章功能、对列表页中的按钮进行测试。

    三. 功能测试用例

    四. 自动化测试用例

    设计到的技术 Junit3,selenium。

    测试环境:使用 windows11系统、Chrom浏览器。

    测试数据:

    1. // 该类用来做一些初始化操作
    2. public class InitAndEnd {
    3. static WebDriver webDriver;
    4. public int a;
    5. @BeforeAll
    6. static void Setup() {
    7. webDriver = new ChromeDriver();
    8. }
    9. @AfterAll
    10. static void TearDown() {
    11. webDriver.quit();
    12. }
    13. }
    14. @TestMethodOrder(MethodOrderer.OrderAnnotation.class)
    15. public class BlogCases extends InitAndEnd{
    16. public static Stream registerTestSuccess1() {
    17. return Stream.of(Arguments.arguments(
    18. "m1",
    19. "m1"
    20. ));
    21. }
    22. public static Stream registerTestFailArg() {
    23. return Stream.of(Arguments.arguments(
    24. "admin",
    25. "admin"
    26. ));
    27. }
    28. /**
    29. * 输入正确的账号与密码 => 登录成功
    30. */
    31. @Order(1)
    32. @ParameterizedTest
    33. @CsvFileSource(resources = "LoginSuccess.csv")
    34. void loginSuccessTest(String username, String password, String blogListUrl) throws InterruptedException {
    35. // 先打开博客登录页面
    36. webDriver.get("http://81.70.189.104:8080/login.html");
    37. // 输入账号
    38. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    39. // 输入密码
    40. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    41. // 点击提交登录按钮
    42. webDriver.findElement(By.cssSelector("#submit")).click();
    43. // 隐式等待
    44. // webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    45. // 显示等待
    46. WebDriverWait wait = new WebDriverWait(webDriver,3);
    47. wait.until(ExpectedConditions.urlContains(blogListUrl));
    48. // 跳转到列表页
    49. // 判断 URL地址
    50. String curURL = webDriver.getCurrentUrl();
    51. Assertions.assertEquals(blogListUrl,curURL);
    52. }
    53. /**
    54. * 输入错误的账号与密码 ==>登录失败
    55. */
    56. @Order(2)
    57. @ParameterizedTest
    58. @CsvFileSource(resources = "loginFail.csv")
    59. void loginFailTest(String username, String password, String loginUrl) throws InterruptedException {
    60. webDriver.get("http://81.70.189.104:8080/login.html");
    61. // 输入账号
    62. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    63. // 输入密码
    64. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    65. // 点击提交登录按钮
    66. webDriver.findElement(By.cssSelector("#submit")).click();
    67. // 隐式等待
    68. // webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    69. // 显示等待
    70. WebDriverWait wait = new WebDriverWait(webDriver,3);
    71. wait.until(ExpectedConditions.alertIsPresent());
    72. // alert 弹窗处理
    73. webDriver.switchTo().alert().accept();
    74. // 判断 URL地址
    75. String curURL = webDriver.getCurrentUrl();
    76. Assertions.assertEquals(loginUrl,curURL);
    77. }
    78. /**
    79. * 该方法来校验个人博客的列表页
    80. */
    81. @Order(3)
    82. @Test
    83. void myBlogListTest() throws InterruptedException {
    84. // 打开博客列表页
    85. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    86. // 隐式等待
    87. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    88. // 获取页面上所有的博客标题对应的元素
    89. List elements = webDriver.findElements(By.cssSelector(".title"));
    90. // 校验个数是否为 0
    91. Assertions.assertNotEquals(0,elements.size());
    92. // 获取第一篇文章的简介内容
    93. WebElement element = webDriver.findElement(By.cssSelector(".desc"));
    94. Assertions.assertNotEquals("",element.getText());
    95. }
    96. /**
    97. * 判断文章详情
    98. */
    99. @Order(4)
    100. @Test
    101. void myBlogList_contentTest() {
    102. // 打开博客列表页
    103. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    104. // 隐式等待
    105. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    106. // 获取到第一篇博客的时间
    107. String expectTime = webDriver.findElement(By.cssSelector(".date")).getText();
    108. // 获取到第一排呢博客的标题
    109. String expectTitle = webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title")).getText();
    110. // 点击第一篇博客的查看全文
    111. webDriver.findElement(By.cssSelector(".detail")).click();
    112. // 显示等待
    113. WebDriverWait wait = new WebDriverWait(webDriver,3);
    114. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/blog_content.html?aid=6"));
    115. // 校验当前的页面的 URL
    116. Assertions.assertEquals("http://81.70.189.104:8080/blog_content.html?aid=6",webDriver.getCurrentUrl());
    117. // 校验时间
    118. String actualTime = webDriver.findElement(By.cssSelector("#createtime")).getText();
    119. Assertions.assertEquals(expectTime,actualTime);
    120. // 校验文章标题
    121. String actualTitle = webDriver.findElement(By.cssSelector("#title")).getText();
    122. Assertions.assertEquals(expectTitle,actualTitle);
    123. }
    124. /**
    125. * 测试列表页功能 (查看文章,首页,上一页,下一页,尾页)
    126. */
    127. @Order(5)
    128. @Test
    129. void ListTest() {
    130. // 打开博客列表页
    131. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    132. // 隐式等待
    133. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    134. // 点击主页跳转到 列表页
    135. webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(4)")).click();
    136. // 显示等待
    137. WebDriverWait wait = new WebDriverWait(webDriver,3);
    138. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/blog_list.html"));
    139. // 校验当前页面的 URL
    140. Assertions.assertEquals("http://81.70.189.104:8080/blog_list.html",webDriver.getCurrentUrl());
    141. // 校验列表页上的文章标题和时间 与 详情页中的标题和时间
    142. String expectTitle = webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title")).getText();
    143. String expectTime = webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.date")).getText();
    144. // 跳转到博客详情页
    145. webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a")).click();
    146. // 显示等待
    147. wait = new WebDriverWait(webDriver,3);
    148. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/blog_content.html?aid=7"));
    149. String actualTitle = webDriver.findElement(By.cssSelector("#title")).getText();
    150. String actualTime = webDriver.findElement(By.cssSelector("#createtime")).getText();
    151. Assertions.assertEquals(expectTime,actualTime);
    152. Assertions.assertEquals(expectTitle,actualTitle);
    153. // 浏览器返回
    154. webDriver.navigate().back();
    155. // 显示等待
    156. wait = new WebDriverWait(webDriver,3);
    157. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/blog_list.html"));
    158. // 测试按钮
    159. // 点击首页
    160. webDriver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(1)")).click();
    161. // 处理 alert 弹窗
    162. webDriver.switchTo().alert().accept();
    163. // 点击下一页
    164. webDriver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(3)")).click();
    165. // 校验当前页面 URL
    166. Assertions.assertEquals("http://81.70.189.104:8080/blog_list.html?pindex=2",webDriver.getCurrentUrl());
    167. // 点击上一页
    168. webDriver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(2)")).click();
    169. // 校验当前页面 URL
    170. Assertions.assertEquals("http://81.70.189.104:8080/blog_list.html?pindex=1",webDriver.getCurrentUrl());
    171. // 点击尾页
    172. webDriver.findElement(By.cssSelector("body > div.container > div > div.blog-pagnation-wrapper > button:nth-child(4)")).click();
    173. // 校验当前页面 URL
    174. Assertions.assertEquals("http://81.70.189.104:8080/blog_list.html?pindex=3",webDriver.getCurrentUrl());
    175. }
    176. /**
    177. * 发布博客
    178. */
    179. @Order(6)
    180. @Test
    181. void addBlogTest() throws InterruptedException {
    182. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    183. // 显示等待 myblog_list.html
    184. WebDriverWait wait = new WebDriverWait(webDriver,3);
    185. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/myblog_list.html"));
    186. // 点击写博客按钮
    187. webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
    188. // 隐式等待 blog_add.html
    189. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    190. // 编写博客
    191. // 写标题
    192. // ((JavascriptExecutor)webDriver).executeScript("document.getElementById(\"title\").value=\"自动化测试\"");
    193. webDriver.findElement(By.cssSelector("#title")).sendKeys("自动化测试");
    194. // 点击发布按钮
    195. webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
    196. wait = new WebDriverWait(webDriver,5);
    197. wait.until(ExpectedConditions.alertIsPresent());
    198. // 处理 alert 弹窗
    199. webDriver.switchTo().alert().dismiss();
    200. // 显示等待
    201. wait = new WebDriverWait(webDriver,5);
    202. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/myblog_list.html"));
    203. // 校验当前 URL
    204. Assertions.assertEquals("http://81.70.189.104:8080/myblog_list.html",webDriver.getCurrentUrl());
    205. // 校验第一篇博客
    206. // 校验文章标题
    207. String actualTitle = webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title")).getText();
    208. Assertions.assertEquals("自动化测试",actualTitle);
    209. }
    210. /**
    211. * 修改博客
    212. */
    213. @Order(7)
    214. @Test
    215. void editBlogTest() throws InterruptedException {
    216. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    217. // 隐式等待
    218. webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
    219. // 点击修改按钮
    220. webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a:nth-child(5)")).click();
    221. // 隐式等待
    222. webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
    223. // 修改文章标题
    224. // 清空标题
    225. webDriver.findElement(By.cssSelector("#title")).clear();
    226. // 编写标题
    227. webDriver.findElement(By.cssSelector("#title")).sendKeys("修改");
    228. // 点击修改文章按钮
    229. webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).sendKeys(Keys.CONTROL,"X");
    230. webDriver.findElement(By.cssSelector("body > div.blog-edit-container > div.title > button")).click();
    231. WebDriverWait wait = new WebDriverWait(webDriver,3);
    232. wait.until(ExpectedConditions.alertIsPresent());
    233. // 处理 alert 弹窗
    234. webDriver.switchTo().alert().accept();
    235. // 显示等待
    236. wait = new WebDriverWait(webDriver,5);
    237. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/myblog_list.html"));
    238. // 校验第一篇文章的标题
    239. String actualTitle = webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title")).getText();
    240. Assertions.assertEquals("修改",actualTitle);
    241. }
    242. /**
    243. * 删除博客
    244. */
    245. @Order(8)
    246. @Test
    247. void deleteBlogTest() {
    248. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    249. // 点击删除按钮
    250. webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a:nth-child(6)")).click();
    251. // 显示等待
    252. WebDriverWait wait = new WebDriverWait(webDriver,5);
    253. wait.until(ExpectedConditions.alertIsPresent());
    254. // 处理 alert 弹窗
    255. // 取消删除
    256. webDriver.switchTo().alert().dismiss();
    257. // 点击删除按钮
    258. webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > a:nth-child(6)")).click();
    259. // 显示等待
    260. wait = new WebDriverWait(webDriver,5);
    261. wait.until(ExpectedConditions.alertIsPresent());
    262. // 确定删除
    263. webDriver.switchTo().alert().accept();
    264. // 显示等待
    265. wait = new WebDriverWait(webDriver,5);
    266. wait.until(ExpectedConditions.alertIsPresent());
    267. // 处理删除成功的 alert
    268. webDriver.switchTo().alert().accept();
    269. // 校验第一个文章标题
    270. Assertions.assertNotEquals("修改",webDriver.findElement(By.cssSelector("#artListDiv > div:nth-child(1) > div.title")).getText());
    271. }
    272. /**
    273. * 注销博客
    274. */
    275. @Order(9)
    276. @Test
    277. void loginOutTest() {
    278. webDriver.get("http://81.70.189.104:8080/myblog_list.html");
    279. // 隐式等待
    280. webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
    281. // 点击注销按钮
    282. webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
    283. // 显示等待
    284. WebDriverWait wait = new WebDriverWait(webDriver,6);
    285. wait.until(ExpectedConditions.alertIsPresent());
    286. // 处理 alert 弹窗
    287. // 点击取消
    288. webDriver.switchTo().alert().dismiss();
    289. // 点击注销按钮
    290. webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(6)")).click();
    291. // 显示等待
    292. wait = new WebDriverWait(webDriver,6);
    293. wait.until(ExpectedConditions.alertIsPresent());
    294. // 处理 alert 弹窗
    295. webDriver.switchTo().alert().accept();
    296. // 隐式等待
    297. webDriver.manage().timeouts().implicitlyWait(6,TimeUnit.SECONDS);
    298. // 校验当前页面的 URL
    299. Assertions.assertEquals("http://81.70.189.104:8080/login.html",webDriver.getCurrentUrl());
    300. // 校验 用户与密码输入框是否为空
    301. Assertions.assertEquals("",webDriver.findElement(By.cssSelector("#username")).getText());
    302. Assertions.assertEquals("",webDriver.findElement(By.cssSelector("#password")).getText());
    303. }
    304. /**
    305. * 注册测试
    306. */
    307. @Disabled
    308. @Order(10)
    309. @ParameterizedTest
    310. @MethodSource("registerTestSuccess1")
    311. void registerTestSuccess(String username, String password) {
    312. webDriver.get("http://81.70.189.104:8080/login.html");
    313. // 隐式等待
    314. webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    315. // 点击注册按钮
    316. webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
    317. // 显示等待
    318. WebDriverWait wait = new WebDriverWait(webDriver,5);
    319. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/reg.html"));
    320. // 校验当前页面 URL
    321. Assertions.assertEquals("http://81.70.189.104:8080/reg.html",webDriver.getCurrentUrl());
    322. // 输入用户名
    323. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    324. // 输入密码
    325. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    326. // 输入确认密码
    327. webDriver.findElement(By.cssSelector("#password2")).sendKeys(password);
    328. // 点击提交
    329. webDriver.findElement(By.cssSelector("#submit")).click();
    330. // 显示等待
    331. wait.until(ExpectedConditions.alertIsPresent());
    332. // 处理 alert 弹窗
    333. webDriver.switchTo().alert().accept();
    334. // 显示等待
    335. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/login.html"));
    336. // 校验当前页面的 URL 地址
    337. Assertions.assertEquals("http://81.70.189.104:8080/login.html",webDriver.getCurrentUrl());
    338. }
    339. @Order(11)
    340. @ParameterizedTest
    341. @MethodSource("registerTestFailArg")
    342. void registerTestFailTest(String username, String password) {
    343. webDriver.get("http://81.70.189.104:8080/login.html");
    344. // 隐式等待
    345. webDriver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);
    346. // 点击注册按钮
    347. webDriver.findElement(By.cssSelector("body > div.nav > a:nth-child(5)")).click();
    348. // 显示等待
    349. WebDriverWait wait = new WebDriverWait(webDriver,5);
    350. wait.until(ExpectedConditions.urlContains("http://81.70.189.104:8080/reg.html"));
    351. // 校验当前页面 URL
    352. Assertions.assertEquals("http://81.70.189.104:8080/reg.html",webDriver.getCurrentUrl());
    353. // 输入用户名
    354. webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
    355. // 输入密码
    356. webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
    357. // 输入确认密码
    358. webDriver.findElement(By.cssSelector("#password2")).sendKeys(password);
    359. // 点击提交按钮
    360. webDriver.findElement(By.cssSelector("#submit")).click();
    361. // 显示等待
    362. wait.until(ExpectedConditions.alertIsPresent());
    363. // 处理注册失败的弹窗 alert
    364. webDriver.switchTo().alert().accept();
    365. // 校验页面 URL
    366. Assertions.assertEquals("http://81.70.189.104:8080/reg.html",webDriver.getCurrentUrl());
    367. // 刷新当前页面
    368. webDriver.navigate().refresh();
    369. // 隐式等待
    370. webDriver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);
    371. // 密码 与 确认密码不同
    372. // 输入用户名
    373. webDriver.findElement(By.cssSelector("#username")).sendKeys("ppp");
    374. // 输入密码
    375. webDriver.findElement(By.cssSelector("#password")).sendKeys(password+"123");
    376. // 输入确认密码
    377. webDriver.findElement(By.cssSelector("#password2")).sendKeys(password);
    378. // 点击提交按钮
    379. webDriver.findElement(By.cssSelector("#submit")).click();
    380. // 显示等待
    381. wait.until(ExpectedConditions.alertIsPresent());
    382. // 处理弹窗
    383. webDriver.switchTo().alert().accept();
    384. Assertions.assertEquals("http://81.70.189.104:8080/reg.html",webDriver.getCurrentUrl());
    385. }
    386. }

    部分展示图:

    登录页面:

    个人列表页:

    博客详情页: 

    博客列表页:

    博客编辑页:

  • 相关阅读:
    某城商行两地三中心建设存储架构规划及方案验证实践
    【JavaScript】HTML文件插入JavaScript函数
    YOLOv8快速复现 训练 SCB-Dataset3-S 官网版本 ultralytics
    idea+springboot+findbus
    FPGA-结合协议时序实现UART收发器(六):仿真模块SIM_uart_drive_TB
    G - 1-n数组
    CSS 相关
    Docker私有镜像仓库(Harbor)安装
    『手撕Vue-CLI』处理不同指令
    【Redis】Redis 淘汰、雪崩、击穿、穿透、预热
  • 原文地址:https://blog.csdn.net/pawlaibd/article/details/132694501