# code **Repository Path**: git_lixin/code ## Basic Information - **Project Name**: code - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-27 - **Last Updated**: 2025-06-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: C语言 ## README ### 【测试报告】论坛系统 ### **1、项目背景** 1.1通过自动化测试方法完成对论坛系统的测试 1.2论坛系统前端页面包括登录、发布文章、个人信息、搜索文章、文章分类等 1.3同时本系统使用了数据库来存储相关数据 1.4注册登录仅实现了将用户注册的账号及密码存储进数据库中,所有用户使用同一个数据库 1.5本次测试主要使用了Selenium进行自动化测试,并使用了JavaScript注入、Actions模拟等方式进行了测试 ### **2、测试安排** \| 测试内容 | 测试方法 | 测试结果 | |登录界面|自动化测试|成功| |论坛首页|自动化测试|成功| |文章编辑页|自动化测试|成功| |文章详情页|自动化测试|成功| ### **3、测试概述** 在Win11下的版本为132.0.2957.127 (正式版本) (64 位)的Edge浏览器上进行业务功能测试 使用的编辑器为PyCharm,版本为Python 3.12 **4、测试用例** ![输入图片说明](%E8%AE%BA%E5%9D%9B%E6%B5%8B%E8%AF%95%E6%80%9D%E7%BB%B4%E5%AF%BC%E5%9B%BE.png) **5、自动化测试** 5.1覆盖模块:登录、主页、搜索、发布、内容详情 5.2自动化代码:《代码》 5.3自动化测试用例数量:22 5.4结果:已基本完成测试。 5.5是否完成测试:是 **6、是否存在未完成问题:** 未登录状态无法完成测试 原因:未登录状态不能进入论坛 文章修改无法完成 原因:暂未明确,已使用多种方式均无法完成 **7、测试结论** 本次对论坛系统的自动化测试,在登录、论坛首页、文章编辑页、文章详情页等核心功能模块上取得了成功,覆盖了登录、主页、搜索、发布、内容详情等主要业务流程,共执行 22 条自动化测试用例,基本验证了系统的可用性。然而,仍存在两个较为突出的问题:其一,系统未对未登录状态下的功能进行有效开放和测试,导致无法验证如游客浏览文章、匿名评论等潜在功能,可能影响用户体验和系统的开放性;其二,文章修改功能无法完成测试,虽原因暂不明确,但此功能作为用户对已发布内容进行修正和优化的重要途径,其异常将直接影响用户使用的便利性和内容管理的准确性。 综合来看,论坛系统在基础功能上表现良好,但在未登录状态的交互设计和文章修改功能实现上存在缺陷。建议开发团队优先排查文章修改功能异常的原因,完善相关代码逻辑;同时,设计合理的未登录状态下的功能权限和交互流程,以提升系统的完整性和用户友好性。后续需对这些未完成功能进行专项测试,确保系统质量达到上线要求 。 ### **项目代码及测试图:** from idna.idnadata import scripts from webdriver_manager.microsoft import EdgeChromiumDriverManager from selenium import webdriver from selenium.webdriver.edge.service import Service from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.wait import WebDriverWait import datetime import time from selenium.webdriver.edge.options import Options as EdgeOptions from selenium.webdriver import ActionChains #安装驱动 edge_ins = EdgeChromiumDriverManager().install() #设置参数配置 driver = EdgeOptions() #添加页面加载策略--平衡 driver.page_load_strategy = 'eager' #创建驱动对象 driver = webdriver.Edge(service=Service(edge_ins)) driver.implicitly_wait(10) #最大化浏览器窗口 driver.maximize_window() try: driver.get("http://127.0.0.1:58080/sign-in.html") # 正常登录 driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan") driver.find_element(By.CSS_SELECTOR,"#password").send_keys("1234") # 异常登录 # 正确账号,错误密码 出现报错 运行时添加屏幕截图,方便观察 # driver.find_element(By.CSS_SELECTOR,"#username").send_keys("zhangsan") # driver.find_element(By.CSS_SELECTOR,"#password").send_keys("12345") ![输入图片说明](PyTestimages/froumAutoTest-2025-06-01-020303.png) ``` # 错误账号,正确密码 出现报错 运行时添加屏幕截图,方便观察 # driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan12") # driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234") ``` ![输入图片说明](PyTestimages/froumAutoTest-2025-06-01-020428.png) # 错误账号,错误密码 出现报错 运行时添加屏幕截图,方便观察 # driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan12") # driver.find_element(By.CSS_SELECTOR, "#password").send_keys("12345") ![输入图片说明](PyTestimages/froumAutoTest-2025-06-01-020813.png) ``` # # 不输入账号 有警告提示 # driver.find_element(By.CSS_SELECTOR, "#username").send_keys("") # driver.find_element(By.CSS_SELECTOR, "#password").send_keys("1234") # driver.find_element(By.CSS_SELECTOR,"#submit").click() # time.sleep(1) # text = driver.find_element(By.CSS_SELECTOR,"#signInForm > div.mb-3 > div").text # print(text) # assert text == "用户名不能为空" ``` ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-165634.png) # # 不输入密码 有警告提示 # driver.find_element(By.CSS_SELECTOR, "#username").send_keys("zhangsan") # driver.find_element(By.CSS_SELECTOR, "#password").send_keys("") # driver.find_element(By.CSS_SELECTOR, "#submit").click() # time.sleep(1) # text = driver.find_element(By.CSS_SELECTOR, "#signInForm > div.mb-2 > div > div").text # print(text) # assert text == "密码不能为空" driver.find_element(By.CSS_SELECTOR, "#submit").click() time.sleep(1) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-165758.png) # 正常登录下查看是否可以查询到个人信息 可以查询到但是需要将页面最大化23行已补充 # text = driver.find_element(By.CSS_SELECTOR, "#index_nav_nickname").text # print(text) # assert text == "zhangsan" ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-082328.png) # 正常登录下查看文章列表是否正确展示 可以找到 # text = driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div > div > div.col > div.text-truncate").text # print(text) # assert text == "这是用来自动化测试的文章" ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-082733.png) # 正常登录下查看文章内容是否正确展示 可以找到 # driver.find_element(By.CSS_SELECTOR, "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # time.sleep(2) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-084005.png) # 正常登录下查看文章分类是否正确展示 可以通过点击的方式找到分类 # driver.find_element(By.CSS_SELECTOR,"#topBoardList > li:nth-child(2) > a").click() # time.sleep(2) # driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # time.sleep(2) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-09-121353.png) # 正常登录下搜索是否可以完成 可以完成搜索 # input_box = driver.find_element(By.CSS_SELECTOR,"body > div.page > header.navbar.navbar-expand-md.navbar-light.d-print-none > div > div > div.nav-item.d-none.d-md-flex.me-3 > div > form > div > input") # input_box.send_keys("这是用来自动化测试的文章") # input_box.send_keys(Keys.RETURN) # time.sleep(2) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-095146.png) # 正常登录下发布按钮是否可以点击 发布按钮可以点击 # 但是由于输入框 CodeMirror 属于特殊的富文本编辑器,它并非普通的 textarea 元素,所以不能直接用send_keys()方法 # 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() # driver.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys("这是一个自动化编写的文章") # # 输入文章内容(使用JavaScript方法) # # 显示等待 # editor = WebDriverWait(driver, 10).until( # EC.presence_of_element_located((By.CSS_SELECTOR, "#edit-article .CodeMirror")) # ) # editor.click() # script = """ # var editor = document.querySelector('#edit-article .CodeMirror').CodeMirror; # editor.setValue('这是一个自动化编写的文章'); # """ # driver.execute_script(script) # #由于按钮不在当前屏幕展示的范围内所以需要先定位到元素位置 # submit_button = WebDriverWait(driver,10).until( # EC.presence_of_element_located((By.CSS_SELECTOR,"#article_post_submit")) # ) # time.sleep(2) # #滚动到元素位置 # driver.execute_script("arguments[0].scrollIntoView()",submit_button) # time.sleep(2) # #此时执行点击按钮 # submit_button.click() # time.sleep(2) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-164942.png) # # 查看未登录状态下是否有警告信息 无法访问到未登录页面!!! # driver.get("http://127.0.0.1:58080/index.html") # time.sleep(1) # # 正常登录看发布文章时不点击发布按钮 文章未保存且未发布 # 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() # driver.find_element(By.CSS_SELECTOR,"#article_post_title").send_keys("这是一个自动化编写的文章") # # 输入文章内容(使用JavaScript方法) # # 显示等待 # editor = WebDriverWait(driver, 10).until( # EC.presence_of_element_located((By.CSS_SELECTOR, "#edit-article .CodeMirror")) # ) # editor.click() # script = """ # var editor = document.querySelector('#edit-article .CodeMirror').CodeMirror; # editor.setValue('这是一个自动化编写的文章'); # """ # driver.execute_script(script) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-04-170538.png) # # 正常登录不添加标题 出现提示,需要添加标题 # 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() # editor = WebDriverWait(driver,10).until( # EC.presence_of_element_located((By.CSS_SELECTOR,"#edit-article .CodeMirror")) # ) # editor.click() # script = """ # var editor = document.querySelector('#edit-article .CodeMirror').CodeMirror; # editor.setValue('这是一个自动化编写的文章') # """ # driver.execute_script(script) # submit_button = WebDriverWait(driver,10).until( # EC.presence_of_element_located((By.CSS_SELECTOR,"#article_post_submit")) # ) # #滚动到元素位置 # driver.execute_script("arguments[0].scrollIntoView()",submit_button) # time.sleep(2) # WebDriverWait(driver,10).until( # EC.element_to_be_clickable((By.CSS_SELECTOR,"#article_post_submit")) # ).click() ![输入图片说明](PyTestimages/froumAutoTest-2025-06-05-113745.png) # # 正确登录下文章详情页的标题是否可见 可见 # driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # text = driver.find_element(By.CSS_SELECTOR,"#details_article_content_title").text # print(text) # assert text == "这是一个自动化编写的文章" ![输入图片说明](PyTestimages/froumAutoTest-2025-06-05-114905.png) # # 正确登录下文章详情页的内容是否可见 可见 # driver.find_element(By.CSS_SELECTOR, # "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # text = driver.find_element(By.CSS_SELECTOR, "#details_article_content > p").text # print(text) # assert text == "这是一个自动化编写的文章" ![输入图片说明](PyTestimages/froumAutoTest-2025-06-05-115109.png) # # 正确登录下文章详情页的发布时间是否可见 可见 # driver.find_element(By.CSS_SELECTOR, # "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # text = driver.find_element(By.CSS_SELECTOR, "#details_article_createTime").text # print(text) # assert text == "2025-06-04 08:49:40" ![输入图片说明](PyTestimages/froumAutoTest-2025-06-05-115246.png) # # 正确登录下文章详情页的发布者名字是否可见 可见 # driver.find_element(By.CSS_SELECTOR, # "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # text = driver.find_element(By.CSS_SELECTOR, "#article_details_author_name").text # print(text) # assert text == "zhangsan" ![输入图片说明](PyTestimages/froumAutoTest-2025-06-05-115353.png) # # 文章评论是否可回复 # driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # revert_button = WebDriverWait(driver,10).until( # EC.presence_of_element_located(By.CSS_SELECTOR,"") # ) #------------------------------------------------------------------------------------------------------------------------- # 正确登录下已发布的文章是否可以被修改 不能进入编辑区,手动操作可行 # 使用了javaScript注入已经Actions模拟点击方式均不能完成 # 与下方创建文章代码进行对并,并无区别,但无法完成修改 # driver.find_element(By.CSS_SELECTOR, # "#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # # 点击编辑按钮 # driver.find_element(By.CSS_SELECTOR, "#details_artile_edit > span").click() # # # 定位并操作编辑器 # editor = WebDriverWait(driver, 10).until( # EC.presence_of_element_located((By.CSS_SELECTOR, "#edit-article .CodeMirror")) # ) # # editor.click() # # actions = ActionChains(driver) # actions.move_to_element(editor).click().perform() # # # 修改文章内容 # script = """ # var editor = document.querySelector("#edit-article .CodeMirror").CodeMirror; # editor.setValue('这是修改后的内容'); # """ # driver.execute_script(script) # # # 定位正确的提交按钮(假设按钮ID为 article_post_submit) # submit_button = WebDriverWait(driver, 10).until( # EC.element_to_be_clickable((By.CSS_SELECTOR, "#edit_article_submit")) # ) # # # 滚动到提交按钮并点击 # driver.execute_script("arguments[0].scrollIntoView();", submit_button) # time.sleep(1) # 确保滚动完成 # ---------------------------------------------------------------------------------------------- # 正常登录下发布按钮是否可以点击 发布按钮可以点击 # 但是由于输入框 CodeMirror 属于特殊的富文本编辑器,它并非普通的 textarea 元素,所以不能直接用send_keys()方法 # 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() # driver.find_element(By.CSS_SELECTOR, "#article_post_title").send_keys("这是一个自动化编写的文章") # # 输入文章内容(使用JavaScript方法) # # 显示等待 # editor = WebDriverWait(driver, 10).until( # EC.presence_of_element_located((By.CSS_SELECTOR, "#edit-article .CodeMirror")) # ) # editor.click() # script = """ # var editor = document.querySelector('#edit-article .CodeMirror').CodeMirror; # editor.setValue('这是一个自动化编写的文章'); # """ # driver.execute_script(script) # # 由于按钮不在当前屏幕展示的范围内所以需要先定位到元素位置 # submit_button = WebDriverWait(driver, 10).until( # EC.presence_of_element_located((By.CSS_SELECTOR, "#article_post_submit")) # ) # time.sleep(2) # # 滚动到元素位置 # driver.execute_script("arguments[0].scrollIntoView()", submit_button) # time.sleep(2) # # 此时执行点击按钮 # submit_button.click() # time.sleep(2) #---------------------------------------------------------------------------------------------------- # 正常登录情况下,文章是否可以正确发布评论 driver.find_element(By.CSS_SELECTOR,"#artical-items-body > div:nth-child(1) > div > div.col > div.text-truncate > a > strong").click() # 定位 CodeMirror 编辑器 editor = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CSS_SELECTOR, "#article_details_reply > div.CodeMirror")) ) # 使用 JavaScript 调用 CodeMirror API 设置内容 script = """ var editor = document.querySelector('#article_details_reply > div.CodeMirror').CodeMirror; editor.setValue('这是要写入的内容'); """ driver.execute_script(script) # 滚动到页面底部 driver.execute_script(""" window.scrollTo({ top:document.body.scrollHeight, behavior: 'smooth' }); """) time.sleep(2) driver.find_element(By.CSS_SELECTOR,"#details_btn_article_reply > span").click() time.sleep(2) ![输入图片说明](PyTestimages/froumAutoTest-2025-06-09-122654.png) # 添加屏幕截图 filename = "froumAutoTest-"+datetime.datetime.now().strftime("%Y-%m-%d-%H%M%S")+".png" driver.save_screenshot("./images/"+filename) except Exception as e: print(f"错误") finally: driver.quit()