测试项目
具体的测试方案请参考测试 - 飞书云文档 (feishu.cn),这里仅报告测试矩阵及结果。
前端测试
前端主要测试兼容性和内容正确性。
测试条例\操作系统,浏览器,设备 | Windows Microsoft Edge 版本 112.0.1722.58(正式版本)(64 位) | Windows Google Chrome 版本 112.0.5615.138(正式版本)(64 位) | MACOS Apple Safari 版本 16.4 (18615.1.26.11.23) | Android Microsoft Edge 版本 110.0.1587.66 |
---|---|---|---|---|
页面元素检查,是否还原原型 | 通过 | 通过 | 通过 | 元素布局错乱 |
页面布局、缩放适应度检查 | 缩放25%, 50%元素折叠 | 缩放25%, 50%元素折叠 | 缩放25%, 50%,75%元素折叠 | 元素布局错乱 |
主页面测试 | 通过 | 通过 | 通过 | - |
Web IDE测试 | 通过 | 通过 | 通过 | - |
触发器页面 | 通过 | 通过 | 通过 | - |
日志查询页面 | 通过 | 通过 | 通过 | - |
因Android端元素布局错乱,且前端未对小设备做适配,因此我们未完成全部测试。
后端测试
单元测试
单元测试在开发过程中编写,用于保证后续开发不会影响之前接口的正确性。我们使用Github Actions
将单元测试运行集成进ci中,自动生成,发布测试报告。最近开发版本的单元测试报告请参考Codecov。
我们单元测试的覆盖率达到了90.32%,覆盖了大部分服务的api
。
场景测试
我们考虑两个较为常见的使用场景,进行部署测试。
场景1—开发入门初学者/爱好者
姓名 | 守好嘉 |
---|---|
年龄 | 18 |
用户市场比例 | 30% |
用户重要性 | 较为重要 |
典型场景 | 刚刚学了一门新语言,想用它来干点什么? |
动机 | 初学编程,希望能做出一些应用的东西 |
困难 | 只会一些基本的语法,距离能有效果的应用很远 |
偏好 | 希望能得到一些正反馈 |
特点 | 没有钱,不大能接受付费,但是是很好的宣传者 |
守好嘉想尝试网络API请求,于是编写了以下代码,并启动云函数服务。
def handler(request):
return "Hello, Sim-Dep!"
之后,FaaS平台为其分配了一个用于测试的API:
Get call/ShouHaoJia/CallFunction
守好嘉使用Postman软件测试云函数的部署情况,并得到了如下的返回结果。
守好嘉非常开心,因为他在无需配置服务器的情况下,踏出了学习后端的第一步!
场景2-邮件整理
姓名 | 支支 |
---|---|
年龄 | 22 |
用户市场比例 | 20% |
用户重要性 | 很重要 |
典型场景 | 使用FaaS平台简单部署一些静态页面或自动化任务 |
动机 | 会一点例如python之类的语言,有例如页面展示,自动化任务等需求 |
困难 | 没有动力和机会学习开发框架以及运维方法。 |
偏好 | 希望能尽可能简单地完成任务 |
特点 | 希望将类似平台作为生产力工具,占比较大而且有付费能力 |
支支首先编写了一个python脚本用于电子邮件归档她北航邮箱里邮件,并将整理后的邮件发送给自己。
import imaplib
import smtplib
import os
from email.message import EmailMessage
from email import message_from_bytes
from email.header import decode_header
# IMAP服务器配置
IMAP_SERVER = 'mail.buaa.edu.cn'
IMAP_PORT = 993
IMAP_USER = 'zhizhi@buaa.edu.cn'
IMAP_PASSWORD = 'zhizhi_zui_ke_ai'
# SMTP服务器配置
SMTP_SERVER = 'smtp.buaa.edu.cn'
SMTP_PORT = 587
SMTP_USER = 'zhizhi@buaa.edu.cn'
SMTP_PASSWORD = 'zhizhi_zui_ke_ai'
# 邮件配置
FROM_EMAIL = 'zhizhi@buaa.edu.cn'
TO_EMAIL = 'zhizhi@buaa.edu.cn'
SUBJECT = '[Sim-Dep FaaS]:邮件整理服务'
BODY = 'Sim-Dep FaaS:这是整理好的邮件,请查收。'
ATTACHMENT_DIR = ''
def decode(message_info):
dh = decode_header(message_info)
return dh[0][0].decode(dh[0][1]) if dh[0][1] else dh[0][0]
# 连接IMAP服务器并获取邮件
def get_emails():
with imaplib.IMAP4_SSL(IMAP_SERVER, IMAP_PORT) as mail:
mail.login(IMAP_USER, IMAP_PASSWORD)
mail.select('inbox')
typ, data = mail.search(None, 'UNSEEN')
mail_ids = data[0].split()
emails = []
for mail_id in mail_ids:
typ, data = mail.fetch(mail_id, '(RFC822)')
emails.append(message_from_bytes(data[0][1]))
return emails
# 将整理好的邮件发送回邮箱
def send_emails(emails):
with smtplib.SMTP_SSL(SMTP_SERVER, SMTP_PORT) as smtp:
smtp.ehlo()
smtp.login(SMTP_USER, SMTP_PASSWORD)
for email in emails:
msg = EmailMessage()
msg['From'] = FROM_EMAIL
msg['To'] = TO_EMAIL
msg['Subject'] = SUBJECT
msg.set_content(BODY)
attachment_path = os.path.join(ATTACHMENT_DIR,
f'{decode(email["subject"]).replace("/", "").replace(" ", "")}.eml')
with open(attachment_path, 'wb') as f:
f.write(email.as_bytes())
with open(attachment_path, 'rb') as f:
attachment_data = f.read()
msg.add_attachment(attachment_data, maintype='application', subtype='octet-stream',
filename=attachment_path)
smtp.send_message(msg)
os.remove(attachment_path)
def handler(request):
emails = get_emails()
send_emails(emails)
之后支支将其提交到FaaS平台并配置了定时触发器,在每天的早上八点和晚上八点自动整理上一段时间邮件。在部署完成后的第一天,支支的邮箱里收到了以下的类似邮件。这让她十分高兴,这下终于不用时时刻刻注意邮箱中是否有新邮件了。
性能测试
负载测试
该部分使用JMeter,对已上线模块的高频访问接口进行压力测试。
- 这里获取函数列表的接口在1000并发量的花费时间小于100并发量,我们根据错误码,推测这里是因为大量请求被服务端关闭,因此接口响应速度较快。
- 除此之外,用户登录接口的1000并发量费时和异常率都较高。我们分析相应错误码后,发现大部分为请求超时,初步推断这里是对用户进行鉴权操作时,涉及Redis和Mysql两个数据库的多次增删查改,降低了性能。
用户管理服务部分测试报告展示
压力测试
该部分主要测试服务的稳定性。对于在线人数的测试条例,由于模拟多个用户存在的行为较为复杂,我们使用JMeter启动相应人次的线程,通过每隔10s访问函数查询完成测试的模拟。对于计算服务运行压力测试,我们在测试账户上同时启动相应人次的云函数,并通过python脚本不定时访问云函数的链接判断云函数的稳定性。
我们的结论是在高并发的负载测试下,我们的服务稳定性较差,仅可满足并发量为100的服务请求。但在长时间的压力测试下,我们的平台具有较好的稳定性。因此beta版本的优化目标为增加峰值高并发的处理能力。
问题回答
测试过程中发现了多少BUG
我们将测试过程中的BUG共享到飞书文档中。
场景测试
参考后端测试下的场景测试,以及我们发布的最佳实践部分
- QuickStart:跟我一起来部署第一个函数吧 - 飞书云文档 (feishu.cn)
- SimDep FaaS:邮件整理日报
测试矩阵
测试矩阵请参考前端测试中的兼容性测试。
出口条件
Alpha版本我们立足于开发出一个可用、可测、预期功能完善的软件,因此会对细节与不紧急的bug有一定的容忍度。
我们认为可以暂时忽略或转换以下要求:
- 具有简洁,美观的前端页面 ——> 具备功能齐全的前端页面
- 体现良好的用户交互设计,上手简单 ——> 提供功能文档、教程
- 稳定、满足高并发的服务系统 ——> 面向小规模用户服务
我们定义该版本的软件需要满足以下条件:
- 通过基本的功能测试,无高优先级bug,无重大功能缺失。
- 通过基本的兼容性测试,适配高频浏览器应用和主流的PC环境。
- 通过基本的场景测试,能够部署上述典型的应用场景。
- 通过基本的压力测试,面向小规模用户和并发量下提供稳定、可靠和高效的服务。
因此,对于上述条件。我们的软件虽然未能通过所有的测试情况,但在满足基本可用的前提下,已经完成了上述目标。因此作为测试人员,我认为我们的项目达到了alpha版本的发布条件。