1. 商品B 原价:13.00元 限时折后价:10.00元 优惠券:0.00元 优惠券使用后应付:10.00元满10-1元使用后应付9.00元实付:9.00元 (这种计算方法对吗?如果对,请答:正确:如果不对:请写出正确的计算方法。)
正确
2. 商品C原价:22.00元 限时折后价:20.00元 优惠折扣:5折 折扣使用后价格为多少元? 之后参加满减优惠:满5元减5元 实付多少元?
5元
3. 用边界值法测试,一个商品价格区间为0元至5元,那么,在测试中应该取的边界值是什么?
2
4、一个新项目下来,要经过哪些测试阶段才能正确发布?
1、需求说明书审查
2、概要设计和程序设计审查
3、单元测试
4、集成测试
5、功能测试
6、确认测试
7、系统测试
5、APP与web测试有什么不同?
单纯从功能测试的层面上来讲的话,APP 测试、web 测试 在流程和功能测试上是没有区别的。
1.系统架构方面:
web项目,一般都是b/s架构,基于浏览器的
app项目,则是c/s的,必须要有客户端,用户需要安装客户端。
web测试只要更新了服务器端,客户端就会同步会更新。App项目则需要客户端和服务器都更新。
2.性能方面:
web页面主要会关注响应时间
而app则还需要关心流量、电量、CPU、GPU、Memory这些。
它们服务端的性能没区别,都是一台服务器。
3.兼容方面:
web是基于浏览器的,所以更倾向于浏览器和电脑硬件,电脑系统的方向的兼容 ,所以web测试不必考虑安装卸载
app测试是基于客户端的,则要看分辨率,屏幕尺寸,还要看设备系统。
所以app测试则必须测试安装、更新、卸载。除了常规的安装、更新、卸载还要考虑到异常场景。包括安装时的中断、弱网、安装后删除安装文件
此外APP还有一些专项测试:如网络、适配性。。。
APP测试特点
(除了按需求说明书外的 功能测试 之外还需要进行如下测试)
1: 适配性测试(也叫兼容性测试,不同的安卓版本,不同厂商,不同手机品牌)
2: 不同网络测试 (2G网络/3G网络/4G网络/WIFI网络)
3; 在线升级测试
4: 中断测试(电话、短中消息打扰)
5: 耗电量测试
6: 弱网测试(信号差,信号屏蔽实验室)
7: 安装卸载 (C/S)
8: 流量测试
7、工作中会发现有些难题你是倾向于找领导解决还是自己解决完之后告知领导你的结果?
能自己搞定当然自己搞定就好了,但是如果自己搞不定或者搞定很困难,就要提出来。
8、简述一条测试用例包含哪些必要部分?怎样理解sanity case和emoke case?
用例编号、所属模块、用例标题、前提条件、测试数据、操作步骤、期望结果、实际结果、优先级、重要程度、用例性质、用例类型、设计者、创建日期
9、如何判定一个问题是不是bug?bug一般分为哪些级别,以及如何定级?
定义是否是bug可以从三方面来看,
1.功能是否符合需求说明书;
2.站在使用者的角度,功能是否易操作、易理解;
3.系统压力指标是否达到质量要求。
致命(一级bug)
通常表现为:主流程无法跑通,系统无法运行,崩溃或严重资源不足,应用模块无法启动或异常退出,主要功能模块无法使用。
比如:1.内存泄漏;2.严重的数值计算错误;3.系统容易崩溃;4.功能设计与需求严重不符;5.系统无法登陆;6.循坏报错,无法正常退出。
严重(二级bug)
通常表现为:影响系统功能或操作,主要功能存在严重缺陷,但不会影响到系统稳定性。
比如:1. 功能未实现;2.功能存在报错;3.数值轻微的计算错误。
一般(三级bug)
通常表现为:界面、性能缺陷。
比如:1.边界条件下错误;2.容错性不好;3.大数据下容易无响应;4.大数据操作时,没有提供进度条。
提示(四级bug)
通常表现为:易用性及建议性问题
比如:1.界面颜色搭配不好;2.文字排列不整齐;3.出现错别字,但是不影响功能;4.界面格式不规范。
功能测试的常用方法有哪些?微信朋友圈的点赞功能为例,请设计测试用例
1、等价类划分法
2、边界值分析法
3、正交实验法
4、错误推测法
5、因果图法
6、场景法
7、判定法
简述app测试中,性能测试主要包含哪些方面?
1.边界测试
在各种边界压力下,如电量不足、存储空间不足、网络不稳定时,测试App是否能正确响应、正常运行。
2.压力测试
对移动App不断施加压力,如不断增加负载、不断增大数据吞吐量等以确定App的服务瓶颈,获得App能提供的最大服务级别,确定App性能是否满足用户需求。
3.响应能力测试
确应能力测试实质上也是种压力测试, 在一定条件下 App是否可以正确响应,响应时间是否超过了客户需求。
4.耗能测试
测试App运行时对移动设备的资源占用情况,包括内存、CPU消耗,App长期运行时耗电量、耗流量情况,验证App对资源的消耗是否满足用户需求。
请说明以下每条命令的含义
(1)adb devices -l
(2)adb install -r [path]/adb uninstall [package]
使用参数-r:替换已经存在的应用
卸载应用
(3)adb push [File]
将文件从PC写入到设备
(4)adb pull [File]
拷贝
(5)adb shell dumpsys meminfo
可以用来查看指定进程包名的内存使用情况
在你之前的项目测试中,做过哪些兼容测试?
是否了解package与activity的定义和关系?
Package
Package 包。只是在我们的app中这个Package是唯一的,就像你身份证号码一样。在我们做app自动化时,我们就需要知道他的Package,我们知道了Package那么也就知道我们需要对哪个app做自动化。 注意和.apk文件包名不同。
Activity
Android中,activity是所有程序的根本,所有程序的流程都运行在activity之中,activity可以算是开发者遇到的最频繁,也是android当中最基本的模块之一。在android的程序中,activity一般代表手机屏幕的一屏。如果把手机比作一个浏览器,那么activity就相当于一个网页。在activity当中可以添加一些Button、Checkbox等控件,可以看到activity概念和网页的概念相当类似。
一般一个android应用是由多个activity组成的,这多个activity之间可以进行相互跳转。例如,按下一个Button按钮后,可能会跳转到其他的activity,与网页跳转稍微有点不一样的是,activity之间的跳转有可能返回值。
Tips:activity的生命周期:即“产生、运行、销毁”,但是这其中会调用许多方法onCreate(创建) 、onStart(激活) 、onResume(恢复) 、onPause(暂停) 、onStop(停止) 、onDestroy(销毁) 、onRestart(重启)。
使用monkey命令做稳定性测试,用过哪些参数?各代表什么意思?
1.常用选项的参数通常有:
-v 用于反馈信息级别(一个-v表示一个层级,两个-v表示两个层级,通常最多三个-v)
示例Level0:
adb shell monkey -p com.swartz.cicada –v 100
说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息 相应源代码如图所示了,这十分有利于调试了
示例Level1:
adb shell monkey -p com.swartz.cicada -v-v 100
说明
提供较为详细的日志,包括每个发送到Activity的事件信息
示例Level2:
adb shell monkey -p com.swartz.cicada -v-v-v 100
说明
最详细的日志,包括了测试中选中/未选中的Activity信息
2.时间选项的参数通常有:
-s 表示伪随机数生成的seed值,如果seed值相同,则两次monkey所产生的事件序列也是一样的
示例:
Monkey测试1:adb shell monkey -p com.swartz.cicada –s 10 100
Monkey 测试2:adb shell monkey -p com.swartz.cicada –s 10 100
两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;
–throttle:每个事件结束后的间隔时间
3.约束选项的参数通常有:
-p 指定文件名
count 指定要发送的事件数
-c 用此参数指定一个或几个类别,activity必须指定一个category,才能被启动,否则将会启动不了
4.调试选项的参数通常有:
–dbg-no-events:初始化启动的activity,但是不产生任何事件。
–hprof:指定该项后在事件序列发送前后会立即生成分析报告
–ignore-crashes:忽略崩溃
–ignore-timeouts:忽略超时
–ignore-security-exceptions:忽略安全异常
–kill-process-after-error:发生错误后直接杀掉进程
–monitor-native-crashes:跟踪本地方法的崩溃问题
工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试。monkey 测试命令如下:
adb shell monkey -p com.swartz.cicada -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > E:\monkey_log\20170831.txt
kill
此参数用来杀掉进程:kill pid
接口中常见的请求方式有哪些?有哪些区别?是否了解cookie,session,token的用法和区别?
1、Get 向特定资源发出请求(请求指定页面信息,并返回实体主体)
2、Post 向指定资源提交数据进行处理请求(提交表单、上传文件),又可能导致新的资源的建立或原有资源的修改
3、Put 向指定资源位置上上传其最新内容(从客户端向服务器传送的数据取代指定文档的内容)
4、Head 与服务器索与get请求一致的相应,响应体不会返回,获取包含在小消息头中的原信息(与get请求类似,返回的响应中没有具体内容,用于获取报头)
5、Delete 请求服务器删除request-URL所标示的资源*(请求服务器删除页面)
6、opions 返回服务器针对特定资源所支持的HTML请求方法 或web服务器发送*测试服务器功能(允许客户端查看服务器性能)
Cookie
cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的cookie数量是有限的。
Session
session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。
session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。
服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁。这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失。
Token
Token的引入:Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
Token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。最简单的token组成:uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,由token的前几位+盐以哈希算法压缩成一定长的十六进制字符串,可以防止恶意第三方拼接token请求服务器)。
使用Token的目的:Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
cookie与session的区别
1、cookie数据存放在客户端上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
session与token的区别
session 和 oauth token并不矛盾,作为身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全了。如上所说,如果你需要实现有状态的会话,仍然可以增加session来在服务器端保存一些状态
App通常用restful api跟server打交道。Rest是stateless的,也就是app不需要像browser那样用cookie来保存session,因此用session token来标示自己就够了,session/state由api server的逻辑处理。 如果你的后端不是stateless的rest api, 那么你可能需要在app里保存session.可以在app里嵌入webkit,用一个隐藏的browser来管理cookie session.
Session 是一种HTTP存储机制,目的是为无状态的HTTP提供的持久机制。所谓Session 认证只是简单的把User 信息存储到Session 里,因为SID 的不可预测性,暂且认为是安全的。这是一种认证手段。 而Token ,如果指的是OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对App 。其目的是让 某App有权利访问 某用户 的信息。这里的 Token是唯一的。不可以转移到其它 App上,也不可以转到其它 用户 上。 转过来说Session 。Session只提供一种简单的认证,即有此 SID,即认为有此 User的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方App。 所以简单来说,如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 。如果永远只是自己的网站,自己的 App,用什么就无所谓了。
你之前的服务器端或前段测试有几个环境,这些环境都有什么区别?
1:开发环境:项目尚且在编码阶段,我们的代码一般在开发环境中 不会在生产环境中,生产环境组成:操作系统 ,web服务器 ,语言环境。 php 。 数据库 。 等等
2:测试环境:项目完成测试,修改bug阶段
3:生产环境:项目数据前端后台已经跑通,部署在阿里云上之后,有客户使用,访问,就是网站正式运行了