测试计划
功能 | 后端开发 | 前端开发 | 提测日期 | 测试 | 测试日期 | 测试结果 |
登陆界面 | 爱意 | 爱意 | 4.7 | 爱意 | 4.7 | 测试通过 |
博客首页 | 爱意 | 爱意 | 4.7 | 爱意 | 4.8 | 测试通过 |
博客详情页 | 爱意 | 爱意 | 4.7 | 爱意 | 4.9 |
登录之后点击博客详情页,发现用户名与一开始登录时候的用户名不一致 |
博客编辑页 | 爱意 | 爱意 | 4.7 | 爱意 | 4.9 | 测试通过 |
回归测试 | 爱意 | 爱意 | 4.7 | 爱意 | 4.9 | 测试通过 |
一.博客相关测试用例
1.1.博客系统功能背景
博客系统通常具备用户注册、登录、文章发布、编辑、管理、评论互动等功能,同时还提供了丰富的模板和插件,让用户可以根据自己的喜好和需求来定制博客的外观和功能。这些软件的出现,大大降低了博客创建的门槛,使得更多人能够轻松地拥有自己的博客空间。
1.2.博客系统思维导图
为了能够在众多软件中脱颖而出,并且能让用户用的安心以此来获得用户的青睐,从而推动公司的发展,因此一款好的软件一定离不开测试人员通过大量的测试案例来对软件进行BUG分析,对于一款软件简单来说可分为六方面的测试:界面测试、功能测试、安全测试、易用性测试、兼容性测试、性能测试。
二.博客界面测试
2.1登录界面测试
登录界面的登陆框、用户名、密码、提交等内容与我们编写的思维导图基本一致,符合预期效果,并且提交按钮用绿色框格包围使得用户能更加轻松登录博客。
三.博客功能测试
3.1.登陆测试
- 1.输入错误用户名
2.输入正确用户名和错误密码
3.输入错误用户名和正确密码
4.输入正确密码和用户名
3.2.页面测试
1.点击可以查看全文
2.查看全文
3.点击可以编辑和删除
4.点击编辑
编辑标题和内容之后可以点击更新博客
5.更新博客
5.删除博客
确定之后就删除完毕
人为只能测试极其有限的功能,因此测试人员还需编写测试脚本,通过将大量测试用例交给机器来完善软件功能。
四、博客自动化测试脚本
4.1.配置驱动
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera,Edge等。
WebDriverManager 是一个开源的 Java 库,用于自动管理 Selenium WebDriver 所需的驱动程序(如 ChromeDriver、GeckoDriver、EdgeDriver 等)。它可以自动下载、设置和维护这些驱动程序,从而简化了 Selenium 测试的配置过程
4.2.创建对象
由于多个功能测试都需要驱动浏览器,因此将其封装成一个类,减少驱动次数造成不必要的浪费,新建一个common文件夹,在untils.py下创建浏览器对象
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from webdriver_manager.microsoft import EdgeChromiumDriverManager
class Driver:
driver = ""
def __init__(self):
options = webdriver.EdgeOptions()
self.driver = webdriver.Edge(service = Service(EdgeChromiumDriverManager().install()),options = options)
self.driver.implicitly_wait(2)
def getScreenShot(self):
dirname = datetime.datetime.now().strftime("%Y-%m-%d")
if not os.path.exists("../images/" + dirname):
os.mkdir("../images/" + dirname)
filename = sys._getframe().f_back.f_code.co_name+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S") + ".png"
self.driver.save_screenshot("../images/"+dirname+"/"+filename)
BlogDirver = Driver()
4.3. 登录测试
url获取登录界面的链接,然后使用get方法来进行跳转倒url链接
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDirver
class BlogLogin:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_login.html"
self.driver = BlogDirver.driver
self.driver.get(self.url)
def LoginSuccessTest(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3")
def LoginFailTest(self):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#password").clear()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345677")
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(2)
alert = self.driver.switch_to.alert
alert.accept()
BlogDirver.getScreenShot()
self.driver.back()
print("用户登录失败")
我们可以大概来解释一下这个Login里面的函数
首先我们需要通过选择器来寻找元素,然后找到之后先清空一下,然后用send_keys
来输入账号和信息,再用sleep来进行强制等待,然后用选择器来找到登录按钮,最后click方法就可以登录进去了
然后下面有一个测试失败的方法,跟测试登录成功的方法大致相同
来跑一下,这个测试方法里面手下是测试登录失败的案例,然后清空输入框,再输入正确的用户名和密码,就是测试登录成功的案例
登录失败:
登录成功:
4.4.主页测试
4.4.1博客列表
当登录成功之后,我们可以检查是否能找到相应的博客信息,就是跳到了博客列表的界面
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDirver
class BlogList:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_list.html"
self.driver = BlogDirver.driver
self.driver.get(self.url)
#测试登录成功的状态的个人信息
def BlogLoginInfoList(self):
#找到博客标题
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.title")
#博客内容是否存在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > div.desc")
#按钮是否存在
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a")
#检查个人昵称是否存在
conten = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").text()
print(conten)
如果能找到,那就说明登录成功之后的页面没有问题
然后我们再测试一下未登录状态能不能找到博客列表
#测试登录失败的状态的个人信息
def BlogUnLoginInfoList(self):
self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)").click()
4.4.2博客详情页
然后我们可以点击这个博客详情页的按钮,进入看看能不能找到博客详情
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDirver
class BlogDetail:
url = ""
driver = ""
def __init__(self):
#self.url = "http://8.137.19.140:9090/blog_detail.html?blogId=43892"
self.driver = BlogDirver.driver
#self.driver.get(self.url)
def BlogLoginDetailInfo(self):
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a").click()
#查找标题
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.title")
#查找内容
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"#detail > p")
#查找时间
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div > div.date")
def BlogUnLoginDetailInfo(self):
self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(4)").click()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "body > div.container > div.right > div:nth-child(1) > a").click()
def BlogFindUsrname(self):
text1 = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").text
self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.right > div:nth-child(1) > a").click()
text2 = self.driver.find_element(By.CSS_SELECTOR,"body > div.container > div.left > div > h3").text
if not text1 == text2:
print("登陆之后的用户名和点击博客详情页的用户名不一致!\n")
而就是在这里发现了,登录的用户名和点进去的博客详情页的用户名不一致,这也是全篇唯一的bug
点进去之后:
4.4.3博客编辑发布
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDirver
class BlogEdit:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.137.19.140:9090/blog_edit.html"
self.driver = BlogDirver.driver
self.driver.get(self.url)
#登录成功的状态下
def BlogLoginEdit(self):
self.driver.find_element(By.CSS_SELECTOR,"#title").send_keys("测试标题")
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"#submit").click()
time.sleep(2)
#未登录成功的状态下
def BlogUnLoginEdit(self):
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR,"body > div.nav > a:nth-child(5)").click()
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#title").send_keys("测试标题标题")
time.sleep(2)
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
time.sleep(2)
五、BUG分析
- 虽然用特殊符合隐藏用户密码保证了用户信息安全,但缺少显示密码可见功能,当用户设置的密码比较繁琐时,并不利于用户正确输入密码。
- 在写博客并发表后,博客内容更新是从下往上更新不便查找更新内容。
- 缺少注册按钮。