项目描述:博客之站基于SpringBoot、SpringMVC、Mybatis、Redis等开发的前后端分离个人博客网站
项目功能:未登录用户能邮箱注册、查询账号、修改密码、查看博客,已登录用户能上传头像和博客增删改查等
项目特点:1.安全验证方面,使用拦截器和验证码进行登录校验、对用户密码进行加盐加密处理
2.用户体验方面,使用分页算法进行文章管理、对响应数据进行统一返回和统一异常处理
3.缓存管理方面,将文章信息、用户会话信息缓存在Redis,提供更可靠的缓存服务
访问地址:http://8.138.106.205:8083/login.html
源码地址:https://gitee.com/liaoyu111/liaoyuwang/tree/master/mayun/javaeemax/myblog1_ssm
操作系统:Linux
项目运行环境:Tomcat8.0、JDK1.8、MySQL5.7、Redis3.2.12
浏览器:Chorme、Edge
自动化脚本环境:IIntelliJ IDEA Community Edition 2022.1.4
访问链接:http://8.138.106.205:8083/login.html
测试内容: 功能测试、自动化测试、性能测试
测试人员: while(true)energy++;
进行测试用例设计需要用到前面学习的设计测试用例方法
如果测试需求是要涵盖各种输入情况的组合;需要使用正交表法进行组合设计。
一键登录体验功能:
执行测试用例:
测试结果:不符合预期;未同步显示
符合预期;功能能正常使用;样式显示不兼容
测试结果:文章增删改查功能正常;效率会相对低下
测试需求:使用loadrunner针对登录功能进行简单的性能测试。
VUG脚本录制:脚本代码如下
Action()
{
web_add_cookie("__gid=163927082.426124051.1675752843330.1691198028644.36; DOMAIN=cloud.browser.360.cn");
web_add_cookie("__huid=11QlzD0PuYIl3lGb2tKKo6bifDRQapO1Qx8/9cbakwitA=; DOMAIN=browser.360.cn");
web_add_cookie("__guid=86555407.1501631019656299800.1702790766713.4797; DOMAIN=browser.360.cn");
web_add_cookie("sensorsdata2015jssdkcross="
"%7B%22distinct_id%22%3A%2218c763d21b820c-071948b0fcd6ea-77283e4e-2073600-18c763d21b914c%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E8%87%AA%E7%84%B6%E6%90%9C%E7%B4%A2%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E5%90%88%E9%87%91%E5%BC%B9%E5%A4%B4%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fwww.so.com%2Fs%3Fq%3D%E5%90%88%E9%87%91%E5%BC%B9%E5%A4%B4%26src%3Dsrp%26ssid%3D%26fr%3D360chrome_newtab_isearch%26sp%3Da95%26cp%3D0a2a540026%26"
"psid%3D36e54203ecda7b82a3804cccd8bb7ae4%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMThjNzYzZDIxYjgyMGMtMDcxOTQ4YjBmY2Q2ZWEtNzcyODNlNGUtMjA3MzYwMC0xOGM3NjNkMjFiOTE0YyJ9%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%2218c763d21b820c-071948b0fcd6ea-77283e4e-2073600-18c763d21b914c%22%7D; DOMAIN=browser.360.cn");
web_add_cookie("Qs_lvt_499567=1702790767; DOMAIN=browser.360.cn");
web_add_cookie("Qs_pv_499567=4292589718217642000; DOMAIN=browser.360.cn");
lr_think_time(6);
lr_think_time(11);
// lr_log_message("插入集合点");
// lr_rendezvous("rendezous1");
lr_log_message("事务开始");
lr_start_transaction("login");
web_submit_data("loginzhangsan",
"Action=http://8.138.106.205:8083/user/loginzhangsan",
"Method=POST",
"RecContentType=application/json",
"Referer=http://8.138.106.205:8083/login.html",
"Snapshot=t14.inf",
"Mode=HTML",
ITEMDATA,
"Name=username", "Value=zhangsan", ENDITEM,
"Name=password", "Value=12345678", ENDITEM,
"Name=code_input", "Value=12345", ENDITEM,
LAST);
lr_end_transaction("login", LR_AUTO);
lr_log_message("事务结束");
return 0;
}
运行结果:
Controller并发场景设计:
1.自定义场景;设置15个虚拟用户
2.设置用户数运行状态
3.运行结果
Analysis生成测试报告:
点击率:在一定时间内发生的点击次数。刚启动比较少;慢慢增大。
吞吐量:统在单位时间内处理的请求数量;在系统的承受范围内点击越多;单位时间处理的数量越多;和上图趋势相似
总结:在并发量较低的情况;平均2秒进行一个用户登录的操作;系统的处理响应能力和各方面性能都是比较高效和稳定。
自动化测试;我们需要一个特殊的测试账号;这个账号就无视验证码的验证;不然流程很难顺畅的执行。所以我们创建一个用户名:Test 密码:12345678;在代码层面对这个账号放行。
设计思路
1:针对登录核心流程设计测试用例(手工测试:核心流程可能测试起来非常久;出问题修完还得手工重测)
2:将手工测试用例转换成自动化测试用例。登录流程:打开浏览器、输入测试账号和密码、点击登录、验证是否跳转到列表页(对比URL是否一样&&用户名信息是不是Test)
3:代码结构;使用测试套件;BeforeAll:创建驱动 AfterAll:退出浏览器
登录功能自动化脚本实现
1:创建WebDriver对象;通过这个对象控制浏览器
2:参数化设置
3:脚本代码实现
package myBlog;
import org.junit.jupiter.api.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvFileSource;
import org.openqa.selenium.By;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class BlogCases extends InitAndEnd {
@ParameterizedTest
@CsvFileSource(resources ="LoginSuccess.csv")
void LoginSuccess(String username, String password, String blog_list_url) throws InterruptedException {
// 打开博客登录页面
//webDriver.get("http://localhost:8083/myblog_list.html");
webDriver.get("http://8.138.106.205:8083/login.html");
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
// 输入账号Test
webDriver.findElement(By.cssSelector("#username")).sendKeys(username);
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
//输入密码12345678
webDriver.findElement(By.cssSelector("#password")).sendKeys(password);
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
// 点击提交按钮
webDriver.findElement(By.cssSelector("#submit")).click();
Thread.sleep(1000);
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
//跳转到个人博客列表页;获取到当前页面url
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
String cur_url = webDriver.getCurrentUrl();
// 如果url=http://localhost:8083/myblog_list.html,测试通过,否则测试不通过
System.out.println(blog_list_url);
System.out.println(cur_url);
Assertions.assertEquals(blog_list_url, cur_url);
// 展示用户信息的用户名是Test测试通过,否则测试不通过
webDriver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
String cur_Test = webDriver.findElement(By.xpath("//*[@id=\"author2\"]")).getText();
System.out.println(cur_Test);
System.out.println(username);
Assertions.assertEquals(username, cur_Test);
}
}
测试结果:url、用户名与预期结果一致
这得运用我们前面学习的知识;如何描述一个Bug?
软件测试基础
bug1:
1:版本;v5.0版本
2:环境;Microsoft Edge、Google Chrome
3:操作步骤;在Microsoft Edge和Google Chrome同时登录zhangsan账号;在Google Chrome进行文章添加
4:执行结果;Microsoft Edge需要手动刷新才能显示添加文章结果
5:预期结果;Microsoft Edge能同步显示添加文章结果
6:bug优先级;次要