一、项目介绍
atstudy项目是一款在线教学管理系统,用于支持在线班的教学。结合该项目开展项目实训,将系统测试流程、web测试技术、web测试工具、移动app测试技术、移动app测试工具等之前学习的内容在实训中进行消化和掌握,帮助学员积累完整的项目经验。整个项目实训会按照标准的系统测试流程来进行开展,此文档是课程的实验报告。
课程环境
- ubuntu系统
- 云手机
- atstudy应用
- selenium
- fiddler
- solopi
- monkey
- 阿里云
学习收获
- 加深对系统测试流程的理解;
- 掌握如何在实际项目中编写系统测试用例;
- 掌握如何在实际项目中提交缺陷报告;
- 掌握selenium工具在实际项目中的应用;
- 掌握fiddler工具在实际项目中的应用;
- 掌握移动app测试工具在实际项目中的应用。
- 理解如何在实际项目开展性能测试。
任务1:回顾测试工作内容
【任务目标】
回顾测试工作内容,为接下来的项目实训做准备。
无论将来遇到什么项目,需要完成的测试工作都是类似的。
制定测试计划
制定测试方案(可选)
编写测试用例
执行测试用例
1.1 制定测试计划
测试计划是从管理角度对整个测试工作进行规划和控制。
测试计划考虑:
- 人员分工(将最重要的工作交给最信任的人)
- 测试范围(有弹性)
- 时间进度
1.2 制定测试方案
测试方案是从技术角度对整个测试工作进行规划和控制。
要不要做自动化测试?使用什么测试工具?
是否需要部署测试环境?测试环境如何部署?
测试用例如何设计?使用怎样的测试用例设计方法?
1.3 编写测试用例
重点是测试用例的思路。目前一般测试用例不会写的很细。
测试用例可以在excel中编写,也可以在测试管理工具中编写,还可以使用思维导图软件编写,这里选用最常用的excel方式。
1.4 执行测试用例
可以包含:
搭建测试环境
服务器环境一般借助于docker来部署,app测试环境一般用真机。
执行测试用例
提交缺陷报告
编写测试记录/测试报告
任务2:了解项目背景
【任务目标】
了解为什么会有这个项目;
了解项目的时间节点;
了解项目的人员配置;
了解项目的技术架构。
【项目历史】
atstudy项目开始于2019年3、4月份。第一个正式版本发布于2020年3、4月份。网校开始于2016、2017年,当时使用的是购买的系统edusoho。直播实际使用的是展视互动的系统。
早期的网校=edusoho+展视互动
早期的网校无法有效的进行定制,不少功能不能完全满足使用需要。
atstudy项目启动后,经历了技术选型、需求收集整理等环节。
当前的网校=atstudy+腾讯云(录播)+保利威(直播)
概述:
【人员配置】 | 后端开发2-3人 前端开发4-5人 产品经理1人 美工1-2人 测试3-4人 |
【技术架构】 | 后端c# 前端node.js 数据库mysql web服务器nginx 使用redis缓存用户信息和心跳数据 |
包含的子系统 | 本次测试会涉及到前3个
|
任务3:了解业务知识
【任务目标】
了解前台业务功能;
了解后台业务功能;
了解android应用业务功能。
【基本信息】
业务知识=用户+操作
前台测试环境:train.atstudy.com
后台测试环境:train-manage.atstudy.com
后台管理员用户/前台用户:19999999999/a123456
3.1 前台业务功能
前台系统的用户包含学生、讲师、助教、班主任等。
- 注册、登录、搜索课程、浏览课程、购物车、购买课程
- 学习中心,学生使用,学习课程、收藏/取消收藏课程、笔记查看、问答查看、完成作业、参加考试
- 个人中心,个人信息修改
- 消息中心,消息通知
- 教学中心,讲师、助教、班主任使用,包含课程管理、作业管理、考试管理、问答管理、销售管理。
讲师:查看课程资料、批改作业、批改考卷、回答问题、查看自己课程销售情况
助教:查看课程资料、批改作业、批改考卷、回答问题
班主任:查看课程资料、查看作业、查看考卷、查看问答
3.2 后台业务功能
后台给运营人员使用。
包含:
- 课程模块,包含直播课、录播课和套课的管理。
无论是直播课还是录播课,都是:课程-教学计划-课时-课时任务。
教学计划对应班级,直播、录播、作业、考试等都属于课时任务。 - 运营模块,主要包含订单管理、打折活动管理、优惠券管理
- 教学模块,包含学员管理、讲师管理、各种学习相关的管理
- 题库模块,在我的题库中添加题目,在题目审核中审核通过进入题目仓库。
- 系统设置,主要包含角色管理和账号管理。对于每个账户,有身份和角色,身份对应用户类型,角色对应后台权限。
3.3 android应用业务功能
adb install /home/project/atstudy.apk |
实际工作中app往往没有任何功能的描述和介绍,需要参考web端功能,该app仅供学生使用。app端通常比web前台功能要简单。atstudy应用主要包含:
- 首页模块,主要包含课程的查询和查看。
- 我的学习模块,主要包含课程的学习,包括看直播/录播、记录笔记、完成作业、提交问题、参加考试等。
- 账号模块,主要是订单和优惠券的查看、个人信息编辑等。
二、编写系统测试计划
- 加深对系统测试流程的理解;
- 掌握如何在实际项目中编写系统测试用例;
- 掌握如何在实际项目中提交缺陷报告;
- 掌握selenium工具在实际项目中的应用;
- 掌握fiddler工具在实际项目中的应用;
- 掌握移动app测试工具在实际项目中的应用。
- 理解如何在实际项目开展性能测试。
任务1:熟悉被测系统
【任务目标】
熟悉被测系统后台功能;
熟悉被测系统前台功能;
熟悉被测系统android应用功能。
1.1 熟悉后台功能
使用19999999999/a123456登录后台。
以下操作中的关键操作需要截图并配上文字提交到实验报告中。
1.1.1 题库模块添加题目
我的题库子模块新建问答题并提交审核。
点击添加题目。
点击提交评审。
题目审核子模块审核通过提交的问答题,通过后会出现在题目仓库中。
1.1.2 教学模块-试卷管理添加试卷
新建试卷并添加单元,单元名称可以为问答题。
单元上添加试题,选择前面题库中添加的问答题。
给试题设置分值,点击提交。
1.1.3 课程模块-录播课管理添加免费录播课
新建免费录播课。
点击新建录播课,课程封面从/home/project/目录选择。
在默认教学计划上添加课时。
点击进入教学计划。
点击编辑教学计划。
切换到教师标签页,添加当前后台登录用户为讲师。
切换到计划机构标签页,点击添加。
选择类型为课时,添加计划节点。
在课时上新建视频任务,视频封面和视频文件可以从/home/project/目录获取。
点击添加课时任务。
选择视频任务类型。
填入视频任务信息,阶段一般选择课中,点击继续。
切换到上传文件标签页,从/home/project/目录选择视频封面和视频文件。
切换到选择文件标签页,选择上传的视频,点击保存。
在课时上新建作业类型课时任务。
点击作业添加作业类型任务。
填入信息后点击继续。
找到前面添加的试卷添加到任务中,点击保存。
上架该免费录播课并打上标签。
点击上架录播课。
勾选需要打标签的课程,点击标签,选择相应的标签。
1.1.4 课程模块-录播课管理添加付费录播课
新建录播课。
新建一门定价为100元的录播课,课程封面从/home/project/目录选择。
上架该课程。
给该课程打上标签。
1.1.5 运营模块-优惠券管理添加优惠券
新建优惠券
点击新建添加优惠券,注意优惠券数量不能超过500,优惠券金额为100,课程标签必须跟上面付费录播课的标签一致,发放方式选择生成优惠码,使用范围选择全平台通用。
点击发布优惠券。
生成优惠码
点击生成优惠码,记录至少一个优惠码。
1.2 熟悉前台功能
以下操作中的关键操作需要截图并配上文字提交到实验报告中。
先以学生身份进行操作。
1.2.1 注册账号并登录
点击注册,输入手机号完成注册。
使用注册的账号登录。
1.2.2 加入免费课程的学习
进入选课中心。
加入学习
找到前面添加的免费课程,点击立即学习加入学习。
开始学习
进入学习中心,点击开始学习进入该免费课程学习页面。
视频任务的学习。
点击进入视频任务,播放视频。
点击笔记,进入笔记记录页面,填写笔记并保存。复制代码
点击问答,进入问答页面,提交问题。
完成作业任务
点击进入作业任务。
完成作业并提交。
1.2.3 加入付费课程的学习
激活优惠券。
进入个人中心-我的优惠券。
使用前面保存的优惠券激活优惠券,该优惠券用于后续付费课程购买。
购买付费课程。
点击进入选课中心。
找到前面添加的付费课程,点击立即购买。
使用优惠券,使得总金额变为0,点击去结算。
选择微信支付,点击立即支付。
结果提示订单金额不能为0,这实际对应一个bug。
再以讲师身份进行操作,使用19999999999/a123456登录前台。
1.2.4 批改作业
切换身份为讲师。
进入教学中心,切换身份为讲师。
批改作业。
查看作业管理中作业列表,找到需要批改的试卷。
点击未批阅,找到待批阅作业。
点击批阅,填写评分和评语后提交。
1.2.5 回答问题
查看问答列表
进入问答管理-问答列表,查看待回答问题。
回复问题
点击详情,进行回复。
1.3 熟悉android应用功能
adb install /home/project/atstudy.apk |
在云手机上安装atstudy.apk。
以下操作中的关键操作需要截图并配上文字提交到实验报告中。
1.3.1 准备fiddler环境
对首页-搜索功能进行操作,输入关键字进行搜索,操作时用fiddler工具进行抓包,抓取到的请求数据如下。
http://train.atstudy.com/api/consume/CourseSet?pageIndex=1&pageSize=10&title=%E5%85%8D%E8%B4%B9
pageIndex对应搜索结果分页的页码,pageSize对应每页的最大结果数,titile对应输入的关键字。
1.3.3 查看课程
找到前面创建的免费录播课,点击进入,点击加入学习或者开始学习进入课程学习界面。使用fiddler抓取数据,会发现各个标签页分别对应不同的请求和响应数据。
章节标签页对应
http://train.atstudy.com/api/consume/UserLesson?userCourseId=2706
简介标签页对应
http://train.atstudy.com/api/consume/UserLesson?userCourseId=2706
评价标签页对应
http://train.atstudy.com/api/consume/CourseEvaluation?pageIndex=1&pageSize=10&courseSetId=1925
问答标签页对应
http://train.atstudy.com/api/consume/UserQA?pageIndex=1&pageSize=10&courseId=2199
笔记标签页对应
http://train.atstudy.com/api/consume/UserNote?pageIndex=1&pageSize=10&courseId=2199
1.3.4 播放视频
展开课时,点击进入视频类型任务,会发现界面上提示播放视频文件失败,这也是一个bug。通过fiddler抓包会发现以下请求响应数据为红色。
请求
http://train.atstudy.com/api/consume/UserTaskVideo
LastWatchDuration的取值为0。
响应
{"errorCode":201201,"message":"字段[LastWatchDuration]The field LastWatchDuration must be between 1 and 2147483647."}
1.3.5 我的学习-查看汇总
我的学习中查看学习汇总信息。
用fiddler抓取数据,对应的请求如下。
http://train.atstudy.com/api/consume/UserCourse/Summary
1.3.6 账号-优惠券
账号中查看优惠券,用fiddler抓取数据,对应的请求如下。
http://train.atstudy.com/api/consume/Coupon
1.3.7 查看页面布局
打开云手机的开发者选项,打开显示布局边界开关,app的界面显示如下。
说明中间是内嵌的网页。
任务2:编写系统测试计划
【任务目标】
梳理项目系统测试工作安排;
编写系统测试计划。
2.1 注意事项
组织形式中需要体现出每个人的具体分工,这样便于监督每个人的工作。
人员 | 分工 | 备注 |
张三 | 功能测试:前台子系统学习中心 兼容性测试 | 兼容性考虑主要业务即可 |
李四 | 功能测试:前台子系统教学中心 | |
王五 | 功能测试:后台子系统运营模块 |
测试对象中功能测试可以细分到模块或者功能点。
测试对象实际工作中一般会考虑到:
1)到模块,比如课程模块、运营模块等。
2)到功能,比如新建直播课、查询直播课、直播课加标签等。
如果只到模块,存在的问题一是对被测软件系统会不够熟悉,问题二是不利于估算工作量。
针对atstudy网校系统,考虑测试对象时需要考虑前台、后台、app要开展的测试类型。
1)前台子系统可以考虑的测试类型有功能测试、性能测试、兼容性测试、安全性测试。
2)后台子系统可以考虑的测试类型有功能测试。
3)android app可以考虑的测试类型有功能测试、性能测试、兼容性测试、网络测试。
子系统 | 测试类型 | 模块 | 测试项/测试点 | 备注 |
后台 | 功能测试 | 录播课管理 | 新建、编辑、上/下架。。。 | |
前台 | 功能测试 | 登录退出 | 密码登录、短信登录、微信登录、qq登录、退出。。。 | |
前台 | 性能测试 | 响应时间、服务器cpu占用。。。 | ||
android应用 | 功能测试 | 首页 | 搜索。。。 |
测试任务对应整个测试工作的细分,不要机械的去考虑。
测试任务可以按以下角度来分任务:
1)测试活动,比如计划、设计、实现、执行。
2)子系统/模块,比如前台子系统测试、后台子系统测试、android应用测试等。
3)测试类型,比如功能测试、性能测试、兼容性测试。
无论按哪种方式分任务,重点都是时间节点和任务输出。
2.2 完成作业
按照参考模板编写系统测试计划并提交,重点内容是组织形式、测试对象和测试任务安排。
三、编写系统测试计划
1、针对atstudy项目使用测试计划模板编写系统测试计划。
假设:项目周期为3个月,测试组包含组长一共是6人。
<<atstudy项目测试计划.doc>>
四、编写系统测试用例
1、针对atstudy前台子系统至少编写60条测试用例,其中至少5条为安全性测试用例。
2、针对atstudy后台子系统至少编写60条测试用例。
3、针对atstudy的移动app至少编写30条测试用例,其中至少3条性能测试用例。
<<测试用例.xlsx>>
五、执行测试用例
5.1 功能测试
1、针对atstudy前台学习中心-课程查询功能测试执行在中间页进行查询的测试用例,并使用火狐浏览器开发者工具抓取数据,分析查询不到结果的细节情况,需要截图说明。
中间页查询截图:
F12数据抓取:响应结果返回一个空列表
请求参数为空
响应结果为空列表,
返回的count字段值正确反映了数据库中存在的总记录数,
故初步判定非数据库访问权限导致的问题
为了进一步定位问题,分别尝试从其他中间页和首页查询,
其他中间页查询返回的仍然是一个空列表。从首页开始查询,可以正常显示查询结果
其他中间页查询结果 | 首页查询结果 |
| 首页查询可以正常返回结果 |
| |
对比首页查询和中间页查询,差异主要为:indexpage差异,可能是由于中间页的数据分页逻辑出现了问题,服务端系统在处理分页查询时存在问题,导致无法完整地返回所有查询结果。
2、针对atstudy前台子系统,筛选出辅测试环境执行的测试用例,记录结果后提交。
筛选基本为高的测试用例,在谷歌浏览器执行
5.2 缺陷管理
3、针对atstudy系统,提交至少5个bug,并标识清楚是web前台还是web后台还是android应用的bug。
需要用excel完整缺陷报告格式来编写。
5.3 使用Fiddler进行协议抓包测试
4、针对atstudy系统android应用,使用fiddler工具将我的学习-学习数据汇总中的加入学习时间修改为30天,完成学时修改为1000,累计学习修改为100门,截图提交。
环境配置:
步骤 | 命令 |
连接手机后,使用命名安装app | adb install +apk路径 |
解压fiddler | unzip MonoFiddler-v4484.zip |
安装mono | apt-get install mono-complete -y 这是在Linux系统上使用apt-get命令安装Mono框架的命令。Mono是一个跨平台的开源.NET框架,它允许开发人员在Linux等非Windows操作系统上开发和运行.NET应用程序。"apt-get install mono-complete -y"命令将安装完整的Mono框架,包括运行时、库和工具。其中,"-y"参数表示自动回答“yes”来确认安装。 apt代表Advanced Package Tool(高级包管理工具)是一个在Debian、Ubuntu等Linux发行版中管理软件包的命令行工具。使用apt,用户可以搜索、安装、升级和删除软件包,还可以处理依赖关系和库文件。apt自动从软件包存储库下载和安装软件包,让软件安装和管理变得更加方便。它也能够自动解决依赖关系的问题,确保系统上安装的软件包之间互相兼容。 |
设置端口映射 | adb reverse tcp:8888 tcp:8888 这是在Android系统中使用adb(Android Debug Bridge)工具来执行端口转发的命令。"adb reverse tcp:8888 tcp:8888"命令会将Android设备上的 8888 端口与本地计算机上的 8888 端口相互绑定。这个命令的作用是,当用户在Android设备上运行一个TCP服务器,并使用localhost:8888来访问它时,Android设备会将它们的请求"转发"到计算机上的该端口,而不是在 Android 设备本身运行的TCP服务器,从而允许用混在计算机上使用 Android 设备上的TCP服务器。 |
设置代理 | adb shell settings put global http_proxy 127.0.0.1:8888 这是在Android系统中使用adb命令设置全局网络代理的语句。其中,"adb shell"代表通过adb连接到Android设备的命令行shell模式,而"settings put global http_proxy"代表将全局http代理设置到adb命令的后续参数"127.0.0.1:8888",即将代理设置为本地计算机上的地址和端口。这个命令的作用是让 Android 设备使用本地计算机上的HTTP代理服务器,来进行网络请求和传输。 |
配置Fiddler | 参考:Fiddler设置 |
配置完成后关闭重启使配置得以应用 | mono fiddler |
1、找到要篡改的请求响应数据
学习数据汇总对应的请求如下。
2、添加自动响应规则
直接拖对应的请求到自动响应规则列表。
3、修改响应数据
在自动响应规则上右键,点击编辑响应数据,
时间修改为30天 | 根据时间戳转换,修改创建时间为30天前对应的时间戳 |
完成学时修改为1000 | learnednum修改为:1000 |
累计学习修改为100门 | courseNum修改为:100 |
修改如下:
json查看,数据已修改
4)界面检查
修改后的结果:
5.4 使用阿里云测进行兼容性测试
5、针对atstudy系统的android应用,在阿里云测上挑选至少5款机型进行兼容性测试,下载并提交测试报告。
1、登录云测平台,选择兼容性测试,切换到体验版
2、选择需要测试的机型
3、上传被测应用Atstudy.apk
4、兼容性测试任务已提交
5、下载测试报告
<<Atstudy(1.0.8)兼容性测试报告-1084666-MQC.xlsx>>
5.5 使用solopi工具进行性能测试
6、针对atstudy系统android应用,使用solopi工具进行性能测试,提交cpu占用和内存占用的截图。
1、选择需要测试的性能和APP | 2、启动APP进行操作, 完成录制后再次进入性能测试 查看录制回放 |
| |
3、查看各项性能指标
| | | | |
7、针对atstudy系统android应用,利用adb logcat测试冷启动时间,将日志中相关内容截图,并填写具体时间。
具体时间:846毫秒
注意:题目要求使用adb logcat
5.6 使用monkey工具进行稳定性测试
8、针对atstudy系统android应用,使用monkey工具进行稳定性测试,要求测试100次,填写命令,并将monkey日志截图上传
1、获取包名:com.atstudy.ando
2、执行命令:
根据实际工作需要,指定各个参数的值
adb shell monkey -p 包名 --throttle 时间间隔 -s 种子值 -v -v -v 操作次数 |
adb shell monkey -p com.atstudy.ando --throttle 500 -s 888 -v -v -v 100 |
-p,指明要测试的app,如果不写-p参数是指针对手机整机来进行测试。
--throttle,指明每次操作的间隔,一般设置为500,对应500ms(半秒),模拟人的正常速度。如果设置为更小的值,模拟人的快速点击,属于性能测试中压力测试。
-s,通过一个数字来生成随机测试的操作序列(点击->滑屏->点击->点击->滑屏)。
-v,用于设置monkey日志的详细程度,3个-v表示最详细。
3、为了便于后期分期,可以在运行monkey时,同时记录logcat日志
<<Monkey.txt>>
比如:在输出结果中查找错误日志、是否有ANR(程序不响应)问题、是否有程序运营崩溃等异常情况,从而定位缺陷
4、记录问题,提交给开发人员进行修复
5.7 UI自动化测试框架
<<自动化脚本的封装.md>>
1、请在 atstudy 项目中 完成 选课学习的业务自动化测试,需求如下?
被测网址 | train.atstudy.com |
1.完成业务流程元素定位,业务流程如下:登录-选课中心---选择任意门课程---开始学习
业务流程 | 元素定位 |
登录 | get_element(node="jwlogin",key="user_login").click() get_element(node="jwlogin",key="user_name").send_keys(username) get_element(node="jwlogin",key="user_password").send_keys(password) get_element(node="jwlogin", key="login_button").click() |
选课中心 | get_element(node="jwxuanke",key="touxiang") |
选择任意门课程 | kecheng_xpath="//*[@id='__layout']/div/div[2]/div/div[2]/div[2]/div["+str(kechenghao)+"]/div[3]/button" #选择的课程xpath driver.find_element_by_xpath(kecheng_xpath).click() |
开始学习 | get_element(node="jwxuanke", key="kaishixuexi").click() |
2. 针对选课功能 如何进行多用例测试?
在工程中新建test_data测试数据包 | |
将测试用例存放在csv文件中 | 数据使用逗号分隔 |
设计函数读取数据,进行多用例测试 | def get_csv_data(csv_file,line): jw_csv_file= open(csv_file, 'r', encoding='utf-8-sig') reader = csv.reader(jw_csv_file) # 参数2 :决定了下标位置的开始计数方式 for index, row in enumerate(reader, 1): if index == line: print(row) return row |
3. UI页面元素变更如何处理?
总体上:由于程序更新、或者开发修改了代码,导致元素属性的变化,自动化测试用例找不到特定的元素,测试测试用例无法执行,从而导致测试过程失败
几种可能的应对方法:
- 根据最新的元素属性进行自动化脚本的更新
- 使用更稳定的属性进行元素定位
- 使用更灵活的定位方法进行元素定位
- 将页面上的UI元素和相关操作进行封装
封装各种selenium查找元素的各种方式的代码 这里将采取PO思想,将页面元素和python代码分离,修改UI界面变更后修改元素 |
import os from time import sleep from config.jw_driver import get_firefox_driver from config.read_ini import jwReadIni class jwFindElement(): def __init__(self,driver): self.driver=driver #获取元素 def get_element(self,file=None,node=None,key=None): if file==None: file=os.path.dirname(os.path.dirname(__file__))+"/business/LocalElement.ini" if node==None: node="jwlogin" read_ini=jwReadIni(file,node) data=read_ini.get_value(key) #得出定位方式 文件中是以 > 方式切割 by=data.split('>')[0] value=data.split('>')[1] try: if by=='id': return self.driver.find_element_by_id(value) elif by=='name': return self.driver.find_element_by_name(value) elif by=='className': return self.driver.find_element_by_class_name(value) elif by=='link_text': return self.driver.find_element_by_link_text(value) elif by=='xpath': return self.driver.find_element_by_xpath(value) except: return None def gundongdaodibu(self): self.driver.set_window_size(600, 600) sleep(2) # 通过JS设置浏览器窗口的滚动条位置 # 横向滚动100 # 纵向 滚动 450 js1 = "window.scrollTo(0, 600);" self.driver.execute_script(js1) if __name__=="__main__": parent_path = os.path.dirname(os.path.dirname(__file__)) driver=get_firefox_driver() aa=jwFindElement(driver) #测试是否可以在get_element 找到登录链接 print(aa.get_element(parent_path+"/business/LocalElement.ini","jwlogin","user_login")) |
4. 测试用例通过的标准如何体现?
(验证点 :评价是否存在)
1、查看测试用例通过界面特有的元素进行元素定位,如果能找到判定测试用例通过,找不到则判定为用例不通过,以选课成功测试用例为例,验证页面上能否找到评价
#验证是否有评价信息 sleep(2) result = jw2.get_element(node="jwxuanke",key="yanzheng") sleep(2) print("找回复是否有评价的结果是", result) if result == None: return False else: return True except Exception as e: print("JW",e) print("流程异常,都认为选课失败") return False |
5. 测试报告如何展示?
通过BSTestRunner.py 开源插件文件实现
6. 如何做到自动化测试速度超过手工测试?
自动化测试在以下场景中,可以提升测试速度,达到超过手工测试的效果:
- 大规模、重复性测试:并行执行多个测试用例,快速处理大量数据。
- 每天在预定的时间内运行测试用例,且无需人工干预。
- 快速重复执行相同的测试用例
- 用例需要在多个环境中运行时:通过自动化脚本提供一致的测试标准,从而避免测试人员在不同的测试阶段使用不同的测试标准
- 性能和负载测试:自动化测试可以在多个客户端上模拟用户操作,从而帮助测试团队确定系统和性能的局限