目录
[1. 项目简介](#1. 项目简介)
[2. 分析Boost搜索引擎项目的测试用例](#2. 分析Boost搜索引擎项目的测试用例)
[3. 界面测试](#3. 界面测试)
[3.1 首页有无错别字编辑](#3.1 首页有无错别字编辑)
[3.2 布局是否美观](#3.2 布局是否美观)
[3.3 测试搜索框功能是否正常](#3.3 测试搜索框功能是否正常)
[3.4 点击翻看搜索内容](#3.4 点击翻看搜索内容)
[3.5 界面元素是否符合预期](#3.5 界面元素是否符合预期)
[4. 功能测试](#4. 功能测试)
[4.1 输入一个空格](#4.1 输入一个空格)
[4.2 输入中文](#4.2 输入中文)
[4.3 输入数字](#4.3 输入数字)
[4.4 输入内容后+空格](#4.4 输入内容后+空格)
[4.5 输入文档中不存在的关键字](#4.5 输入文档中不存在的关键字)
[4.6 输入一个英文关键字](#4.6 输入一个英文关键字)
[4.7 多次输入相同的内容](#4.7 多次输入相同的内容)
[4.8 多个关键词中间加空格](#4.8 多个关键词中间加空格)
[4.10 输入英文数字混合](#4.10 输入英文数字混合)
[4.11 点击标题,是否正常跳转](#4.11 点击标题,是否正常跳转)
[5. 兼容性测试](#5. 兼容性测试)
[6. 测试报告总结](#6. 测试报告总结)
1. 项目简介
该项目是根据Boost库,编写了一个搜索引擎,根据文档内容,找到文档。我们测试该项目主要进行界面测试、功能测试和兼容性测试。
2. 分析Boost搜索引擎项目的测试用例
根据该项目的功能,通过思维导图的方式编写了以下测试用例
3. 界面测试
该测试环节,我们主要以手动测试页面功能是否正常。
3.1 首页有无错别字
测试结果达到预期效果,该项测试完成。
3.2 布局是否美观

字体大小合适,搜索按钮颜色大小合适,与搜索框距离合适,判定为美观,达到预期效果,该项测试完成。
3.3 测试搜索框功能是否正常

搜索功能正常,达到预期效果,该项测试完成。
3.4 点击翻看搜索内容

点击后查看该功能正常,该项测试完成。
3.5 界面元素是否符合预期
搜索框、搜索按钮、搜索结果的标题,内容,URL皆符合预期,该项测试完成。
4. 功能测试
功能测试主要以自动化测试完成,编写自动化测试脚本。
4.1 输入一个空格
我们将在PyCharm内编写自动化测试脚本,首先,我们的所有测试的前提就是打开浏览器,所以我们要在Utils的Python文件内创建一个类的对象,这是我们的浏览器驱动,在我们所有测试前都可以去使用这个驱动,进行测试。
Utils.py文件
python
import os
import sys
import datetime
from time import sleep
from requests import options
from selenium import webdriver
from selenium.webdriver.ie.service import Service
class Driver:
driver = ""
def __init__(self):
options = webdriver.ChromeOptions()
self.driver = webdriver.Chrome(service=Service("D:\\driver\\chromedriver-win64\\chromedriver.exe"),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)
BlogDriver = Driver()
我们先分析这个模块的代码,创建浏览器驱动对象就不用过多分析了,值得注意的是,getScreenShot函数,这个是截图函数,在我们测试的过程中,代码运行速度过快,也许很难发现问题,那么我们就可以借助Selenium库中的截图函数进行截图保存,代码中,我们的保存是根据日期进行保存的,这个日期的设定可以让我们的所有截图不被以后的截图所覆盖,便于管理与记录,所以很有必要!!!
接下来,我们步入正题,第一测试模块就是测试输入空格,预期结果是没有结果,界面呈现空白。那么我们的测试思路就是驱动对象得到链接是我们的项目链接,然后让对象找到搜索框,然后清空,然后输入空格,然后找到搜索按钮并点击。测试代码如下:
python
from selenium.webdriver.common.by import By
from common.Utils import BlogDriver
class BoostTest:
url = ""
driver = ""
def __init__(self):
self.url = "http://39.105.54.237:8081/"
self.driver = BlogDriver.driver
self.driver.get(self.url)
def Space(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys(" ")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
BlogDriver.getScreenShot()
space = BoostTest()
space.Space()
运行代码后
如图,代码运行成功,返回0
并且我们进行了截图,我们看看截图是否符合预期
如图所示,我们的截图文件确实按照我们的要求保存在了images文件夹内,而且结果也符合预期,该项目测试成功!
4.2 输入中文
输入中文,我们的预期结果是没有反应,依旧是搜索界面,不出现文档内容,测试思路是找到搜索框清空,然后输入中文"中国", 找到搜索按钮点击,最后截图,代码如下:
python
def Chinese(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("中国")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
BlogDriver.getScreenShot()
代码结果显示:成功!

测试截图:

由此可见,达到预期。
4.3 输入数字
输入数字的测试,我们的预期结果是能搜索到有数字的文档列表,预期是列表第一个文档的text是Revision History。所以我们的测试思路是清空输入框,输入数字123,然后点击搜索一下按钮。再获取第一个文档标题使用断言看是否是我们预期的结果,如果是,那么返回0,运行成功!看代码:
python
def Number(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys(123)
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
actual = self.driver.find_element(By.CSS_SELECTOR, "body > div > div.result > div:nth-child(1) > a").text
assert actual == "Revision History"
看看运行结果:

我们还可查看浏览器的显示结果:

显而易见,搜索结果是符合我们的需求的,所以数字模块测试成功,该模块没有问题!!
4.4 输入内容后+空格
这个模块的测试呢,我们依然采用截图的方式,因为这是最直观的,测试的方法其实有很多,这都是辅助测试人员进行测试的。这里的测试思路依旧是清空输入框,输入filesystem + 空格,然后点击搜索,最后等待三秒,截图。因为界面的渲染加载是需要时间的。我们看看测试代码:
python
def ContentSpace(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("filesystem" + " ")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
time.sleep(3)
BlogDriver.getScreenShot()
运行结果截图:

测试截图:

由此可见,我们的测试结果也是符合预期的,该测试模块完成。
4.5 输入文档中不存在的关键字
预期结果是搜索不到内容,测试思路也是和前面一样,照猫画虎,清空搜索框内容,然后输入不存在的单词"gaoyic",最后点击搜索一下,然后截图。
我们看看代码怎么写。
python
def NoExists(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("gaoyichen")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
time.sleep(2)
BlogDriver.getScreenShot()
测试结果:

测试截图:

由此可见,测试结果完全符合预期,该功能测试完成。
4.6 输入一个英文关键字
该功能模块的预期结果是得出的结果是目标文档列表,测试结果我们看看文档列表的第一个标题是否是我们所预期的"Struct template bound_launcher"。依旧使用断言,如果符合测试结果,则成功返回0.
我们看看代码:
python
def English(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR,"body > div > div.search > input[type=text]").send_keys("filesystem")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
text = self.driver.find_element(By.CSS_SELECTOR, "body > div > div.result > div:nth-child(1) > a").text
assert text == "Struct template bound_launcher"
看看测试结果:

看看浏览器界面的搜索结果:

可以看到测试结果完全符合预期,该功能符合需求,测试完成!!!
4.7 多次输入相同的内容
这个模块的预期结果就是搜索到的文档内容两次一样,所以我们的测试思路就是看每次搜索内容的第一个文档标题是否相同,那么就直接看代码吧!!
python
def SameContent(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("Boost")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
text1 = self.driver.find_element(By.CSS_SELECTOR, "body > div > div.result > div:nth-child(1) > a").text
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("Boost")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
text2 = self.driver.find_element(By.CSS_SELECTOR, "body > div > div.result > div:nth-child(1) > a").text
assert text1 == text2
测试结果:

由于使用了断言,所以,只要执行成功,就一定符合预期,所以测试结果完全符合预期,该功能测试完成!!!
4.8 多个关键词中间加空格
这个测试模块的预期结果是显示出搜索出的文档列表,测试思路就是清除搜索框内容,输入关键词+空格+关键词。我们采用截图的方式来查看测试结果。代码如下:
python
def SetSpace(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("filesystem" + " " + "boost")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
time.sleep(2)
BlogDriver.getScreenShot()
测试结果如下:

测试截图如下:

由此可见,本功能测试结果完全符合需求,该功能测试完成!!
4.9多个关键词中间加,
这个功能我们的需求预期是成功显示搜索出的文档列表,测试思路和关键词中间加空格一样,测试结果有截图显示。代码如下:
python
def setPause(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("filesystem" + "," + "boost")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
time.sleep(2)
BlogDriver.getScreenShot()
测试结果如下:

测试截图如下:

由此可见,该功能测试完全符合需求结果,该功能通过测试!!
4.10 输入英文数字混合
该功能测试的预期结果为搜索后的结果为空白,我们同样通过截图来检测结果。测试思路和上一样。代码如下:
python
def NumberAndEnglish(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("filesystem" + "1")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
time.sleep(2)
BlogDriver.getScreenShot()
代码测试结果如下:

测试截图如下:
由此可见,测试结果为空白,符合需求,该功能通过测试!!
4.11 点击标题,是否正常跳转
这个功能是验证浏览器的标题是否可以正常跳转,测试预期结果是可以正常跳转,测试思路就是清空输入框,输入filesystem,点击搜索一下按钮,找到第一个文档的标题,然后切换窗口,将句柄给跳转后的新窗口,然后看看标题是否是对应的标题,截图看看是否符合预期。代码如下:
python
def ClickTitle(self):
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").clear()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > input[type=text]").send_keys("filesystem")
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.search > button").click()
self.driver.find_element(By.CSS_SELECTOR, "body > div > div.result > div:nth-child(1) > a").click()
curWindow = self.driver.current_window_handle
allWindow = self.driver.window_handles
for window in allWindow:
if window != curWindow:
self.driver.switch_to.window(window)
text3 = self.driver.find_element(By.CSS_SELECTOR, "body > div:nth-child(2) > div.refentry > div.refnamediv > h2 > span").text
assert text3 == "Struct template bound_launcher"
BlogDriver.getScreenShot()
self.driver.quit()
代码运行结果如下:

测试截图如下:

由此可见,这个测试结果是完全符合预期的,该功能测试完成!!
5. 兼容性测试
兼容性测试由于设备有限,主要测试浏览器环境下,该程序的运行情况
Chrome浏览器下的运行情况:

Microsoft edge浏览器下的运行情况:

联想浏览器下的运行情况如下:

由此可见,咱们的兼容性测试也通过测试
6. 测试报告总结
通过以上界面测试、功能测试以及兼容性测试,我们的boost搜索引擎项目通过测试,允许正常上线。