测试目标及测试任务概括
本次测试的内容为博客系统,其中包括用户登录功能,博客列表页功能,编辑博客功能以及博客详情页功能的UI自动化和功能测试。
测试功能
该博客系统实现了登录功能,用户名及密码已写入后端数据库,填入先前记录的用户名以及密码,点击登录按钮,即可跳转至博客系统个人主界面,无用户注册界面。创建博客功能,点击右上角写博客字样,跳转至编辑博客页进行创建。修改博客功能,点击博客列表查看全文字样,点击编辑按钮进行修改博客具体内容。删除博客功能,点击博客列表查看全文字样,点击删除按钮删除博客。
自动化测试用例
功能测试
正常登录
博客系统个人主页
编辑博客
修改博客
删除博客
经测试博客系统主要功能没有问题,由于测试体量不大可能存在细节不到位等情况发生等风险,项目可暂时上线,项目上线后高优先观察线上数据,查看线上用户操作日志,及时跟进用户反馈。
自动化测试
准备工作
#创建驱动对象
import datetime
import os.path
import sys
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
class Driver:
driver = ""
def __init__(self):
options = webdriver.ChromeOptions()
# options.page_load_strategy = 'eager'
self.driver =
webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)
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(f'../images/{dirname}/' + filename)
BlogDriver = Driver()
登录功能测试
import time
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogLogin:
url = ""
driver = ""
def __init__(self):
self.url = "http://192.168.47.135:8653/blog_system/blog_login.html"
self.driver = BlogDriver.driver
self.driver.get(self.url)
def loginSucTest(self):
time.sleep(2)
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("admin")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 对登录结果进⾏检测, 如果跳转到了博客列表⻚才算是登录成功了
self.driver.find_element(By.CSS_SELECTOR, "body > div.container >
div.left > div > img")
BlogDriver.getScreenShot()
self.driver.back()
def loginFailTest(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("admin")
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("111")
self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
# 等登录失败的结果进⾏检测, 不能仅仅通过body来校验结果,因为登录成功的结果⻚也有body元素
expect = "⽤⼾名或密码错误!"
actual = self.driver.find_element(By.CSS_SELECTOR, "body").text
print(actual)
BlogDriver.getScreenShot()
assert expect == actual
self.driver.back()
博客系统列表页测试
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogList:
url = ""
driver = ""
def __init__(self):
self.driver = BlogDriver.driver
self.url = "http://192.168.47.135:8653/blog_system/blog_list.html"
self.driver.get(self.url)
# 前提:登陆状态下才能进⼊到列表⻚
def ListTest(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div.container >
div.left > div > img")
self.driver.find_element(By.CSS_SELECTOR, "body > div.container >
div.right > div:nth-child(1) > a")
articles = self.driver.find_elements(By.CSS_SELECTOR, "body >
div.container > div.right > div")
assert len(articles) > 10
#点击⽂章
self.driver.find_element(By.CSS_SELECTOR,"body > div.container >
div.right > div:nth-child(1) > a").click()
title = self.driver.title
assert title == "博客详情⻚"
BlogDriver.getScreenShot()
博客系统细节逻辑测试
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BlogDetail:
url = " "
driver = ""
def __init__(self):
self.url = "http://192.168.47.135:8653/blog_system/blog_detail.html?blogId=15"
self.driver = BlogDriver.driver
title = self.driver.title
#列表⻚已经跳过来了,⽆需再指定url跳转
if not title=="博客列表⻚":
self.driver.get(self.url)
def DetailCheck(self):
#body > div.container > div.right > div:nth-child(1) > a
BlogDriver.getScreenShot()
self.driver.find_element(By.CSS_SELECTOR,"body > div.container >div.right > div > h3")
self.driver.find_element(By.CSS_SELECTOR,"body > div.container >div.right > div > div.date")
self.driver.find_element(By.CSS_SELECTOR,"#content")
整体自动化测试
from common.Utils import BlogDriver
from tests import BlogLogin
from tests import BlogList
from tests import BlogDetail
if __name__ == "__main__":
BlogLogin.BlogLogin().loginSucTest()
BlogList.BlogList().ListTest()
BlogDetail.BlogDetail().DetailCheck()
BlogDriver.driver.quit()