一、项目介绍
为论坛系统实施自动化测试,并编写自动化测试用例,自动化测试是通过Selenium编写的自动化脚本,自动化测试用例覆盖了登录界面、注册页面、论坛列表页等核心功能,以来确保每个页面各个每个模块功能的稳定,使用户有流畅的论坛浏览和使用体验。
二、测试计划
2.1功能测试
2.1.1 编写Web测试用例
设计测试用例方法一般从以下几个方面设计:
功能测试、界面测试、性能测试、易用性测试、安全性测试、兼容性测试等六个方面进行设计,但是论坛系统是一个web网站,主要是针对核心功能进行测试,测试功能点如下:
2.1.2 执行测试用例
1.登录测试
(1)简介
用户名与密码已存储在数据库中,登录成功即可跳转到列表页;点击”退出“按钮,自动跳转到登录页。
(2)测试用例展示
(a)界面
(b)输入正确的账号和密码(以账号:li,密码:123)
预期结果:跳转到博客列表页
实际结果展示
(c)输出错误的账号或密码
预期结果:显示弹窗,并提示用户名不存在或者密码错误
实际结果如下图
2.论坛列表页
(1)简介
登录成功将跳转到论坛列表页、当前用户的头像、用户名(是否与登录账号相同)、可以看到自己与他人发表的论坛(论坛的标题、论坛的作者、发表论坛的时间、论坛的浏览量、论坛的点赞量、论坛的留言)等信息。
(2)测试用例展示
(a)列表页展示
(b)搜索功能测试
输入要搜索的内容:(点击搜索之后并无反应)
bug:搜索功能尚未实现
3.论坛详情页面
(1) 简介
在论坛列表页面点击该论坛,即可跳转到论坛详情页,这时即可看到论坛的全部内容。
(2) 测试效果展示
(a) 论坛详情页展示
(b) 论坛详情页面测试发私信功能
(c) 论坛详情页 发布留言用例
4.论坛编辑页面
(1) 简介
进入到论坛列表页,点击右上角的发布帖子,即可进入论坛的编辑页面,也可进行发布论坛
(2) 实际效果展示
(a)登录之后会先来到论坛列表页
(b) 点击右上角的发布帖子按钮即可进入论坛编辑页面
(c) 输入正确的标题和内容,点击发布按钮即可成功发布论坛
(d) 点击“发布”按钮后,即可返回到论坛列表页面查看新发布的论坛
5.我的中心用例
(1) 简介
进入到论坛详情页面后,点击右上角用户头像,点击个人中心即可进入我的中心页面
(a) 实际效果展示
(b) 我的贴子页面
6.注册页面
(1) 简介
在登录页面,点击下面的注册按钮,即可注册账号,随后可进行重新登陆
(a) 实际效果展示
(b) 输入正确的用户名、昵称、密码、确认密码、勾选协议,并点击提交按钮
2.2 使用Selenium进行Web自动化测试(Python)
2.2.1 安装WebDriverManager驱动管理程序和selenium 类库
WebDriverManager是一个用于管理Web驱动程序的工具,主要用于自动化测试领域。在进行 Selenium 测试时,需要一个与浏览器相匹配的 Web 驱动程序,以便控制和操作浏览器。WebDriverManager能够自动下载和管理浏览器驱动程序,会自动检测本地系统中安装的浏览器,并下载对应的浏览器驱动程序(如ChromeDriver、FirefoxDriver等)。这避免了手动下载和配置驱动程序的繁琐过程,提高了自动化测试的效率和稳定性,以便在自动化测试中使用这些浏览器。
2.2.2 新建项目
在项目中点击File->Settings进入界面,查看“Project:当前项目名”中是否存在selenium和webdriver-manager两个包。
2.2.3 参照测试用例,编写自动化测试脚本
1.创建浏览器对象
为了之后可以避免冗余的代码,并且可以节省空间以及时间,所以要将调用的浏览器对象放到一个单独的文件中,这里定义一个Utils.py文件,用来写测试中需要的配置文件(屏幕截图、隐式等待)
有时候我们想要知道每次运行结束前的界面是什么情况,就可以使用屏幕截图来保存当时的情况。
①首先我们定义一个driver类
②定义俩个我们所需要的构造函数
import datetime
import os
import sys
from selenium import webdriver
class Driver:driver = ""def __init__(self):self.driver = webdriver.Edge()self.driver.implicitly_wait(10)def getScreen(self):# 创建屏幕截图dirname = datetime.datetime.now().strftime("%Y-%m-%d")filename = sys._getframe().f_back.f_code.co_name + "-" + datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S') + ".png"# 判断是否有该文件夹os.makedirs(f"../images/{dirname}", exist_ok=True)self.driver.save_screenshot(f'../images/{dirname}/{filename}')
MyBlogDriver = Driver()
2.创建一个总入口文件,为了方便统一调用各个自动化测试接口(RunTest.py)
# 总运行入口文件
if __name__ == '__main__':
3.进行论坛“登录”自动化测试用例
① 新建一个论坛登录测试文件,命名为:Login.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(MyLogin)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功登录博客的函数(Suclogin)与一个失败登录博客的构造函数(Faillogin)
⑥ 注意清空输入框的内容后才能再次输入用户名及密码进行登录
⑦ 测试内容包括:输入正确的账号密码进行登录,以及账号错误与密码正确,账号正确密码错误
#论坛登录页面测试
import time
from selenium.webdriver.common.by import By
from 论坛系统测试.common.Utils import MyBlogDriver
class MyLogin:driver = ""url = ""def __init__(self):self.driver = MyBlogDriver.driverself.url = "http://127.0.0.1:9580/sign-in.html"self.driver.get(self.url)# 成功登录函数def Suclogin(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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 修改完密码之后重新登录函数方法def LogBackIn(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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#失败登录函数def Faillogin(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("ll")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 账号正确 密码错误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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 账号为空 密码正确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("")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 账号正确 密码为空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("li")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()# 账号为空 密码为空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("")self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("")self.driver.find_element(By.CSS_SELECTOR, "#submit").click()
4.”论坛列表页“自动化测试
① 新建一个博客列表页测试文件,命名为:List.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(List)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功登录论坛的函数(Suclist)(由于未登录的情况下会直接返回到登录页面 所以未进行测试未登录状态下的博客列表页)
⑥ 测试内容包括:论坛标题、论坛内容、按钮等是否存在,以及"用户名称是否与登录的账号一致”
# 论坛列表页测试用例
import time
from selenium.webdriver.common.by import By
from 论坛系统测试.common.Utils import MyBlogDriver
class List:driver = ""url = ""def __init__(self):self.driver = MyBlogDriver.driverself.url = "http://127.0.0.1:9580/index.html"# self.driver.get(self.url)def SucList(self):# time.sleep(2)# 查看页面元素是否有发布帖子标签self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post")# 查看页面元素是否具有首页导航栏self.driver.find_element(By.CSS_SELECTOR,"#nav_board_index > a > span.nav-link-title")# 判断是否有论坛标题self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong")# 是否含有论坛作者self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(1)")# 论坛是否具有发表时间self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-muted.mt-2 > div > div.col > ul > li:nth-child(2)")# 跳转到第一篇论坛self.driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(5) > div > div.col > div.text-truncate > a > strong").click()time.sleep(2)# MyBlogDriver.getScreen()
from 论坛系统测试.TestCase import Login, List, MyDetail, Edit, MySign, UserCenter
from 论坛系统测试.common.Utils import MyBlogDriver
if __name__ == '__main__':# 正确登录Login.MyLogin().Suclogin()# 论坛列表页测试用例List.List().SucList()MyBlogDriver.driver.quit()
测试结果如下:
5.”论坛详情页“自动化测试
① 新建一个博客详情页测试文件,命名为:MyDetail.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(MyDetail)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功登录论坛的函数(detail)(由于未登录的情况下会直接返回到登录页面 所以未进行测试未登录状态下的博客详情页)
⑥ 测试内容包括:论坛标题、论坛内容、发私信按钮,回复按钮等是否存在,以及"用户名称是否与登录的账号一致”
#论坛详情页测试用例
import time
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from 论坛系统测试.common.Utils import MyBlogDriver
class MyDetail:driver = ""url = ""def __init__(self):# self.url = "http://127.0.0.1:9580/index.html"self.driver = MyBlogDriver.driver# self.driver.get(self.url)def SucDetail(self):# 查早论坛是否有具体标题self.driver.find_element(By.CSS_SELECTOR,"#details_article_title")# 查早论坛有发布的时间self.driver.find_element(By.CSS_SELECTOR,"#details_article_createTime")# 查早论坛的作者self.driver.find_element(By.CSS_SELECTOR,"#article_details_author_name")# 查找论坛的内容self.driver.find_element(By.CSS_SELECTOR,"#details_article_content > p")# 给该论坛点赞self.driver.find_element(By.CSS_SELECTOR,"#details_btn_like_count > svg")# 点击发私信按钮self.driver.find_element(By.CSS_SELECTOR,"#btn_details_send_message").click()# 编写私信内容self.driver.find_element(By.CSS_SELECTOR,"#index_message_receive_content").send_keys("hello")# 点击发送按钮self.driver.find_element(By.CSS_SELECTOR,"#btn_index_send_message").click()self.driver.find_element(By.CSS_SELECTOR, "#index_message_modal > div > div > div.modal-header > button").click()text = self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div > h2").textif text == "成功":self.driver.find_element(By.CSS_SELECTOR, "#index_message_modal > div > div > div.modal-header > button").click()time.sleep(2)# 给该论坛留言element = self.driver.find_element(By.CSS_SELECTOR,"#article_details_reply > div.editormd-toolbar > div > ul > li:nth-child(17) > a")self.driver.execute_script("arguments[0].click();", element)# 点击回复按钮time.sleep(2)self.driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply > svg").click()
from 论坛系统测试.TestCase import Login, List, MyDetail, Edit, MySign, UserCenter
from 论坛系统测试.common.Utils import MyBlogDriver
if __name__ == '__main__':# 正确登录Login.MyLogin().Suclogin()# 论坛列表页测试用例List.List().SucList()# 论坛详情页测试用例MyDetail.MyDetail().SucDetail()MyBlogDriver.driver.quit()
测试效果如下:
6.”论坛的编辑与发布“自动化测试
① 新建一个论坛编辑页测试文件,命名为:Edit.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(MyEdit)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功发布论坛的函数(SucEdit)
⑥ 测试内容包括:论坛标题、论坛内容、发布按钮等是否存在,以及不写标题写内容能发发布论坛,写标题写内容不点击发布按钮是否能发布论坛,写标题不写内容能否发布论坛用例
# 论坛编辑页测试用例
import time
from telnetlib import ECfrom selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWaitfrom 论坛系统测试.common.Utils import MyBlogDriver
class MyEdit:driver = ""url = ""def __init__(self):self.driver = MyBlogDriver.driverself.url = "http://127.0.0.1:9580/index.html"self.driver.get(self.url)# 元素检查def SearchEdit(self):# time.sleep(2)# 跳转到论坛编辑页面self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post").click()# 查找板块内容self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-body > div > div > div.card-body > div:nth-child(1) > label > strong")# 查找标题板块self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-body > div > div > div.card-body > div:nth-child(2) > label > strong")# 查找发布按钮self.driver.find_element(By.CSS_SELECTOR,"#article_post_submit")# 正确发布论坛def SucEdit(self):# time.sleep(2)# 跳转到论坛编辑页面self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col-auto.ms-auto.d-print-none > div > a.btn.btn-primary.d-none.d-sm-inline-block.article_post").click()# 选择C++板块self.driver.find_element(By.CSS_SELECTOR,"#article_post_borad > option:nth-child(2)").click()# 填写标题self.driver.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys("hello")# 填写内容# 定位到输入标题的位置title_label = self.driver.find_element(By.CSS_SELECTOR, "#article_post_title")# tab键跳转到输入内容的位置title_label.send_keys(Keys.TAB) # 重点ele = self.driver.switch_to.active_element# 正常输入内容ele.send_keys("你好")time.sleep(2)# 查找内容元素# self.driver.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(12) > a > i").click()# self.driver.find_element(By.CSS_SELECTOR,"#edit-article > div.editormd-toolbar > div > ul > li:nth-child(20) > a").click()# 点击发布按钮element1 = self.driver.find_element(By.CSS_SELECTOR,"#article_post_submit")self.driver.execute_script("arguments[0].click();", element1)# text = self.driver.find_element(By.CSS_SELECTOR,"body > div.jq-toast-wrap.bottom-right > div > h2").text# print(text)time.sleep(2)# MyBlogDriver.getScreen()
from 论坛系统测试.TestCase import Login, List, MyDetail, Edit, MySign, UserCenter
from 论坛系统测试.common.Utils import MyBlogDriver
if __name__ == '__main__':# 正确登录Login.MyLogin().Suclogin()# 论坛列表页测试用例List.List().SucList()# 论坛详情页测试用例MyDetail.MyDetail().SucDetail()# 论坛编辑页测试用例Edit.MyEdit().SearchEdit()Edit.MyEdit().SucEdit()MyBlogDriver.driver.quit()
测试效果如下:
7.”论坛注册功能“自动化测试
① 新建一个论坛编辑页测试文件,命名为:MySign.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(MySign)
④ 引入一些需要用到的第三方库
⑤ 构造一个成功注册的函数(SucSign)和几个失败注册的函数
⑥ 测试内容包括:输入正确的用户名、昵称、密码、确认密码、勾选协议、提交按钮,以及错误的注册方法
# 注册页面测试用例
from selenium.webdriver.common.by import By
from 论坛系统测试.common.Utils import MyBlogDriver
class MySign:driver = ""url = ""def __init__(self):self.url = "http://127.0.0.1:9580/sign-up.html"self.driver = MyBlogDriver.driverself.driver.get(self.url)#正确注册函数def SucSign(self):self.driver.find_element(By.CSS_SELECTOR, "#username").clear()self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()self.driver.find_element(By.CSS_SELECTOR, "#password").clear()self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR,"#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR,"#passwordRepeat").send_keys("123456")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR,"#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR,"#submit").click()#MyBlogDriver.getScreen()# 失败注册函数(将用户名框为空)def FailSign1(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").clear()# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#MyBlogDriver.getScreen()# 失败注册函数(将昵称框为空)def FailSign2(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").clear()# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#MyBlogDriver.getScreen()# 失败注册函数(将密码框为空)def FailSign3(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").clear()# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#MyBlogDriver.getScreen()# 失败注册函数(将确认密码框为空)def FailSign4(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").clear()# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#MyBlogDriver.getScreen()# 失败注册函数(不勾选用户协议)def FailSign5(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#MyBlogDriver.getScreen()# 失败注册函数(不点击注册按钮)def FailSign6(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123456")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit")#MyBlogDriver.getScreen()# 失败注册函数(密码和确认密码不一致)def FailSign7(self):# 查找用户名输入框self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys("moon")# 查早昵称输入框self.driver.find_element(By.CSS_SELECTOR, "#nickname").send_keys("测试员0101")# 查找密码输入框self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys("123456")# 查找确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#passwordRepeat").send_keys("123")# 查找协议的勾选框self.driver.find_element(By.CSS_SELECTOR, "#policy").click()# 查找注册按钮self.driver.find_element(By.CSS_SELECTOR, "#submit").click()#MyBlogDriver.getScreen()
from 论坛系统测试.TestCase import Login, List, MyDetail, Edit, MySign, UserCenter
from 论坛系统测试.common.Utils import MyBlogDriver
if __name__ == '__main__':# 错误注册MySign.MySign().FailSign1()MySign.MySign().FailSign2()MySign.MySign().FailSign3()MySign.MySign().FailSign4()MySign.MySign().FailSign5()MySign.MySign().FailSign6()MySign.MySign().FailSign7()# 正确注册MySign.MySign().SucSign()# 正确登录Login.MyLogin().Suclogin()# 论坛列表页测试用例List.List().SucList()# 论坛详情页测试用例MyDetail.MyDetail().SucDetail()# 论坛编辑页测试用例Edit.MyEdit().SearchEdit()Edit.MyEdit().SucEdit()MyBlogDriver.driver.quit()
测试结果如下:
8.”我的中心页面“自动化测试
① 新建一个我的中心页面测试文件,命名为:UserCenter.py
② 引入Utils.py文件(获取到创建的浏览器对象)和其他需要的配置文件
③ 创建一个类对象,我们在这里命名为与文件同名(UserCenter)
④ 引入一些需要用到的第三方库
⑤ 构造一个我的账户的函数(Account)和我的贴子页面函数(MyPost)
⑥ 测试内容包括:查找用户名,用户的头像,修改用户的邮箱,修改用户的电话,修改账户密码,查找用户发表的贴子
#用户中心测试用例
import timefrom selenium.webdriver.common.by import By
from 论坛系统测试.common.Utils import MyBlogDriver
class UserCenter:driver= ""url = ""def __init__(self):self.driver = MyBlogDriver.driverself.url = "http://127.0.0.1:9580/?"# self.driver.get(self.url)# 我的账户测试函数def Account(self):MyBlogDriver.getScreen()time.sleep(5)# 点击右上角用户头像self.driver.find_element(By.CSS_SELECTOR, "#index_nav_avatar").click()# 点击个人中心 并进入我的账户页面self.driver.find_element(By.CSS_SELECTOR, "#index_user_settings").click()# 查找用户名self.driver.find_element(By.CSS_SELECTOR, "#settings_nickname")# 查找用户头像self.driver.find_element(By.CSS_SELECTOR, "#settings_avatar")# 查找到邮箱输入框并修改邮箱self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").clear()self.driver.find_element(By.CSS_SELECTOR, "#setting_input_email").send_keys("2495657683")self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_email").click()# 查找电话输入框并修改self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").clear()self.driver.find_element(By.CSS_SELECTOR, "#setting_input_phoneNum").send_keys("111111")time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#setting_submit_phoneNum").click()time.sleep(5)self.driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")# 个人简介板块并修改self.driver.find_element(By.CSS_SELECTOR, "#settings_textarea_remark").send_keys("hello")time.sleep(2)# self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_remark").click()# 修改密码板块# 原密码输入框self.driver.find_element(By.CSS_SELECTOR, "#settings_input_oldPassword").send_keys("1234")# 新密码输入框self.driver.find_element(By.CSS_SELECTOR, "#settings_input_newPassword").send_keys("123")# 确认密码输入框self.driver.find_element(By.CSS_SELECTOR, "#settings_input_passwordRepeat").send_keys("123")# 点击提交修改按钮time.sleep(2)self.driver.find_element(By.CSS_SELECTOR, "#settings_submit_password").click()# 点击之后会跳转到登录页面# 我的贴子页面def MyPost(self):# 点击右上角用户头像self.driver.find_element(By.CSS_SELECTOR, "body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.dropdown > a").click()# 点击我的贴子 并进入我的贴子页面self.driver.find_element(By.CSS_SELECTOR, "#index_user_profile").click()# 查找用户名self.driver.find_element(By.CSS_SELECTOR,"#profile_nickname")# 查找用户头像self.driver.find_element(By.CSS_SELECTOR,"#profile_avatar")# 查找用户发帖的数量text = self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(1)").textprint(text)# 查找用户邮箱text1 = self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(2)").textprint(text1)# 查找用户注册日期self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-header.d-print-none > div > div > div.col > div > div:nth-child(3)")# 查找发表过论坛的标题self.driver.find_element(By.CSS_SELECTOR,"#profile_article_body > li:nth-child(1) > div.card.timeline-event-card > div > div > div > div > div.text-truncate")# 查找用户的个人介绍self.driver.find_element(By.CSS_SELECTOR,"#bit-forum-content > div.page-body > div > div > div.col-lg-4 > div > div > div > div")
from 论坛系统测试.TestCase import Login, List, MyDetail, Edit, MySign, UserCenter
from 论坛系统测试.common.Utils import MyBlogDriver
if __name__ == '__main__':#错误注册MySign.MySign().FailSign1()MySign.MySign().FailSign2()MySign.MySign().FailSign3()MySign.MySign().FailSign4()MySign.MySign().FailSign5()MySign.MySign().FailSign6()MySign.MySign().FailSign7()#正确注册MySign.MySign().SucSign()# 失败登录Login.MyLogin().Faillogin()# 正确登录Login.MyLogin().Suclogin()# 用户中心测试用例UserCenter.UserCenter().Account()# 重新登录Login.MyLogin().LogBackIn()# 论坛列表页测试用例List.List().SucList()# 论坛详情页测试用例MyDetail.MyDetail().SucDetail()# 论坛编辑页测试用例Edit.MyEdit().SearchEdit()Edit.MyEdit().SucEdit()# 用户中心测试用例UserCenter.UserCenter().MyPost()# 退出MyBlogDriver.driver.quit()
测试效果如下:
三、自动化测试的特点与亮点
自动化测试的优点有很多,包括:
-
提高测试效率:自动化测试可以快速执行测试用例,减少人工测试的时间和工作量,提高测试效率。
-
提高测试覆盖率:自动化测试可以运行大量的测试用例,覆盖更广泛的功能和场景,提高测试覆盖率。
-
减少人为错误:自动化测试减少了人为的测试错误,提高了测试的准确性和可靠性。
-
可重复性强:自动化测试可以重复执行相同的测试用例,确保测试结果的一致性。
-
节省成本:自动化测试可以减少人力资源成本和时间成本,提高测试效率,从而节省成本。
-
便于集成和持续集成:自动化测试可以轻松集成到持续集成环境中,实现自动化测试、构建和部署的无缝集成。
总的来说,自动化测试可以提高测试效率、准确性和可靠性,节省成本并支持持续集成,是软件开发过程中的重要组成部分。
4.完整测试代码连接
仓库存放测试相关用例和代码 gitee.com)