1、基本任务:功能任务和测试管理
(1)计划说明
a、对比测试产品:
百词斩,扇贝单词
b、测试进度表
项目 |
内容说明 |
预估耗时 (分钟) |
实际耗时 (分钟) |
Planning |
|
20 | 30 |
· Estimate |
· 估计这个任务需要多少时间 |
60 | 70 |
Testing Design |
|
40 | 40 |
· Analysis |
· 需求和测试需求分析 |
30 | 40 |
· Design Test Cases |
· 设计测试用例 |
30 | 30 |
Testing Environment |
|
30 | 40 |
Testing Implementation |
|
20 | 30 |
· Test |
· 执行测试 |
30 | 30 |
Reporting |
|
30 | 40 |
· Test Report |
· 测试报告 |
30 | 30 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
40 | 50 |
合 计 |
360 | 430 |
(2)需求说明
a、功能模块划分图
百词斩商城/推荐,课程功能模块需求说明
扇贝单词商城/推荐,课程功能模块需求说明
b、本人负责的功能模块:
商城/推荐,课程
(3)测试说明
a、测试用例的设计思路
等价类测试:界面跳转测试,所有界面跳转划分成一个等价类,对该等价类进行测试。
边界值测试:界面响应测试,网络延迟一定的情况下,测试界面的响应时间。
场景测试:(1)场景:新手用户在“商场/推荐”功能中根据推荐选择应用或者相关商品,在“课程”功能中选择需要的课程。
(2)所有测试用例基于以上场景
业务流程图:
百词斩测试用例:
扇贝单词测试用例:
缺陷:
b、测试执行的部分操作和运行界面截图
c、测试管理工具
名 称:禅道
版本号:7.4.beta
链 接:http://www.xiazaiba.com/html/45269.html
d、测试管理工具使用的关键界面截图(测试用例导出、缺陷导出等)
(4)结论说明
就上线很久的单词学习app来说,百词斩和扇贝绝对算得上是老牌的app,在客户调研和测评使用方面很定下了一定的功夫,所以bug的话还是很难找出来的,但是通过对比性功能测试,可以找出app相比于其他竞争产品的不足之处。
商城/推荐:扇贝单词在app内有商城,相比于百词斩跳转到淘宝首页来进行挑选,感觉更清爽,没有多余的操作,这样就提高了用户黏度,改善了用户体验性。另外百词斩没有应用推荐,在应用推荐这方面远没有扇贝单词做得好。
课程:课程这个功能模块上百词斩也有些不足,首先在课程里没有对用户需要的模块进行细化,如四、六级,托福,雅思,听力,阅读等。这无疑会增加用户在搜索这些功能所花费的时间,当然用户花的 时间长,体验性就下降了。相反,扇贝单词就划分的很明确,用户可以清晰地浏览自己需要寻找的模块进行学习。
(5)工作说明
各组员都是:0.25
2、扩展任务:用户调研和可用性测试
见毕博可用性测试报告
3、高级任务:专题测试
(1)测试专题:GUI界面测试
测试工具:UiAutomator(Android-SDK) Android开发包的UI测试工具
ADB Driver 连接Android的ADB驱动
python3.5 脚本测试语言
(2)GUI界面测试的核心思想:
首先,不得不承认,GUI测试重点是正确性,易用性和视觉效果,文字检查和拼写检查是GUI测试的重要环节。如果敲完一个完整的GUI界面测试的脚本,量还是很大的,毕竟用Python+UiAutomator是纯手敲脚本,没有自动生成的的骚操作。
所以核心思想是测试GUI界面功能的正确性和可用性:利用Pyhton脚本对百词斩进行自动化测试,测试界面功能的正确性和可用性。
(3)测试设计:
一般的GUI测试步骤包括:录制脚本,运行脚本,观察测试日志,报告缺陷,重复运行脚本等步骤。
但是由于没有使用脚本自动生成工具,所以我的步骤为:编写测试脚本,编写测试用例(预期输出),观察脚本运行结果,重复运行脚本。
1、利用UiAutomator手动获取界面控件id
2、Python脚本+ADB驱动,对界面控件执行点击操作
3、GUI自动化测试
4、对比测试用例,查看功能的正确性和可用性。
5、重复运行脚本
(4)编写测试脚本:
1 # -*- coding:utf-8 -*- 2 from uiautomator import device as d 3 import unittest 4 import time 5 6 class Mytest(unittest.TestCase): 7 #初始化工作 8 def setUp(self): 9 print ("--------------初始化测试") 10 11 12 # 退出清理工作 13 def tearDown(self): 14 print ("--------------退出测试\n\n") 15 16 17 18 def test1(self): 19 d(text="百词斩").click() 20 print("GUI界面专题测试") 21 print ("--------------测试背单词") 22 d(resourceId="com.jiongji.andriod.card:id/tt").click() 23 time.sleep(6) 24 d(resourceId="com.jiongji.andriod.card:id/k").click() 25 print("test1 success!") 26 time.sleep(6) 27 28 def test2(self): 29 print ("--------------测试单词电台") 30 d(resourceId="com.jiongji.andriod.card:id/ty").click() 31 time.sleep(6) 32 d(resourceId="com.jiongji.andriod.card:id/k").click() 33 print("test2 success!") 34 time.sleep(10) 35 def test3(self): 36 print ("--------------测试单词TV") 37 d(resourceId="com.jiongji.andriod.card:id/tz").click() 38 time.sleep(6) 39 d(resourceId="com.jiongji.andriod.card:id/k").click() 40 print("test3 success!") 41 time.sleep(6) 42 43 def test4(self): 44 print ("--------------测试爱阅读") 45 d(resourceId="com.jiongji.andriod.card:id/u1").click() 46 time.sleep(6) 47 d(resourceId="com.jiongji.andriod.card:id/dq").click() 48 print("test4 success!") 49 time.sleep(6) 50 51 def test5(self): 52 print ("--------------测试复习") 53 d(resourceId="com.jiongji.andriod.card:id/he").click() 54 time.sleep(6) 55 d(resourceId="com.jiongji.andriod.card:id/hd").click() 56 print("test5 success!") 57 time.sleep(6) 58 59 def test6(self): 60 print ("--------------测试小讲堂") 61 d(resourceId="com.jiongji.andriod.card:id/hg").click() 62 time.sleep(6) 63 d(resourceId="com.jiongji.andriod.card:id/hd").click() 64 print("test6 success!") 65 time.sleep(6) 66 67 def test7(self): 68 print ("--------------测试周边") 69 d(resourceId="com.jiongji.andriod.card:id/hh").click() 70 time.sleep(6) 71 d.press.back() 72 print("test7 success!") 73 time.sleep(6) 74 75 def test8(self): 76 print ("--------------测试圈子") 77 d(resourceId="com.jiongji.andriod.card:id/hi").click() 78 time.sleep(6) 79 d(resourceId="com.jiongji.andriod.card:id/hd").click() 80 print("test8 success!") 81 time.sleep(6) 82 83 def test9(self): 84 #d.press.back() 85 d.press.home() 86 d.press.recent() 87 time.sleep(3) 88 d.swipe(200, 500, 200, 0, steps=10) 89 d.press.home() 90 91 print (u"关闭APP") 92 93 if __name__ == '__main__': 94 unittest.main()
(5)执行测试,运行视频:
什么?视频要1280*720的...... 惹不起,惹不起
又用OpenCV写了个转视频分辨率格式的脚本。。。。。
Hard Code Everywhere。。。。。
1 import numpy as np 2 import cv2 3 4 5 cap=cv2.VideoCapture("4.MP4") 6 fourcc = cv2.VideoWriter_fourcc(*'XVID') 7 out = cv2.VideoWriter('output.avi',fourcc, 20.0, (1280,720)) 8 9 while(cap.isOpened()): 10 ret,frame =cap.read() 11 size = (1280, 720) 12 enlarge = cv2.resize(frame, size, interpolation=cv2.INTER_AREA) 13 center=(640,360) 14 M=cv2.getRotationMatrix2D(center, -90, 1.0) 15 rotated = cv2.warpAffine(enlarge, M, size) 16 cv2.imshow('frame',rotated) 17 out.write(rotated) 18 if 0xFF & cv2.waitKey(20) == 27: 19 break 20 cap.release() 21 out.release() 22 cv2.destroyAllWindows()
(6)定性和定量的测评结论:
定性测评结论:d、好,不错
定量测评结论:
类别 | 描述 | 评分 (满分 10 分, 良好 6 分, 及格 4 分,聊胜于无 1 分, 很差 -3 分) | |
功能 | 核心功能 | 分析三个核心功能,功能设计和质量。 | 8 |
细节 | 有什么为用户考虑的细节? | 9 | |
用户体验 | 当用户完成功能时,不干扰用户 (例如: 是否不断弹出不相关广告)。 | 8 | |
辅助功能 | 一些辅助功能如皮肤等 | 6 | |
差异化功能 | 这个软件独特的功能. 它对用户的吸引力有多大? | 9 | |
软件的效能 | 占用内存, 启动速度, 内存泄漏情况 | 7 | |
体验 | 软件的适应性 | 在联网/断网, 大小屏幕, 没有鼠标的情况下都可以顺畅操作. 和不同平台的软件能流畅协作 | 10 |
成长性 | 记住用户的选择, 适应用户的特点,用户越用越方便 | 7 | |
用户有控制权 | 系统状态有反馈,等待时间要合适。关键操作有确认提示,有明确的错误信息。 让用户方便地从错误中恢复工作, 快捷操作键可调整。 | 8 | |
自选 | 自选评分项目 | 针对软件的特点, 自己选择一个上面没有覆盖的领域来评分 | 交互性: 8 |
(7)高级任务中的工作感受:
就简单谈一下我对GUI界面自动化测试的感受,一开始没有翻到有附录五,不知道推荐了移动app测试的工具,自己在网上找资料,搜到了利用UiAutomator进行UI测试。也是碰巧,在寒假电脑装好了Android-SDK,前不久又安装好了ADB Driver,对Android机进行调试。所以在做高级功能时我已经把环境都配好了,配好的环境相当于写完了一半,嘿嘿。
然鹅。当我写完Pyhton脚本时才发现原来其他工具是自动生成脚本的,一口老血...
好了,说点专业的。在毕博的讲义上谈到的测试工具是有脚本录制,然后进行重现。我用代码代替了脚本录制,也就是预先估计输入,预测输出,查看结果是否正确,如果正确,则测试结果正常了。不过还真遇到一个问题,以前没写过Andriod,不知道怎么获取content-desc控件的值进行点击,到现在找了好多资料还没找到,有知道的,在线等。。。只好back一下了,假装返回了上一层级。
(8)对三次实践作业的看法:
首先,我很肯定老师负责任的态度,在大三下还对我们这么严格的老师不多。
就简单说一下我对作业的看法,所有的编程作业我觉得都不难,还有点easy,但是说实话,看到每次毕博上一大堆和作业有关的要求就。。。密集恐惧症坚定无疑。限制好多,每一个题的限制绝对是我在大学以来做过的最多,所以每次码完解决了,转过头一看,gg,要求又没看到,又要改,而且第一次的WordCount,需求真是改到爆炸,充分体验了乙方的痛苦。所以我觉得这些题真的不难,就是耗费了我大把的时间。
另外我是一个比较讨厌写文档的人,如果你单单只是让我分享一下编程、测试的知识,技巧,我会很乐意,但是你要让我写这么多条条框框的博客,我就觉得没有太大意思,毕竟没一个好的心情,就算做的再好也不太想分享,条条框框也限制了我想分享的方面。
其次,我比较建议这门课开设在大一,虽然大一的撸代码差一些,但是他们有大把的时间可以挥霍,大三的腊肉实在是没时间了,在大一绝对有激情慢慢搞,大三了确实没兴趣做这些简单的编程题目,而且对编程水平感觉没有太多的提升。
最后,还是肯定一下我在这门课上学到的一些东西,比如单元测试怎么做,自动化测试怎么做之类的,以前在写代码时基本不太关注测试,现在因为这门课都慢慢开始对测试重视起来了。
(9)工作说明:
还是人均0.25算了.....