1、问卷调查系统设计背景
在当今数字化时代,信息收集与分析对于各行业的发展至关重要。传统问卷调查方式,如纸质问卷,存在发放与回收耗时费力、数据统计易出错且效率低下等问题。随着互联网的普及和移动设备的广泛应用,线上问卷调查需求日益增长。设计此问卷调查系统,旨在为用户提供便捷、高效、低成本的问卷创建、发布与数据分析平台。无论是企业市场调研、学术研究,还是社会组织活动反馈收集,都能借助该系统快速获取准确信息,以支持决策制定和业务优化。
2、项目功能
1、登录功能
登录界面
输入账号、输入密码、点击登录、即可完成登录
2、注册
点击注册账户
输入账号密码点击注册账户
3、创建问卷
登录进入首页后点击创建问卷
进入编辑界面输入标题、内容点击保存即可完成创建
3、测试计划
4、测试工具
1)Xmind
使用Xmind 绘制了需要的测试用例
2)Pycharm和chrome
使用Pycharm编写自动化脚本进行测试
3)Postman
使用Postman进行性能测试
5、设计到的测试设计类型
1)功能测试
覆盖了,登录功能(正常登录,异常登录),注册功能(正常注册,异常注册),首页
(登录后的首页,未登录的首页),问卷的详情页(创建成功,创建失败)
2)自动化测试
覆盖了,登录功能(正常登录,异常登录),注册功能(正常注册,异常注册),首页
(登录后的首页,未登录的首页),问卷的详情页(创建成功,创建失败)
6、功能测试
1)登录功能
按照测试用例进行一步一步的操作
如正常登录,打开浏览器->
——>进入首页
_>输入账号密码
点击登录,登录成功
2)注册功能
绘制思维导图
如测试输入的密码小于6位:
打开登录界面
点击注册按钮
输入账号,密码123,确认密码123
提示密码少于6位功能正常
3)创建调查问卷
登录成功后进入首页
点击创建问卷
输入标题内容点击保存
在我的项目中找到创造的问卷,功能正常
7、自动化测试
1)绘制思维导图
2)编写测试程序
配置文件:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.core import driver
class Driver:
driver = ""
def __init__(self):
options = webdriver.ChromeOptions()
self.driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()),options = options)
self.driver.implicitly_wait(1)
def screenshot(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)
AllDriver = Driver()
登录界面:
import time
from selenium.webdriver.common.by import By
from comom.Utils import AllDriver
class Login:
url = ""
driver = ""
def __init__(self):
self.url = "http://8.155.1.153:8081/user/login"
self.driver = AllDriver.driver
self.driver.get(self.url)
def Login_quit(self):
self.driver.quit()
#成功登录测试
def LoginSucTest(self,username,password):
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(username)
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
time.sleep(1)
AllDriver.screenshot()
self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > main > div > div.ant-page-header.ant-pro-page-container-warp-page-header.ant-pro-page-container-warp-page-header.ant-page-header-has-breadcrumb.ant-page-header-ghost > div.ant-page-header-content > div > div > div > div > div > div.content___1eLtZ > div.contentTitle___Yu-cR")
self.driver.back()
#1错误账号密码 或者 2不输入密码 3或不都不输入
def LoginFulTest(self,username = None,password = None):
self.driver.find_element(By.CSS_SELECTOR,"#username").clear()
self.driver.find_element(By.CSS_SELECTOR,"#password").clear()
time.sleep(1)
if username != None:
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys(username)
if password != None:
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
time.sleep(1)
AllDriver.screenshot()
if (username == None and password == None):
used = self.driver.find_element(By.CSS_SELECTOR,"#username_help > div").text
pasd = self.driver.find_element(By.CSS_SELECTOR,"#password_help > div").text
assert pasd == "密码是必填项!"
assert used == "用户名是必填项!"
elif password == None:
pasd = self.driver.find_element(By.CSS_SELECTOR,"#password_help > div").text
assert pasd == "密码是必填项!"
else:
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div.ant-alert.ant-alert-error")
self.driver.refresh()
#4 不输入账号
def LoginFulUTest(self,password):
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, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button").click()
AllDriver.screenshot()
used = self.driver.find_element(By.CSS_SELECTOR, "#username_help > div").text
assert used == "用户名是必填项!"
self.driver.refresh()
#5 不点击登录
def LoginFulFTest(self,username,password):
self.driver.find_element(By.CSS_SELECTOR, "#username").clear()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.top___1C1Zi > div.header___5xZ3f > span")
time.sleep(1)
AllDriver.screenshot()
注册界面:
#注册成功
def LoginSucRegister(self,name,username,password,repassword):
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR,"#name").send_keys(name)
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#rePassword").send_keys(repassword)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
time.sleep(1)
AllDriver.screenshot()
text = self.driver.current_url
assert text == "http://8.155.1.153:8081/user/login"
#注册无姓名
def LoginFNNRegister(self,username,password,repassword):
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys(repassword)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
time.sleep(1)
AllDriver.screenshot()
text = self.driver.find_element(By.CSS_SELECTOR,"#name_help > div").text
assert text == "用户名是必填项!"
self.driver.back()
#注册无账号
def LoginFNURegister(self,name,password,repassword):
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys(name)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys(repassword)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
time.sleep(1)
AllDriver.screenshot()
text = self.driver.find_element(By.CSS_SELECTOR,"#username_help > div").text
assert text == "登录账号不能为空"
self.driver.back()
#注册不输入密码
def LoginFNPRegister(self,name,username,repassword):
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys(name)
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR, "#rePassword").send_keys(repassword)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
time.sleep(1)
AllDriver.screenshot()
text = self.driver.find_element(By.CSS_SELECTOR,"#password_help > div").text
assert text == "密码是必填项!"
self.driver.back()
#注册不输入确认密码
def LoginFNRRegister(self,name,username,password):
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR, "#name").send_keys(name)
self.driver.find_element(By.CSS_SELECTOR, "#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR, "#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
time.sleep(1)
AllDriver.screenshot()
text = self.driver.find_element(By.CSS_SELECTOR,"#rePassword_help > div").text
assert text == "请再次输入密码"
self.driver.back()
#密码少于6位,用户存在,确认密码和输入密码不一致
def LoginF3Register(self,name,username,password,repassword):
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a").click()
self.driver.find_element(By.CSS_SELECTOR,"#name").send_keys(name)
self.driver.find_element(By.CSS_SELECTOR,"#username").send_keys(username)
self.driver.find_element(By.CSS_SELECTOR,"#password").send_keys(password)
self.driver.find_element(By.CSS_SELECTOR,"#rePassword").send_keys(repassword)
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > button > span").click()
time.sleep(1)
AllDriver.screenshot()
if len(password) < 6 :
text = self.driver.find_element(By.CSS_SELECTOR,"#password_help > div").text
assert text == "密码至少6位"
elif repassword != password :
text = self.driver.find_element(By.CSS_SELECTOR,"#rePassword_help > div").text
assert text == "两次密码不一致!"
else :
text = self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___1k5Ro > div.main___19HXK > div > form > div.ant-alert.ant-alert-error > div > div").text
assert text == "账号已存在"
self.driver.back()
#成功测试用例
login =Login()
# login.LoginSucTest("fhl666","fhl666")
# #1、都不输入用例
# login.LoginFulTest()
# #2、不输入密码
# login.LoginFulTest("fhl666")
# #3、正确的账号错误的密码
# login.LoginFulTest("fhl666","fhl661")
# #4、错误的账号正确的密码
# login.LoginFulTest("fhl661","fhl666")
# #5、错误的账号错误的密码
# login.LoginFulTest("fhl661","fhl661")
# #6、不输入账号
# login.LoginFulUTest("fhl666")
# #7、不点登录
# login.LoginFulFTest("fhl666","fhl661")
# #8、注册成功
# login.LoginSucRegister("666",time.time(),"666666","666666")
# #9、注册不输入姓名
# login.LoginFNNRegister(time.time(),"666666","666666")
# #10、注册不输入账号
# login.LoginFNURegister("666","666666","666666")
# #11、注册不输入密码
# login.LoginFNPRegister("666",time.time(),"666666")
# #12、注册不输入确认密码
# login.LoginFNRRegister("666",time.time(),"666666")
# #13、注册密码少于6位
# login.LoginF3Register("666",time.time(),"666","666")
# #14、确认和输入密码不一致
# login.LoginF3Register("666",time.time(),"666666","666661")
# #15、注册用户账号存在
# login.LoginF3Register("666","fhl666","666666","666666")
# login.Login_quit()
首页:
import time
from selenium.webdriver.common.by import By
from comom.Utils import AllDriver
#问卷首页
class List :
url = "http://8.155.1.153:8081/home"
driver = AllDriver.driver
def __init__(self) :
self.driver.get(self.url)
#成功登录的首页
def SucLoginList(self):
#首页
self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > aside > div > div:nth-child(1) > ul > li.ant-menu-item.ant-menu-item-selected.ant-menu-item-only-child.ant-pro-base-menu-menu-item > span > div")
#我的练习
self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > aside > div > div:nth-child(1) > ul > li.ant-menu-item.ant-menu-item-selected.ant-menu-item-only-child.ant-pro-base-menu-menu-item > span")
#题库中心
self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > aside > div > div:nth-child(1) > ul > li:nth-child(4) > div > span > div > span.ant-pro-base-menu-item-text.ant-pro-base-menu-item-text-has-icon")
#系统管理
self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > aside > div > div:nth-child(1) > ul > li:nth-child(6) > div > span > div")
AllDriver.screenshot()
#登录失败的首页
def FulLoginList(self):
#用户名
self.driver.find_element(By.CSS_SELECTOR,"#username")
#密码
self.driver.find_element(By.CSS_SELECTOR, "#password")
#注册
self.driver.find_element(By.CSS_SELECTOR,"#root > div > div.content___2zk1- > div.main___x4OjT > div > form > div:nth-child(4) > a" )
#登录
self.driver.find_element(By.CSS_SELECTOR, "#root > div > div.content___2zk1- > div.main___x4OjT > div > form > button")
AllDriver.screenshot()
def ExitLogin(self):
self.driver.find_element(By.CSS_SELECTOR,"#sk-layout > div > div > section > div.ant-pro-layout-container > header.ant-layout-header.ant-pro-layout-header.ant-pro-layout-header-fixed-header.ant-pro-layout-header-mix.ant-pro-layout-header-fixed-header-action.ant-pro-layout-header-header > div > div.ant-pro-global-header-right-content > div > div > div > div:nth-child(2)").click()
self.driver.find_element(By.CSS_SELECTOR,"body > div:nth-child(7) > div > div > ul > li:nth-child(4) > span.ant-dropdown-menu-title-content").click()
list = List()
创建问卷:
import time
from selenium.webdriver.common.by import By
from comom.Utils import AllDriver
#调查问卷测试
class Survey:
driver = AllDriver.driver
url = "http://8.155.1.153:8081/survey/new?mode=survey"
def __init__(self):
self.driver.get(self.url)
#成功创造问卷调查
def SurveyContent(self):
#标题
self.driver.find_element(By.CSS_SELECTOR,"#editorContent > div > div > div.header > div.header-content > div.sc-aXZVg.LyTMt.title.quill-container.not-focus > div > pre > div.ql-editor > p")
#预览
self.driver.find_element(By.CSS_SELECTOR,"#editor > div.survey-main-panel > div.survey-main-panel-toolbar > div:nth-child(2) > div > button:nth-child(3) > span")
#保存
self.driver.find_element(By.CSS_SELECTOR,"#editor > div.survey-main-panel > div.survey-main-panel-toolbar > div:nth-child(2) > div > button.ant-btn.ant-btn-primary.ant-btn-sm > span")
#提取
self.driver.find_element(By.CSS_SELECTOR,"#editorContent > div > div > div.footer > div.title > div > div > pre > div.ql-editor > p")
#截图
AllDriver.screenshot()
def SucCreateSurvey(self):
#输入标题
text = time.time()
self.driver.find_element(By.CSS_SELECTOR,"#editorContent > div > div > div.header > div.header-content > div.sc-aXZVg.LyTMt.title.quill-container.not-focus > div > pre > div.ql-editor > p").send_keys(text)
#添加类型
# self.driver.find_element(By.CSS_SELECTOR,"#rc-tabs-4-panel-1 > div > div > dl:nth-child(3) > div > div:nth-child(1) > dd > div").click()
#点击保存
self.driver.find_element(By.CSS_SELECTOR,"#editor > div.survey-main-panel > div.survey-main-panel-toolbar > div:nth-child(2) > div > button.ant-btn.ant-btn-primary.ant-btn-sm > span").click()
AllDriver.screenshot()
8、项目测试bug简述
9、测试结论
本次测试通过,测试耗时2天,测试方法包含:性能测试,界面测试,自动化测试
在功能方面,核心功能均能正常实现,如登录功能,注册功能,创建问卷功能,操作流程符合用户预期,但部分细节功能存在小瑕疵,例如偶尔会有卡顿,不过不影响整体使用。
自动化测试中,测试了,登录,注册,首页,问卷详情页,其中功能都正常通过
总体而言,问卷调查基本达到预期目标,具备上线条件。但针对测试中发现的问题,建议开发团队尽快修复优化,尤其是功能细节方面,以提升用户体验,确保产品稳定、高效运行。