系统介绍
云探-基于云计算的高校舆情监控系统是一个基于大数据技术、深度学习算法、云计算技术的综合性管理系统,主要用于收集、分析和监控高校舆情信息,帮助高校管理层及时了解学校在社会上的形象和声誉,及时处理和应对各种舆情事件,保障高校的形象和声誉。
主要有以下的功能:
(1)舆情监测:系统采集各大新闻媒体、社交媒体、微博、微信等网络平台上发布的有关高校的信息,包括新闻、评论、热点话题等,实时监测高校的舆情动态。
(2)舆情分析:系统对收集到的舆情信息进行分析,包括情感分析、主题分析、关键词分析等,帮助高校管理层全面了解舆情事件的背景和发展趋势。
(3)舆情预警:系统根据舆情分析结果,及时发出预警信息,提醒高校管理层注意相关舆情事件的进展情况,及时采取应对措施。
(4)数据统计:系统对舆情监测和分析结果进行数据统计和报表生成,为高校管理层提供数据支持,帮助其更好地了解和掌握高校的舆情形势。
界面截图
- 登录界面
-
方案配置
-
数据总览
- 文章分析
- 评论分析
- 政策分析
- 热点分析
测试用例
- 功能测试
- 界面测试
- 接口测试
- 其他测试
自动化测试脚本
- 功能测试
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 登录函数
def login(username, password):
driver.find_element(By.ID, "username").send_keys(username)
driver.find_element(By.ID, "password").send_keys(password)
driver.find_element(By.ID, "login_button").click()
# 添加方案函数
def add_plan(keyword, threshold):
driver.find_element(By.ID, "add_plan_button").click()
driver.find_element(By.ID, "keyword").send_keys(keyword)
driver.find_element(By.ID, "threshold").send_keys(threshold)
driver.find_element(By.ID, "save_plan_button").click()
# 搜索方案函数
def search_plan(keyword):
driver.find_element(By.ID, "search_plan_input").send_keys(keyword)
driver.find_element(By.ID, "search_plan_button").click()
# 删除方案函数
def delete_plan(plan_name):
driver.find_element(By.ID, "plan_name").click()
driver.find_element(By.ID, "delete_plan_button").click()
# 获取账户函数
def get_account():
driver.find_element(By.ID, "get_account_button").click()
assert driver.find_element(By.ID, "get_account_modal").is_displayed()
# 测试用例
def test_login():
# 账户名、密码正确
login("admin", "123456")
assert WebDriverWait(driver, 10).until(EC.title_is("高校舆情监控系统"))
# 账户名为空
login("", "123456")
assert driver.find_element(By.ID, "username_error").text == "请输入账户名"
# 账户名不存在
login("not_exist", "123456")
assert driver.find_element(By.ID, "username_error").text == "账户名不存在"
# 密码为空
login("admin", "")
assert driver.find_element(By.ID, "password_error").text == "请输入密码"
# 密码位数不正确
login("admin", "123")
assert driver.find_element(By.ID, "password_error").text == "密码长度必须为6-16位"
login("admin", "1234567891011121314")
assert driver.find_element(By.ID, "password_error").text == "密码长度必须为6-16位"
# 密码错误
login("admin", "wrong_password")
assert driver.find_element(By.ID, "password_error").text == "请输入正确的密码"
# 点击获取账户
get_account()
assert driver.find_element(By.ID, "get_account_modal").is_displayed()
def test_plan_config():
# 关键词合规阈值设置
add_plan("keyword1", "10")
assert driver.find_element(By.ID, "plan_name").text == "keyword1"
# 阈值为非数字
add_plan("keyword2", "abc")
assert driver.find_element(By.ID, "threshold_error").text == "请输入数字"
# 阈值为负数
add_plan("keyword3", "-1")
assert driver.find_element(By.ID, "threshold_error").text == "阈值不能为负数"
# 阈值超过范围
add_plan("keyword4", "101")
assert driver.find_element(By.ID, "threshold_error").text == "阈值范围为1-100"
# 搜索方案
search_plan("keyword1")
assert driver.find_element(By.ID, "plan_name").text == "keyword1"
# 搜索关键词不存在
search_plan("not_exist")
assert driver.find_element(By.ID, "search_result").text == "没有找到符合条件的方案"
# 搜索关键词为空
search_plan("")
assert driver.find_element(By.ID, "search_result").text == "请输入搜索关键词"
# 删除方案
delete_plan("keyword1")
assert driver.find_element(By.ID, "plan_list").text == ""
# 未选择方案
delete_plan("")
assert driver.find_element(By.ID, "delete_plan_error").text == "请选择要删除的方案"
# 选择多个方案
driver.find_element(By.ID, "plan_name1").click()
driver.find_element(By.ID, "plan_name2").click()
delete_plan("")
assert driver.find_element(By.ID, "delete_plan_error").text == "只能选择一个方案进行删除"
def test_content_analysis():
# 内容展示
content = """
这是测试内容,包含敏感词“测试”。
"""
# 模拟内容展示
driver.find_element(By.ID, "content").send_keys(content)
# 断言内容是否显示
assert driver.find_element(By.ID, "content").text == content
# 断言敏感词是否高亮显示
assert driver.find_element(By.ID, "keyword").get_attribute("class") == "highlight"
# 断言内容支持分页
driver.find_element(By.ID, "next_page").click()
assert driver.find_element(By.ID, "content").text != content
# 断言内容支持排序
driver.find_element(By.ID, "sort_by_time").click()
assert driver.find_element(By.ID, "content").text != content
# 链接有效性
link = "https://www.baidu.com"
# 模拟链接
driver.find_element(By.ID, "link").send_keys(link)
# 断言链接可以正常打开
driver.find_element(By.ID, "open_link").click()
assert driver.current_url == link
# 断言链接跳转到正确页面
driver.find_element(By.ID, "link").send_keys("")
driver.find_element(By.ID, "open_link").click()
assert driver.current_url == "https://www.google.com"
# 断言链接已失效
driver.find_element(By.ID, "link").send_keys("")
driver.find_element(By.ID, "open_link").click()
assert driver.find_element(By.ID, "link_error").text == "链接已失效"
# 断言链接跳转到错误页面
driver.find_element(By.ID, "link").send_keys("")
driver.find_element(By.ID, "open_link").click()
assert driver.find_element(By.ID, "link_error").text == "链接跳转到错误页面"
# 情感极性分析
content1 = ""
content2 = ""
# 模拟不同情感极性的内容
driver.find_element(By.ID, "content1").send_keys(content1)
driver.find_element(By.ID, "content2").send_keys(content2)
# 断言情感极性分析的准确性
assert driver.find_element(By.ID, "sentiment1").text == "正面"
assert driver.find_element(By.ID, "sentiment2").text == "负面"
# 时间戳准确性
timestamp1 = "2023-11-16 12:00:00"
timestamp2 = "2023-11-17 12:00:00"
# 模拟不同时间戳的内容
driver.find_element(By.ID, "timestamp1").send_keys(timestamp1)
driver.find_element(By.ID, "timestamp2").send_keys(timestamp2)
# 断言时间戳是否正确显示
assert driver.find_element(By.ID, "time1").text == timestamp1
assert driver.find_element(By.ID, "time2").text == timestamp2
- 接口测试
import unittest
class TestAPI(unittest.TestCase):
def test_hotspot_analysis(self):
# 正向用例
params = {
"token": "",
"text": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()["success"], True)
# token为空
params = {
"text": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "token is required")
# token错误
params = {
"token": "",
"text": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 401)
self.assertEqual(response.json()["error"], "invalid token")
# 参数为空
response = requests.get("")
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "parameters are required")
# 参数过多
params = {
"token": "",
"text": "",
"extra_param": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "invalid parameters")
# 参数错误
params = {
"token": "",
"text": 123
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "invalid parameters")
def test_comment_analysis(self):
# 正向用例
params = {
"token": "",
"url": "",
"comment_id": 123
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()["success"], True)
# token为空
params = {
"url": "",
"comment_id": 123
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "token is required")
# token错误
params = {
"token": "",
"url": "",
"comment_id": 123
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 401)
self.assertEqual(response.json()["error"], "invalid token")
# 参数为空
response = requests.get("")
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "parameters are required")
# 参数过多
params = {
"token": "",
"url": "",
"comment_id": 123,
"extra_param": "extra_value"
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "invalid parameters")
# 参数错误
params = {
"token": "",
"url": "",
"comment_id": "abc"
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "invalid parameters")
def test_article_analysis(self):
# 正向用例
params = {
"token": "",
"url": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json()["success"], True)
# token为空
params = {
"url": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "token is required")
# token错误
params = {
"token": "invalid_token",
"url": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 401)
self.assertEqual(response.json()["error"], "invalid token")
# 参数为空
response = requests.get("")
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "parameters are required")
# 参数过多
params = {
"token": "",
"url": "",
"extra_param": "extra_value"
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "invalid parameters")
# 参数错误
params = {
"token": "",
"url": ""
}
response = requests.get("", params=params)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json()["error"], "invalid parameters")