软件测试面试问题-资料全书

153 阅读33分钟

4.查看 8080 端⼝号是否被占⽤

netstat -nult | grep 8080

5.如何查看动态资源占有率

top

7.如何杀死 1234 进程

Kill 1234

8.两个 linux 系统怎么进⾏互传⽂件传给另⼀个⽤户是 scp 本地⽂件完整路径⽤户名@服务器 ip:另⼀个⽤户的⽬标路径从另⼀个⽤户拷⻉⽂件 scp ⽤户名@服务器 ip:⽂件完整路径本机⽬标路径

9.如何修改⽂件内容,如何退出

vi ⽂件名字 进⼊⽂件按 a 进⼊编辑状态先按 esc 然后:q 不保存退出先按 esc 然后:q!强制不保存退出先按 esc 然后:wq 保存退出先按 esc 然后:wq!强制保存退出

10.不进⼊⽂件,如何查看⽂件内容都有那些⽅法 cat ⽂件名字 直接显示⽂件所有内容 more ⽂件名字以百分⽐形式显示⽂件内容 less ⽂件名字按⾏展示⽂件内容按 q 退出展示

12.Linux 下载到 windows ⽤什么命令 sz ⽂件名

13.Windows 上传到 linux ⽤什么命令 rz 回⻋

14.把进程 id 是 1234 的进程给过滤出来 ps -ef |grep 1234 15.tar 包的打包和解压

tar -zcvf qa.tar.gz test.log 压缩⽂件 test.log 到当前⽂件夹 tar -zxvf 压缩包的名字 解压⽂件到当前路径

18.在 Linux 中>和>>有什么区别

19.说下⽂件权限 743 代表什么意思

7 代表⽂件所有者权限为 rwx 可读可写可执⾏

4 代表所属组的权限为 r-- 可读

3 代表其他⽤户权限为 -wx 可写可执⾏ r(4)读权限 w(2)写⼊权限 x(1)可执⾏权限

20.查看最近 100 ⾏的动态⽇志

tail -100f ⽇志名

21.赋权命令是哪个,如何对⼀个⽂件赋予最⾼权限 chmod 777 ⽂件名 将⽂件夹权限改为 777 22.⽇志⾥⾯⼀般都会出现什么错误? error 错误(系统不能解决的错误) Exception (程序异常,但是是程序可以处理的异常)

Connect Timed out 连接超时

Connect refused 连接拒绝 Null Pointer Exception 空指针异常

23.⽇志⾥⾯⼀般都会打印什么内容?主要是⽤户的操作记录,以及程序的执⾏过程,系统的调⽤过程的记录。

24.如何切割⼤⽇志

Split -b 1m test.log xxx

Split -b 切割后每个⽂件⼤⼩ 要切割⽂件 切割后⽂件以什么开头

25.如何再压缩包⾥⾯过滤某个关键字 1、如果是 tar 压缩包

Zgrep -a 关键字 ⽂件名

Zgrep -a ‘1234’ t.tar.gz 2、如果是 zip 压缩包

Zipgrep 关键字 ⽂件名

Zipgrep ‘1234’ t.zip

四、Tomcat 知识

1.如何搭建测试环境(⾃⼰能独⽴搭建测试环境吗)我搭建过测试环境,我去公司前公司已经搭建好了测试环境,我们有完善的搭建环境⼿册,⽐如安装 jdk、tomcat、MySQL 数据库等,然后进⾏相应的配置,⽐如找到 tomcat ⽬录下的 server.xml 和 web.xml 进⾏配置地址、端⼝、 ⼤连接数等,以及配置相应的环境变量,然后进⾏部署 linux 测试环境。

2.测试环境由谁发布,如何发布的(如何部署测试环境)测试环境⼀般由测试发布

⾸先开发发包,我们使⽤ xshell 连接服务器,⾸先停服务,备份上⼀版本的测试包,再更新成当前的测试包,然后检查发布端⼝是否被占⽤,应⽤包放的⽬录是否正确,检查⽆误后启动 tomcat 服务并查看启动⽇志是否报错等,启动完成后,打开⽹⻚输⼊地址,查看系统是否正常运⾏,如果⻚⾯正常则说明部署环境成功。

3.你们公司服务器采⽤什么样的操作系统

linux 操作系统 centos 7

4.测试环境是什么操作系统以及测试环境由谁维护

Liunx 操作系统 ⼀般由开发维护

5.Tomcat 的默认端⼝号是什么

8080

6.如何查看 tomcat 的端⼝号是否被占⽤

netstat -nultp|grep 8080

7.Tomcat 的配置⽬录是哪个⽬录,修改端⼝号是哪个配置⽂件

Conf server.xml

8.如何更改 tomcat 的端⼝号

在 tomcat ⾥ conf ⽬录下找到 server.xml ⽂件,vi 命令进⼊⽂件,按 a 进⾏编辑,修改端⼝号, 后保存退出即可(:wq)。

9.Tomcat 的启动⽂件在哪个⽬录⾥,如何启动 tomcat(说命令)

在 bin ⽬录⾥ startup.sh sh startup.sh

10.War 包的压缩以及解压

压缩:jar -zcvf a.war a.log 解压:jar -zxvf a.war

11.如何查看 tomcat 进程

Ps -ef |grep tomcat

12.如何查看 java 进程

Ps -ef |grep java

13.如何杀死 tomcat 进程

Ps -ef | grep tomcat kill -9 跟进程 ID

14.Tomcat 的⽇志是在哪个⽬录⾥,以及⽇志名字是什么

在 tomcat 的 logs ⽬录下的 catalina.out ⽂件

⼀般⽤ tail -f catalina.out 查看⽇志

15.如何查看启动⽇志(说命令)

Tail -f catalina.out

16.画出服务器交互图,并解释

图片

⾸先⽤户从 web 端/app 端去访问服务器,然后请求进⼊到 nginx,nginx 会处理⼀些静态资源⽐如:图⽚,js,css 等静态⽂件,直接返回给客户端,并转发动态请求到 tomcat,进⾏业务逻辑处理,⼀般都是和数据库有交互。⽐如:登录、注册、查询等请求举个例⼦:⽐如从客户端过来的登录请求到 tomcat,需要到数据库中⽐对账号密码是否正确,如果正确再依次返回到前端⻚⾯登陆成功,另外还有⼀些请求与第三⽅服务有交互的 ⽐如:充值、转账、实名认证等请求。

17.Jdk 是什么意思

Java 的开发环境

18.Jre 是什么意思

Java 的运⾏环境

19.Jvm 是什么意思

Java 的虚拟机

20.你们公司⽤ jdk 的版本是多少,tomcat 的版本是多少

Jdk 版本是 1.8,tomcat 版本是 8

五、adb 知识

1.你都⽤过哪些 adb 命令?

⽐如(adb install 安装、adb shell pm list packages 查看包、adb pull 下载、adb push 上传、adb shell pm clear 包名清除缓存等)

2.你都会⽤ adb 命令做什么?

主要⽤来安装卸载测试 app,运⾏ monkey 命令对 app 进⾏稳定性测试,查看 app

⽇志等

3.如何看⼿机的⽇志?

adb logcat

4.adb ⽇志⾥⾯都看什么?如何筛选和分析

⽇志⾥⾯可以查看⼀些报错或者 Anr,crash 等异常信息以及⽤户的操作记录分析的时候我们⼀般可以把⽇志直接打印到本地,通过本地的⽇志记录去筛选和分析

5.如何对 adb ⽇志进⾏筛选和分析?

⾸先对于 anr(⽆响应)报错我们可以通过搜索 ANR 关键词来定位关键的事件信息。

除了导出⽇志外,还可以将/data/anr/⽬录下的 trace.txt ⽂件导出,⽤来定位分析问题。

对于其他异常退出信息:通过搜索 Fatal 关键词来定位。以及⼀些崩溃问题:通过搜索 Exception 关键词来定位。

发⽣异常后,通过搜索 Crash 关键词来定位到详细的信息截图给开发。

6.Monkey 命令怎么⽤?如何提取⽇志

Monkey 命令可以⽤ adb shell monkey 然后后⾯结合 monkey 参数去执⾏,提取

⽇志可以⽤>⼤于号导出到本地

7.说下 monkey 命令都有哪些参数?分别都代表什么意思?

⾃⼰举⼏个列⼦⽐如-p 指定包名、-s ⽤于指定伪随机数⽣成器的 seed 值、

-v ⽇志等级、--throttle 等待时间、--ignore-timeouts 忽略超时、--ignore-crashes 忽略崩溃、--pct-touch 触摸操作等

8.adb logcat 后⾯都可以跟哪些参数?

-c 清空⽇志缓存、-t 跟数值输出 近的⼏⾏⽇志,-v time 以时间格式打印等我常⽤的就这些

9.说下 monkey 参数的⼤概组成

adb shell monkey -p 跟包名后⾯是⼀些命令⽐如时间间隔,忽略超时,忽略崩溃,触摸操作等然后跟 -s 伪随机数 ⽇志等级-v 后是执⾏的事件个数

10.Monkey 后⾯-p 跟什么包名

11.什么叫包名

安卓的包名是针对安卓系统 app 的识别标识,每个 app 都有⾃⼰的标识,⼀台⼿机不能安装两个相同包名的应⽤,如果⼀个应⽤在后续版本中改了包名,那在应⽤商店⾥就会检查不到这个软件的新版本,⽽在这个更新的版本安装后则会出现第⼆个相同的应⽤在桌⾯上,这个包名是由开发者⾃⼰取的。

12.包名怎么查出来的?

adb shell pm list packages -3

13.说下安卓系统和 ios 系统的区别(安卓和 ios 的特性是什么)

1.两者运⾏机制不同,对于安卓系统来说是采⽤虚拟机运⾏机制,iOS 系统是采⽤的沙盒机制。

2.两者的后台制度不同,iOS 中的任何第三⽅程序都不能在后台运⾏,安卓中的任何程序都,。可以在后台运⾏,直到没有内存才会关闭。

14.如何查看某个 app 的⽇志

1.找到 app 的包名 (pm list packages -3)

2.进⼊ shell 通过包名找到占⽤的进程 id (ps | grep 包名)找完整包名的进程

id

3.通过进程 id 查看⽇志(adb logcat | findstr 进程 id)

15.monkey

是安卓⾃动化测试的⼀种⼿段,它可以在我们的真机或者模拟机⾥⾯运⾏,可以向系统发送伪随机事件,⽐如按钮输⼊,屏幕触摸,⼿势操作等,可以实现对当前软件进⾏压⼒测试,来测试 app 的稳定性。也可以做⼀些简单的机型适配(就是市场上关于安卓的不同机型),也可以测试 APP 是否会出现 crash 等异常,以及系统的崩溃问题。

16.adb

Adb 就是 android 调试桥,是 android sdk 的⼀个⼯具,主要应⽤于 monkey ,结合 monkey 去进⾏随机测试,⼀般都是安卓开发使⽤

六、python 知识

1.Python ⾥的 6 数据类型都有哪些

numbers(数字) string(字符串) list(列表) tuple(元组) dictionary{dict}(字

典) set(集合)

2.python 中列表,字典,元组的区别列表与字典的区别

1.列表是[],字典是{},并以键值对的形式存在

2.列表是⼀个有序对象集合,字典是⼀个⽆序的对象集合

3.字典可以通过键来进⾏存取,列表可以通过偏移来存取列表与元组,集合的区别

1.列表是[],元组是(),集合{}

2.列表、集合中的元素可以修改,元组⾥的元素是不可以修改的

3.列表元组是有序的,集合是⽆序的 3.什么是切⽚

通过下标的⽅式来获得⼀个数据元素,或者通过指定下标的范围来获得⼀组序列的元素

切⽚的操作符:[] [:] [::]

4.输出 1+2+3+4+···+99+100 的和

m=0 for i in range(1,101):

m=m+i

print(m)

5.输出 1+1/2+1/3+···+1/99+1/100 的和

m=1 for i in range(2,101):

m=m+1/i

print(m)

6.list=[9,6,2,4,8,7]按照从⼩到⼤写⼀个冒泡排序 list=[9,6,2,4,8,7] j=0 while j

if list[i]>list[i+1]:

list[i],list[i+1]=list[i+1],list[i] i=i+1

j=j+1

print(list)

7.如何将⼀个字符串(列表)进⾏反转输出?

2 种⽅式 1.list[::-1] 2.list.reverse()

8.输出 10 的阶乘 a=int(input('请输⼊⼀个整数,我们将会算出它的阶乘:'))#转换格式

w=1 if a==0: print('0 没有阶乘') elif a<0:

print('负数没有阶乘') else: for i in range(1,a+1):

w=w*i

print(w)

9.公司⾥的开发框架 SSM(spring+springmvc+mybatis)

10.开发语⾔ java,测试语⾔ python

七、测试⽤例知识

1.编写测试⽅法都有哪些等价类划分法、边界值分析法、错误推测法、因果图法、场景设计法

2. 介绍⼀下每种测试⽅法(定义)并举例说明等价类划分法定义:输⼊有效的等价类和⽆效的等价类的数据进⾏测试,有效等价类:是指合理的、有意义的数据。

如:测试⼿机号码输⼊框 正常格式输⼊

⽆效等价类:与有效等价类的定义相反。指不合理的或⽆意义的数据。对于具体问题,⽆效等价类⾄少应有⼀个,也可以有多个。

如:测试⼿机号码输⼊框 输⼊错误格式(2.5.6 开头等)边界值分析法边界值分析法就是对输⼊或输出的边界值进⾏测试的⼀种⿊盒测试⽅法。通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试⽤例来⾃等价类边界。

如:测试⼿机号码输⼊框 输⼊ 10.11.12 位⼿机号其中 11 位是正确的 10.12 位为边界值错误推测法基于经验和直觉推测程序中所有可能存在的各种错误,从⽽有针对性的设计测试

⽤例的⽅法。

如:测试返回按钮,根据经验设计⽤例,测试其功能是否可⽤,与物理返回键点击后结果是否⼀致,返回的界⾯是否是需求要求的上个⽹⻚等等⼀切可能出现的错误因果图法是⼀种利⽤图解法分析输⼊的各种组合情况,从⽽设计测试⽤例的⽅法,它适合于检查程序输⼊条件的各种组合情况。

如:测试⾃助售卖机场景设计法现在的软件⼏乎都市要事件触发来控制流程的,事件触发时的情景便形成了场景,

⽽同⼀事件不同的触发顺序和处理结果就形成事件流

3.登录框的测试⽤例

1、账号框

1 账号⻓度 2 输⼊内容 3 为空/空格/特殊字符/字⺟汉字

2、密码框

1密码⻓度 2密码是否加密 3输⼊旧密码 4密码为空/为空格/特殊字符/下滑线 5 密码错误是否会提醒 6 密码是否区分⼤⼩写

3、验证码框

1 输⼊上⼀个验证码 2 点击验证码是否刷新验证码 3 验证码错误,账号密码正确是否登录成功 4 验证码输⼊字⺟/汉字/为空/空格/特殊字符 5 验证码是否区分⼤

⼩写 6 输⼊错误登录验证码是否⾃动刷新 7 验证码是否可以正常显示

4、登录按钮

1 账号密码验证码都正确是否可以正常点击登录 2 账号密码错误是否可以正常点击 3 双击登录是否会重复登录 4 登录后⻚⾯跳转是否正确

5、⽤户名和密码关系

1 账号正确,密码正确 2 账号正确,密码错误 3 账号错误,密码正确 4 账号错误,密码错误

6、⾃动登录

1 不勾选下次⾃动登录是否可以⾃动登录 2 勾选下次⾃动登录是否可以⾃动登录

7、兼容性

1 ⻚⾯是否兼容主流浏览器⽐如 IE,Firefox,Chrome 2 ⻚⾯是否在不同类型⼿机⾥⾯打开 3 在不同的操作系统的浏览器⾥是否可以打开⽐如 Windows 和 mac 浏览器 4 是否⽀持⼀个账号多台机器登录 5 是否⽀持⼀个账号同⼀机器多次登录 6 是否⽀持⼀台机器多个账号登录 7 是否⽀持不同系统登录同⼀个账号 8 ⼿机和电脑能都同时登录 0 是否⽀持不同版本的系统登录

4.签字笔的测试⽤例

1、性能

1、签字笔所能承受压⼒的上限 2、签字笔所能承受温度的上限/下限 3、签字笔能够连续写多久 4、签字笔⻓时放置后是否可以正常使⽤ 5、签字笔笔尖内钢珠是否易损坏 6、⻓期⼲燥或者潮湿的环境是否可以使⽤ 7、签字笔的标签或笔身

⽂字是否易于脱落 8、笔芯的使⽤寿命上限

2、兼容性

1、签字笔是否可以搭配主流类型的笔芯 2、签字笔是否兼容不同的书写材质

3、签字笔配件是否可以替换

3、界⾯设计

1、签字笔是否印有规格说明

4、功能

1、签字笔是否可以正常使⽤ 2、签字笔油墨是否易⼲ 3、签字笔书写是否流利

4、签字笔字迹显示是否持久 5、签字笔笔尖的粗细是否与规格说明⼀致

5、易⽤性

1、签字笔是否便于携带/悬挂 2、签字笔使⽤是否舒适(⻓度/重量/粗细/⼿感) 3、签字笔是否易于更换笔芯 4、签字笔是否有防滑措施

6、安全性

1、签字笔材质和笔墨是否有害 2、签字笔⼩零件是否留有呼吸孔 3、签字笔是否印安全提示 例:(三岁以下禁⽤) 4、签字笔的材质是否符合业界标准

5、笔尖是否易于伤⼈ 6、笔墨是否易燃

5.⼆维码的测试⽤例

1、功能

1.在不同⻆度和⽅向扫描⼆维码是否可以正常 2.部分缺失或模糊的⼆维码是否可以正常扫描 3.⼆维码在光线不好的情况下是否可以正常扫描 4.⼆维码在有透明遮挡物情况下是否可以扫描 5.⼆维码失效后能否扫描 6.⼆维码扫描后是否能够正常打开 7.⼆维码可以扫描的 ⼤ ⼩距离 8.⼆维码可以识别的 ⼩尺⼨是多少 9.⼆维码局部扫描是否可以正常 10.⼆维码是否有时效 11.⼆维码是否可以刷新 12.⼆维码是否具有唯⼀性 13.⼆维码是否可以多次分享并扫描 14.⼆维码是否可以连续多次扫描 15.⼆维码扫描内容是否可以为空 16.⼆维码是否有扫描次数上限 17.⽹络不好的情况下是否可以扫描 18.截图或拍照的⼆维码是否可以扫描 19.不同 app 的⼆维码是否可以互相扫描 20.扫描⼆维码⻓时间没有响应是否会有提醒 21.同时扫描多个⼆维码是否可以正常识别 22.不同形状/颜⾊的⼆维码是否可以正常扫描

2、兼容性

1.是否⽀持不同系统扫描 2.是否⽀持不同版本扫描 3.⼆维码是否⽀持不同设备扫描 4.⼿绘版⼆维码是否可以正常扫描

6.优惠卷的测试⽤例

1、功能

1.优惠券是否有效期 2.优惠券是否可以⼆次使⽤ 3.优惠券是否可以叠加,多叠加⼏张 4.优惠券是否能够分享和赠送并使⽤ 5.优惠券过期是否显示已过期 6.优惠券即将过期会不会提醒 7.优惠券过期是否可以使⽤ 8.优惠券是否可以跨店铺、跨品类、跨平台使⽤ 9.优惠券领取是否有资格限制 10 优惠券是否可以结合其他优惠⼀起使⽤⽐如会员价格 11.特价商品、预售商品、限购商品等是否可以使⽤ 12.使⽤优惠券结算是否正常扣减 13.⽀付时是否会提醒使⽤优惠 14.结算失败、

取消订单、退款优惠券是否返还 15.返还后的优惠券是否可再次使⽤ 16.单⼈多领取多少张优惠券 17.使⽤是否有⾦额 低 ⾼限制

2、兼容性

1.跨版本是否可以使⽤优惠券 2.跨系统是否可以使⽤优惠券 3.PC 端和 app 端的优惠券是否可以同步

3、界⾯优惠券设计是否符合需求符合 UI 设计稿

7.ATM 的测试⽤例

1、插卡:

1插⼊本⾏卡 2插⼊⾮本⾏卡 3插⼊失效卡 4插⼊⾮银⾏卡 5卡插反 6不插卡 7 插信⽤卡 8 插破损卡 9 插副卡 10ATM 故障是否可以插卡

2、输⼊密码:

1 输⼊ 6 位正确密码 2 输⼊ 5 位密码 3 输⼊ 7 位密码 4 不输⼊密码 5 输⼊旧密码 6 输⼊⾮数组 7 输⼊ 6 位错误密码 8 输⼊密码错误三次是否会锁卡 9 输⼊密码错误三次以上是否会吞卡 10 输⼊密码错误时是否提示可输⼊⼏次 11 密码输

⼊超时 12密码是否加密 13输⼊密码错误次数是否会累积 14输⼊密码途中退卡

3、取款⾦额:

1 输⼊ 100 的倍数 2 输⼊⾮ 100 的倍数 3 输⼊ 0 4 取款超过银⾏卡余额 5 取款超过单⽇上限 6 取款超过单次上限 7 取款超时 8 取款⾦额是否等于输⼊⾦额 9 取款之后余额是否正常扣减 10 跨⾏取款⼿续费计算是否正确 11 取款之后是否正常出钞 12 是否可以多次连续取款

4、退卡:

1.取款之后是否可以正常退卡 2.不取款退卡 3.退卡之后是否可以再次插卡 4.退卡之后系统是否退出当前账户 5.退卡超时之后是否提示 6.退卡超时之后是否吞卡

5、打印凭条

1.有纸打印,⽆纸打印 2.凭条信息是否正确 3.是否可以正常打印凭条

6、其他:

1 按键是否都可以正常操作 2 语⾔提示是否清晰悦⽿

8.微信发消息的测试⽤例

1、⽂字

1发送内容与输⼊内容是否⼀致 2⽂字单次发送个数上限 3汉字/英⽂/数字/特殊符号混发时是否可以发送 4 能否显示敏感字符(⽐如银⾏卡号、身份证号码等)

2、图⽚

1 单次发送图⽚张数校验 2 拍照/选择相册发送图⽚校验 3 是否⽀持常⻅图⽚类型⽐如 png,jpg,bmp,gif,jpeg 4 图⽚⼤⼩校验 5 发送之后图⽚能否正常展示 6 是否可以发送图原 7 是否可以发送表情包

3、语⾳

1 语⾳的时间⻓度是否有限制 2 能否正常发送声⾳ 3 语⾳/⽅⾔等是否可以转换⽂字 4 发送语⾳的时候是否可以取消 5 发送语⾳的时候是否可以直接转⽂字 6 发送语⾳将要超过时间限制的时候是否提示倒计时 7 发送完语⾳,语⾳时间⻓ 度是否显示正常 8 语⾳是否可以正常播放和暂停 9 语⾳过短是否提示语⾳消息太短 10 发送语⾳的时候是否实时显示发送的时间 11 语⾳是否可以在扬声器或听筒播放 12 语⾳发送成功之后是否有提示⾳ 13 语⾳发送途中来电话或者视频

以及⾳乐播放时是否正常 14 发送失败的语⾳是否可以点击重新发送

4、视频

1 发送完毕的视频是否可以正常播放和暂停 2 通过相机拍视频发送 3 视频的⼤⼩限制 4 通过相册选择视频发送 5 选择视频能够同时发送多少个视频 6 是否⽀持不同格式的视频⽐如 mp4,dvd,mv,rmvb 等 7 发送视频时常是否有限制 8 视频发送失败是否可以重新发送 9 发送视频的顺序是否是按照相册选择的顺序发送

10 发送完毕的视频显示的时⻓是否显示正确 11 拍摄视频发送途中来电话

5、链接

1 发送的链接是否能打开 2 发送的链接是否可以转发和多次转发 3 有缩略图的链接⽂案和图⽚展示是否合理

6、⽂件

1 是否⽀持常⻅的⽂件的类型⽐如 txt,xls,exe,ppt,doc 等 2 ⽂件的个数限制 3 ⽂件的⼤⼩限制 4 能否正常打开发送的⽂件 5 发送的⽂件是否可以收藏,保存和转发,下载 6 发送的⽂件是否可以显示⼤⼩ 7 发送的⼤⽂件是否可以暂停和继续发送

7、输⼊⽅式

1 语⾳能否正常输⼊ 2 ⼿写能否正常输⼊ 3 键盘能否输⼊

8、输⼊框

1 输⼊框内能否复制粘贴 2 输⼊框中的内容是否⽀持换⾏ 3 输⼊框中的内容上限 4 ⻓按输⼊框是否会提示复制粘贴 5 输⼊框内未发送的内容是否⽀持修改

9、其他

1 能否给⿊名单的好友发送消息 2 被好友删除后是否能发送信息 3 发送后的内容能否撤回/以及撤回的时间限制 4 发送后的内容能否删除 5 不同⽹络的类型能否发送消息 6 未发送成功的消息是否会提示 7 ⻓按头像是否可以@好友 8 是否⽀持⼿机,电脑,⽹⻚消息同步 9 发送内容为空为空格是否提示 10 输⼊消息的时候,对⽅是否会显示输⼊状态 11 ⽹络不好或者⽆⽹情况下是否可以发送 12 已经超过有效时间的⽂件或图⽚是否可以查看 13 聊天⻚⾯点击输⼊框是否弹出键盘 14 违法或者敏感信息是否提示

10、界⾯是否符合 ui 设计稿

9.三⻆形得测试⽤例

1、⽆效等价类型:整数:⼀边边⻓为⾮整数,两边边⻓为⾮整数,三边边⻓为⾮整数。

三个数:只输⼊⼀个边⻓,只输⼊两个边⻓,输⼊三个边⻓以上。

⾮零数:输⼊⼀个边⻓为 0,输⼊两个边⻓为 0,输⼊三个边⻓都为 0。

正数:输⼊⼀个边⻓为负数,输⼊两个边⻓为负数,输⼊三个边⻓都为负数。构成三⻆形:任意两边之和⼩于 0,任意两边之和等于 0,任意两边之和⼩于第三边,任意两边之和等于第三边

2、有效等价类型:输⼊三个整数:三个边,⾮零数,整数构成⼀般三⻆形:任意两边之和⼤于第三边等腰三⻆形:任意两边相等且两边之和⼤于第三边等边三⻆形:三边都相等

10.微信点赞的测试⽤例

1、点赞

1 点赞是否成功 2 点赞是否按点赞先后顺序显示 3 给朋友点赞 4 给⾃⼰点赞 5 共同好友之间的点赞是否会有提醒 6 ⾮好友是否可以点赞 7 点赞之后是否可以取消 8 点赞之后被删除好友,点赞是否还存在 9 没⽹是否可以点赞 10 点赞成功是否有提示,⽐如有红⼼ 11 点赞⼈数是否有上限 12 点赞成功之后被点赞的⼈是否有提示 13 取消点赞之后是否可以再次点赞 14 删除该条动态点赞是否还可以查看 15⼤批量同时点赞是否可以点赞成功或是否有遗漏 16点赞之后更个⼈信息更改,信息是否有变动 17 多⼈点赞情况下是否是按照逗号间隔 18 多⼈点赞对于⻓⽤户名的是否可以⾃动换⾏ 19 是否可以跟图⽚/视频/⽂字/链接等不同类型的动态点赞 20 点赞总⼈数统计是否显示正确 21 点赞⼈微信名包含特殊符号是否可以点赞 22 是否可以点赞历史动态 23 ⽹络不好或者⽆⽹状态下是否可以点赞 24 拉⿊后能否点赞 25 点击点赞⼈头像是否可以查看资料

2、取消点赞

1 是否可以取消别⼈/取消⾃⼰的点赞 2 取消点赞之后好友是否会有提示 3 取消点赞之后是否可以再次点赞

3、兼容性

1 不同系统直接是否可以点赞 2 不同系统直接点赞是否可以显示 3 不同微信版本是否可以点赞/显示

4、界⾯

1 是否符合需求⽂档 ui 设计稿

11.购物⻋的测试⽤例

1、添加商品

1 查看商品是否添加成功 2 查看商品添加内容是否与选择⼀致(店铺名称/商品名称/单价/数量/尺码) 3 ⽹络不好的情况下是否能够正常添加购物⻋ 4 不登录账号是否可以添加

2、购物⻋

1 点击+、- 数量是否跟随变化 2 单个商品添加是否有上限 3 购物⻋添加商品总数量是否有上限 4 点击删除按钮商品是否可以删除 5 商品添加框能否⼿动输⼊商品数量 6 商品增删后⾦额计算是否正确 7 商品添加是否能够超过现有库存 8 购物⻋商品列表是否根据添加时间倒叙排列 9 只有⼀件库存时多⼈同时能否添加 10 添加购物⻋之后商品下架能够正常展示 11 商品信息是否会随商家修改⽽更新 12是否可以批量删除 13同家店铺的商品是否会汇总到同家店铺下⽅ 14添加商品是否会有有效期 15 特价商品/活动商品/预售商品/限购商品等是否可以添加到购物⻋ 16 ⼤量商品的情况下是否可以分⻚ 17 同件商品不同尺码是否分开显示 18 光标放置商品信息上是否显示详细信息

3、勾选按钮

1 点击全选按钮能否全选或取消全选,全选商品数量是否统计正确) 2 能否单个选择,⾦额显示是否正确 3 点击收藏按钮图标是否变红 4 光标放在收藏按钮上是否出现收藏字段 5 商品收藏成功后是否放置在收藏夹 6 点击商品信息是否跳

转 7 点击商家名称是否跳转 8 商品数量分⻚的时候是否可以全选和按⻚选择

4、结算

1 结算⾦额是否与选定商品⼀致 2 增加、减少商品时结算⾦额是否变化 3 结算按钮是否能够正常使⽤ 4不同店铺/不同类型/不同优惠的商品是否可以参与结算 5 库存不⾜商品能否结算 6 已下架/已失效商品能否结算 7 多可以结算多少件商

品 8 结算失败商品是否可以正常展示 9 ⽹络不好是否可以正常结算

5、兼容性

1 同⼀个浏览器账号退出之后,重新登陆后购物⻋内的产品是否有变化 2 不同系统版本登录购物⻋内是否有变化 3 更换设备之后登录购物⻋是否有变化 4APP 端和 pc 端登录之后购物⻋内信息是否正常 5 更换浏览器之后登陆账号购物⻋内的商品是否有变化 6 同台机器切换其他账号购物⻋内容是否跟随更新

12.你们公司进⾏交叉测试吗?并简单说明⼀下什么是交叉测试交叉测试是指为了防⽌遗漏,保证产品质量,上线前进⾏模块互查。(⼀般在第三轮)三轮分别为

①进⾏冒烟测试

②进⾏全⾯覆盖性测试(系统测试)

③分别在测试环境、预发布环境和⽣产环境进⾏回归测试

13.项⽬写了多少条测试⽤例

⼤项⽬编写⼤⼏千条测试⽤例

⼩项⽬编写 8~900 条测试⽤例

14.在项⽬中发现了多少 bug

⼤项⽬发现 2~300 个 bug

⼩项⽬发现 100 个 bug 左右

15.⼀天能写多少测试⽤例

⼤概 40~50 条

(如果觉得多)测试⽤例写的⽐较详细

(如果觉得少)测试⽤例⼀般按流程⾛

16.⼀天能执⾏多少测试⽤例

⼤概 20~30 条

17.公司得⼈员得分配分别是怎样进⾏分⼯得(说出⼈员配备⽐例)

测试⼤概 3 个,开发⼤概 17~8 个,产品经理 1 个,项⽬经理 1 个测试:开发=1:3

18.迭代周期是多久以及迭代得时候得时间规划

⼀般两周迭代⼀次,如果功能⽐较多⼀个⽉迭代⼀次前两天进⾏需求评审(评审可能不⽌⼀轮),需求评审完,第⼀周到第⼀周结束,开发会进⾏代码开发的同时我们编写测试⽤例

19.测试⽤例都包含那些元素

1、⽤例 ID 2、⽤例名称 3、测试环境 4、⽤例级别 5、前提条件 6、操作步骤 7、预期结果 8、测试是否通过 9、设计⼈员

⼋、零碎知识

1.http 请求有哪些⽅式,常⽤的有哪些

GET 向特定资源发出请求来获取它

POST 向指定资源提交数据进⾏处理请求

PUT 向指定资源位置上传 新内容

Head 服务端接收到请求后只返回响应头,⽽不是发送响应内容

Delete 请求服务器删除内容

Trace 回显服务器收到请求,返回时带的协议,只要测试和诊断

Connect http/1.1 协议中能够将 / 连接改为 | 管道⽅式的代理服务器

Options 真正请求之前的⼀次预请求

2.http 状态码代表什么意思

1 开头:代表临时响应,还需要继续发送请求(中间状态,很少出现)

100 请求者还要继续提供请求,正在发送

2 开头:代表成功,操作成功接收并处理

200 代表成功(服务器已经成功处理请求)

3 开头:代表重定向,要完成⼀个请求,需要进⼀步的操作以完成请求(针对请求服务器)

302 需要重定向

305 被请求资源必须通过指定的代理才能访问

304 服务端已经执⾏了 GET,但⽂件未变化

307 与 302 ⼀样,需要重定向重定向:就是通过各种⽅法将各种⽹络请求重新定向转到其他位置为什么会发现 3 开头的:

1.⽹络调整

2.⽹⻚被移到⼀个新地址

3.⽹络扩展名被改

4 开头:代表客户端的问题,请求语法错误或者⽆法请求

400 代表请求错误,妨碍了服务器的处理(服务器⽆法解析请求的语法)

403指服务器拒绝请求

404指服务器找不到请求⽹⻚

410 指如果请求的资源已经永久被删除,服务器就会返回 410 告知⽤户

5 开头:代表服务器错误,服务器在处理请求的过程中出现错误(在尝试处理这个请求的时候,内部发⽣⼀些错误,这些错误可能是服务器本身的问题,⽽不是请求的问题)

500 服务器遇到错误⽆法完成请求

502 服务器作为⽹关或代理,从上游服务器收到⽆效响应(⽹络问题,导致服务器⽆响应)

505 服务器不⽀持请求中的 http 协议版本

3.APP 测试的测试点

除了 基本的功能、性能、接⼝、UI 等测试以外,还需要考虑 APP 的⼀些专项测试,⽐如,安装卸载、升级更新、权限、中断、推送消息、⼿势操作、⽹络、安全、兼容性、渠道包等测试。

1.功能测试

主要测试软件功能是否满⾜需求

2.接⼝测试

测试各个模块之间的数据传输是否正确

3.性能测试

主要测试 APP 的性能是否满⾜预定的需求

4.UI 测试

测试 APP 的⻚⾯布局⻚⾯样式⻚⾯交互,字体⼤⼩,颜⾊等是否满⾜设计稿

5.安装卸载测试是否可以正常安装卸载是否可以重复安装是否⽀持后台安装卸载之后是否可以再次安装卸载之后数据是否有残留正在下载中或者正在安装中的软件是否可以卸载软件正在使⽤时是否可以正常卸载⾮应⽤商店软件是否可以提示⻛险安装时内存不⾜是否可以正常安装系统版本过低是否可以正常安装

6.升级更新测试是否可以正常升级更新更新时突然断⽹,断电是否正常更新是否⽀持断点续传(更新过程中关闭,再次开启更新是否可以继续上次未完成的)是否⽀持后台⾃动更新,以及⼿动更新是否⽀持跨版本更新(跨多个版本直接更新到 新版本)升级后的版本是否可以回退到之前的版本升级后原有数据是否正常保留在软件使⽤中是否可以正常更新内存不⾜时是否可以正常提示

7.权限测试

是否可以正常打开或关闭通讯录,相册,相机,⽹络,地理位置,⻨克⻛等权限权限未获取时,是否可以正常使⽤获取权限时选择仅⼀次或者始终获取时测试

VIP ⽤户和普通⽤户的权限测试(权限是否⼀致)获取第三⽅登录权限测试(如⽀付宝登录,微信登录权限)获取权限后卸载了再次安装是否提示获取权限

8.中断测试

在软件运⾏过程中突然来电,断电,下载,听⾳乐,看视频时软件的运⾏情况(如

QQ ⾳乐听歌时听⼀个微信语⾳,听完语⾳是否可以接着原来的歌播放)推送消息测试(极光推送(⼀个专负责消息推送的公司))消息是否可以正常推送消息是否⽀持对不同⽤户推送禁⽌推送消息之后是否还可以收到点击推送消息链接,跳转是否正常是否可以在指定时间段内推送消息

⽹络不好未收到,恢复⽹络后推送的消息是否可以正常接收

9.⼿势操作测试

是否⽀持下拉刷新,上划加载,左右滑动前进,back 键返回,截屏,放⼤和缩⼩等测试

10.⽹络测试

在⽆⽹络,⽹络信号差,2G,3G,4G,5G 以及 WIFI 和热点以及不同⽹络模式

(移动联通电信)等情况下的⽹络测试

11.安全测试

主要考虑⽤户隐私信息是否加密,⽤户的权限获取等测试

12.兼容性测试(从⼤往⼩说)

⾸先系统平台安卓和 IOS

考虑系统版本

Android5.0,Android6.0,Android8.0/iOS9,iOS10,iOS11,iOS12,iOS13 等主流版本如何判断是否是主流系统版本:根据公司后台专⻔统计的数据,每个系统版本,每款⼿机型号所占⽤户⽐例来判定考虑不同⼿机型号

Android:三星,华为,OPPO,vivo,⼩⽶ IOS:iPhone7 7P 8 8P X 11 XS XSMAX 考虑不同⼿机屏幕尺⼨

如:5.0 ⼨ 5.5 ⼨ 6.0 ⼨ 6.5 ⼨等尺⼨考虑不同屏幕分辨率

⽐如 720 1080 2k 等屏幕分辨率渠道包测试主要是发布 APP 的时候会根据不同的渠道进⾏打包,⽐如安卓市场、豌⾖荚、应⽤宝等不同渠道,那么就会有不同的渠道包,渠道包是开发在代码⾥⾯进⾏编辑的我们需要注意的是验证发布的渠道与渠道包的名字是否匹配,以及发布之后是否可以正常下载安装,升级和更新

4.定位问题的 4 种⽅法

根据 http 的返回状态码来定位问题。

⽐如:

1xx:代表临时响应,还需要继续发送请求(中间状态,很少出现)

2xx:代表成功,操作成功接收并处理

3xx:代表重定向,要完成⼀个请求,需要进⼀步的操作以完成请求(针对请求服务器)

4xx:代表客户端的问题,请求语法错误或者⽆法请求

5xx:代表服务器问题

2.根据抓包定位问题,如果抓到的包跟数据库⼀致但是跟⻚⾯显示不⼀致那么可能是前端的问题,如果抓到的包跟前端显示⼀致但是跟数据库不⼀致那么可能是后端的问题。

3.查看⽇志定位问题,查看系统⽇志中的报错信息,如果是调⽤其他服务出现了问题,那么我们就要去对应的服务去追踪这个问题,查看问题出现的根源,因为

⼀个业务可能是由多个服务相互调⽤去组成的。

4.查看数据库,查看落库数据的数据格式和落库位置以及数据计算是否正确,数据是否符合业务规则。

5.Web 测试与 app 测试的区别

⾸先 web 测试和 APP 测试在测试流程上并没有什么⼤的区别我个⼈觉得是由于载体不⼀样,所以在系统测试的时候会有⼀些细节不⼀样

⾸先从系统架构来看

Web 是 B/S 架构,基于浏览器的。⽽ app 是 C/S 架构,基于客户端的 web 测试只要更新了服务器端的内容,⽤户端就会同步更新。⽽ APP 端如果修改了服务器的资源或者架构,严格来讲,客户端所使⽤的所有核⼼功能都需要回归测试⼀遍。

4.然后是兼容性⽅⾯

⾸先 web 测试是基于浏览器的,⼀般测试的时候以浏览器的兼容性为主,我们⼀般考虑的是不同内核的浏览器,如 IE,⽕狐,⾕歌

⽽ APP 的兼容性测试必须依赖⼿机或者 pad,我们在测试的过程中不仅要考虑操作系统,⽐如安卓和 iOS,还有不同系统版本,以及主流的⼿机型号,包括不同屏幕⼤⼩,不同屏幕分辨率等⽅⾯

5. 后相⽐ web 测试 app 测试⼜多了⼀些专项测试⽐如:安装卸载,升级更新,权限,中断,消息推送,⽹络,安全,⼿势操作,渠道包等测试

6.如果⽹⻚打不开如何排查问题?

1.是否因为没⽹(检查⽹线,检查⽹路是否正常)

2.⽹速过慢,连接超时

3.检查防⽕墙是否打开

4.⽹址本身就存在问题

5.电脑设置了相关的 host

6.Nginx 出现问题

7.DNS 出现问题

8.⽹站证书出现问题

9.浏览器是否授权使⽤⽹络

10.浏览器版本与⽹⻚不兼容

11.浏览器有故障

12.浏览器设置了代理

13.服务器是否拒绝请求

14.服务器不存在请求的⽹⻚(被永久删除或转移到其他⽹⻚)

15.服务器不⽀持当前的协议版本

16.服务器出现拥堵/崩溃

17.停服

18.服务器作为⽹关或代理,从上游服务器收到⽆效响应

19.请求中数据包丢失

20.本地资源占⽤过多

21.电脑有病毒

7.http 与 https 的区别? https 简单来讲是 http 的安全版 http 的默认端⼝是 80,https 的默认端⼝是 443 https 协议是由 http+ssl 协议构成的⽐ http 协议更加安全 http 协议的特点:协议简单、灵活、通信速度快、允许传输任意类型的数据

8.⼩程序测试点?除了 基本的功能、性能、接⼝、UI 以及业务流和数据流的测试以外,还需要考虑⼩程序本身的⼀些特点:

(1)⼩程序分为三种类型:开发版,体验版,正式版项⽬中⼀般准备三套环境开发版针对开发⼈员去开发,体验版供测试使⽤,⽣产环境使⽤正式版

(2)⼩程序的⼀些限制

⻚⾯层级跳转不能超过 10 层

⽤户本地缓存不能超过 10M

⼩程序代码⽂件⼤⼩不能超过 3M

⽽且⼩程序需要提交微信审核才能发布在测试的时候⼩程序有⼀些专项测试,如:权限、缓存、⻚⾯层级跳转、兼容性、

⽹络、更新、业务流和数据流的测试。

1.权限测试

获取⽤户权限测试,⽐如⽤户头像,性别,昵称等信息已授权/未授权进⼊⼩程序同⼀微信号在不同⼿机端的权限测试重新授权

⼩程序内部的⼀些权限,⽐如 VIP ⽤户和普通⽤户权限

2.缓存测试

不同⼩程序之间的数据是否正确同⼀微信号使⽤不同⼿机登录时数据是否正确同⼀⼿机登录多个或者不同微信号,数据是否正确

3.⻚⾯层级跳转

⻚⾯层级跳转不能超过 10 层上下级的进⼊和返回是否正确上下级的进⼊和返回是否有相应按键

⻚⾯层级跳转加载速度测试列表和菜单的测试

4.兼容性测试

⼿机操作系统测试

⼿机不同系统版本测试

⼿机不同型号测试不同屏幕尺⼨测试不同屏幕分辨率测试不同微信版本测试

5.⽹络测试

6.更新测试

⼩程序更新中的两种机制

(1)是否可以正常更新

(2)未启动时更新(后台静默更新到 新版本)

(3)启动时更新(每次冷启动的时候会检查是否有下载,新版本会在下次冷启动时候应⽤)

新的版本,如果有就⼀步

7.业务流和数据流的测试业务的流程是否正常(业务流),以及在业务流程中数据的传输是否正常(数据流)。⽐如购物⻋的下单流程,选择商品,加⼊购物⻋,进⼊购物⻋,付款流程。测试数据流⽐如添加的商品数据库否是下单的商品,加⼊购物⻋的数据是否正确等

9.H5 测试点

H5 测试除了 基本的功能,性能,接⼝,UI 测试外,还要⼀些专项测试:

1.针对登录模块的测试

(1)登录 app 那么进⼊ H5 的时候也应该是登录状态

(2)若 app 未登录那么应该触发单点登录系统去提示登录

(3)app 的 cookie 或者 session 过期的时候是否提示登录

2.刷新、翻⻚返回测试

(1)是否可以正常刷新或者返回

(2)点击物理 back 键是否可以返回

(3)单次或者多次刷新是否正常

(4)翻⻚之后⻚⾯是否可以正常加载

3.屏幕旋转测试

4.⽹络测试

5.滑动定位焦点是否准确

6.兼容性测试(跟 app 兼容性是⼀样的)系统平台、系统版本、不同型号、屏幕⼤⼩、屏幕分辨率

7.链接分享测试

(1)链接分享时候的标题是否展示完整

(2)分享之后是否可以打开,⽤户信息是否正确

(3)链接是否可以多次分享

(4)分享之后的⻚⾯样式和格式是否美观

(5)分享之后的点赞或者评论数据是否正确

(6)不同系统不同 app 之间的链接分享测试

10.OSI 七层模型

包含:应⽤层表示层会话层传输层⽹络层数据链路层物理层

TCP/IP 模型

包含:应⽤层传输层⽹际层⽹络接⼝层应⽤层:为应⽤软件提供很多服务,⽐如⽂件服务,数据库服务

11.Cookie 与 session 的区别

1、cookie 的数据是存放在客户端的浏览器上,session 数据是存放在服务器上的 2、cookie 不是很安全,别⼈可以分析本地 cookie 修改缓存,cookie 欺骗类似于打断点改⽤户的登录信息

3、session 会在⼀定时间内存放在服务器上,当访问增多的时候,会占⽤服务器的资源

4、⼀般情况下 cookie 的⼤⼩为 2048 个字符,很多浏览器限制⼀个 web 节点 多

保存 20 个 cookie,⼀个浏览器 多保存 300 个 cookie

5、将登录信息账号和密码等隐私信息或重要信息存放在 session ⾥⾯,其他信息保留可以 放在 cookie ⾥

12.什么是 token?

⼀般应⽤于⼿机端(app)

组成:(uid)⽤户,(time)时间戳,(sign)签名

基于 token 的验证⽅式,在服务器端不需要存储⽤户的登录记录;

⾸先客户端使⽤⽤户名和密码进⾏请求登录,服务器收到请求之后去验证⽤户名和密码,验证成功后,服务端会签发⼀个 token,再把这个 token 传给客户端。客户端收到 token 后,把它存储起来,⽐如说可以存放在客户端的 cookie ⾥⾯。⽤户之后每次向服务器请求的时候都要带着服务器签发的 token 服务器收到请求之后,然后去验证 token 是否正确,如果正确就返回数据,不正确就提示重新登录。

同时服务器也会验证 token 有效期。

13.TCP 与 UDP 的区别?

1.TCP 是⼀种可靠的,⾯向有连接的⼀种协议,建⽴连接时需要三次握⼿,断开连接时需要四次挥⼿,它规定浏览器向服务器发送请求数据的时候必须发回确认,所以 TCP ⽐较稳定,但是它也有缺点,因为 TCP 在与服务器交互的过程中其中包含了确认机制,重传机制,拥堵机制等等,相当于 UDP 来讲⽐较耗时间。

2.UDP 是⼀个⾯向⽆连接的⽆状态的传输协议,没有 TCP 的握⼿、确认,重传,拥堵等机制,所以他在传输的过程中⽐较快,但是同时它⼜是不可靠的,不稳定的,⽐如说在和服务器进⾏交互的过程中如果遇到⽹络不好的状态下会造成数据包的丢失。

14.TCP 的三次握⼿与四次挥⼿是什么?三次握⼿:

1.客户端向服务器端发送请求包要求联机

2.服务器收到请求数据后确认联机信息并向客户端发送建⽴连接的确认包

3.客户端收到确认包后先确认是否正确,正确的话再向服务器发送⼀个确认包,服务器确认后开始连接。

四次挥⼿:

1.客户端向服务器端发送结束包,进⼊结束等待状态

2.服务器收到结束包后发回结束确认包,服务器进⼊结束等待状态

2.服务器再次发送第⼆个结束包来关闭数据传输,服务器发送后进⼊ 后确认状态

4.客户端收到第⼀个结束包进⼊等待状态,收到第⼆个结束包时,发送回⼀个确认,序号加⼀,服务器收到后关闭数据连接,客户端在等待 2MSL 后也关闭连接。

15.什么是对称性加密和⾮对称性加密对称性加密:加密和解密都是使⽤同样的密钥

⾮对称性加密:使⽤两个密钥,⼀个是公钥,另⼀个是私钥,成对出现

16.简单说⼀下 anr 与 crash 产⽣的原因有哪些? app 出现 ANR 的原因:app 卡死,操作⽆响应

1.耗时的⽹络访问

2.⼤量的数据读写

3.服务器繁忙导致连接超时⽆响应

4.其他线程持有锁,导致主线程等待超时(理解:⽐如多个⽤户同时修改库中的某

⼀数据表的某个字段值,上⼀个⽤户修改时这个进程是锁定的,上⼀⽤户修改完成后下⼀⽤户才能修改,如果上个⽤户⼀直不提交,下⼀个⽤户的修改请求就⼀直在等待中,这样就可能会造成服务器等待超时)

5.其他线程终⽌或者崩溃导致主线程⼀直等待(其他线程终⽌或者崩溃,导致数据⽆法正常传输到主线程) app 出现 crash 的原因:闪退

1.可能内存过低,不能满⾜ app 运⾏所需要的内存,导致 app 跑不起来⽽ crash

2.内存泄露造成 crash(内存泄漏:⼀般指堆内存中,原则上关闭程序后会把占⽤内存释放掉,如果关闭程序后内存并没有被释放出来则指内存被泄漏了。)

3.程序逻辑错误或者数组越界。

4.设备不兼容:由于设备的多样性,app 在不同的设备上⾯不能正常运⾏导致 crash

5.由于⽹络原因,⽆法达到 app 快速响应的时间⽽导致 crash

九、bug 管理⼯具

1.禅道⾥边哪⼏列是测试相关列?我的地盘、产品、项⽬、测试、⽂档⼏列我的地盘:⾸⻚、代办、任务、Bug、测试、需求、项⽬产品:需求、动态、计划、⽂档、项⽬、模块项⽬:任务、需求、BUG、版本、测试、团队、⽂档、产品测试:BUG、⽤例、版本、报告、⽤例库

⽂档:所有测试中可以⽤到的⽂档

2.禅道如何提 bug

测试 -- BUG-- +提 BUG

3.Jira 如何提 bug

JIRA ⾸⻚ --- 问题 --- 提问题

4.Redmin 如何提 bug

Redmin ⾸⻚ --- 选择⼀个项⽬ --- 问题 --- 新建问题

5.Bug 的状态有哪些

按处理状态分类:新提交的、待确认的、问题未解决、问题已解决、待返测的、已验证的、已关闭的按处理意⻅划分:已修改的、不是问题、⽆法修复、以后版本解决、保留、重复、

⽆法重现

6.Bug 在指派⼀个开发以后还可以再指派给另⼀个开发吗?可以,在编辑 bug 时可以修改

7.在提 bug 的时候都包含哪些内容?所属项⽬所属模块 Bug 类型 Bug 标题影响版本

Bug 的严重程度

Bug 的优先级问题描述以及附件

8.能不能⾃⼰给⾃⼰提 bug 可以,将 bug 单指派给⾃⼰就可以了

9.项⽬管理⼯具有哪些?禅道、JIRA、Redmine

⼗、版本控制⼯具

1.版本控制⼯具如何下拉仓库⾥边的内容(从⽆到有)(SVN/GIT)

在 SVN 中:在本地库中右键单击,选择 tortoise SVN ---版本库浏览器然后输⼊地址,账号密码登录,登陆完毕后选择要下载的⽂件右键单击选择检出即可下拉到本地库

在 GIT 中:在本地库中右键单击,选择 GIT bash here 然后输⼊ git clone+⽂件完整路径,即可下拉库⾥边的⽂件到本地库

2.如何将本地库更新⾄最新?

在 SVN 中:在本地库中右键单击空⽩地⽅,选择 SVN 更新即可更新⾄ 新版本在 GIT 中:在本地库中右键单击,选择 git bash here 输⼊ git pull 可以更新本地库⾄ 新

3.如何把本地库的内容上传到服务器?

在 SVN 中:在本地库中右键单击要上传的⽂件,点击 tortoise SVN ---加⼊,然后空⽩地⽅右键单击,选择 SVN 提交即可上传⾄服务器

在 GIT 中:在本地库中右键单击,选择 git bash here 然后输⼊:

git pull

git add ./⽂件名

git commit -m ‘备注’

git push origin master 即可上传本地⽂件到服务器第⼀次上传需要输⼊邮箱和⽤户名: git config --global user.email ‘邮箱’ git config --global user.name ‘姓名’

⼗⼀、抓包

1.发现 bug 如何进⾏定位问题?

1.根据 http 的返回状态码来定位问题。

⽐如:

1xx:代表临时响应,还需要继续发送请求(中间状态,很少出现)

2xx:代表成功,操作成功接收并处理

3xx:代表重定向,要完成⼀个请求,需要进⼀步的操作以完成请求(针对请求服务器)

4xx:代表客户端的问题,请求语法错误或者⽆法请求

5xx:代表服务器问题

2.根据抓包定位问题,如果抓到的包跟数据库⼀致但是跟⻚⾯显示不⼀致那么可能是前端的问题,如果抓到的包跟前端显示⼀致但是跟数据库不⼀致那么可能是后端的问题。

3.查看⽇志定位问题,查看系统⽇志中的报错信息,如果是调⽤其他服务出现了问题那么我们就要去对应的服务去追踪这个问题,查看问题出现的根源,因为⼀个业务可能是由多个服务相互调⽤去组成的。

4.查看数据库,查看落库数据的数据格式和落库位置以及数据计算是否正确,数据是否符合业务规则。

2.⼯作中抓包的内容

1.URL

2.请求参数

3.请求⽅式

4.请求头的内容

5.响应头的内容

6.响应结果

3.Fiddler 进⾏抓包?

Fiddler 抓电脑端 http 包:

1.先打开浏览器的⼯具,浏览器设置——Internet 选项—连接—局域⽹设置—⾼级,查看 HTTP 设置和安全是否为 127.0.0.1 端⼝是否为 8888(PC 配置代理)

2.打开 fiddler-tools-tools options-connections 查看端⼝号是否为 8888

3.打开⽹⻚访问,查看是否可以抓包。

Fiddler 抓电脑端 https 包:

1.在抓电脑端 http 包的基础上

2.在 tools(⼯具)---options(设置)---HTTPS。勾选,安装 fiddler 的根证书,就可以抓 HTTPS 的包了

4.fiddler 如何进⾏弱⽹测试

使⽤ fiddler 进⾏弱⽹控制

⾸先我们要配置好代理

在 FiddlerScript ⾥⾯修改数据上传下载的延迟速度

然后在 rules->performance ⾥⾯有⼀个 simulate modem speeds(控制调制解调器速度)打开这个弱⽹测试开关然后就可以模拟上传下载的速度进⾏弱⽹测试。

5.fiddler 如何进⾏打断点(打断点,改参数)

Fiddler 中打断点分两种:全局打断点

在 fiddler--Rules--Automatic Breakpoints

before requests(请求之前)在请求内容的 inspectors(嗅探)中修改参数

After responses(响应之后)在响应内容(Raw)中修改参数单个断点:

在左下⻆命令⾏(⿊⾊输⼊框)

输⼊ bpu+⽹址回⻋ -------在请求前对单个⽹址打断点

输⼊ bpu 回⻋ --------取消请求前打断点在左下⻆命令⾏(⿊⾊输⼊框)

输⼊ bpafter+⽹址回⻋ -------在响应后对单个⽹址打断点输⼊ bpafter 回⻋ --------取消响应后打断点

6.fiddler 怎么抓 HTTPS 的包?在抓电脑端 http 包的基础上

在 tools(⼯具)---options(设置)---HTTPS 点击勾选,安装 fiddler 的根证书,就可以抓 HTTPS 的包了

7.fiddler 怎么抓⼿机的包?第⼀步抓 HTTP 的包

1.⼿机连接与电脑⼀样⽹络的 WIFI(保证⼿机与电脑处于同⼀局域⽹下)

2.打开⼿机 WIFI 设置,将连接的这个 WIFI 的代理设置中改为⼿动,IP 改为所在电脑的 IP,端⼝号设置为 8888

3.电脑 fiddler 在设置 tools---options----conncetions 中将 ACT as systems...这项取消勾选(关闭 windows 代理) 第⼆步抓 HTTPS 的包

1.在第⼀步的基础上。⼿机⽹⻚输⼊ localhost:8888 ⼿机会提示安装证书

you can download the FiddlerRoot certificate,⼿机安装证书

2.然后就可以测试 https 的⼿机的包了

8.为什么要进⾏抓包?在程序运⾏的数据交互中,传输的数据⼀般都是以数据包的形式传输。在这个发送和接收的过程中,可能发出的数据包中有错误的数据,也可能接收的包中有错误的数据,从⽽导致后期的程序处理出错。因此我们直接抓取传输中的数据包,通过其他⼯具或⽅法解析数据包中的原始数据,就可以定位是否是因为数据出错

⽽导致程序出错,如果出错⼜是哪⼀部分的数据出错等。

9.如果发现⼀个按钮点击没有反应该如何定位问题?

1.⽹络断了

2.按钮下⾯配置的地址失效

3.本机设置了代理

4.服务器问题

10.为什么要进⾏打断点?

⽐如⼀个购买的⾦额输⼊框,输⼊框前端做了限制 100-1000,那么我们测试的时候,需要测试⼩于 100 的情况下。很显然前端只能输⼊⼤于 100 的。这是我们可以先抓到接⼝,修改请求参数,绕过前端,传⼀个⼩于 100 的数,检查服务端的功能是否 OK。/或者按照以下回答: /可以通过抓到接⼝,修改请求参数,绕过前端,传输数据请求,检查服务端的功能是否 OK。或者请求响应后,修改响应内容,绕过前端,测试数据传输是否正常

11.为什么进⾏弱⽹测试?弱⽹测试的情况下看下软件是否还能使⽤

⼗⼆、接⼝测试

1.什么是接⼝测试:接⼝测试是测试的系统与系统之间,或者模块和模块之间的数据,测试的重点是查看传输的数据是否正确,是否符合要求。

2.接⼝测试原理:模拟客户端向服务器发送请求,服务器接收请求之后对请求作出相应的处理,并把相应结果返回给客户端。

3.如果没有接⼝⽂档我们如何测试接⼝?我们会抓包,先把这个接⼝抓到然后再去测试这个接⼝。

4.接⼝⽂档都包含哪些内容?请求地址请求⽅式请求参数参数详解相应结果结果详解

5.常⻅接⼝的协议类型

HTTP 协议接⼝

HTTPS 协议接⼝

Webservice 接⼝ dubbo 接⼝

6.常⻅接⼝的请求⽅式

Get 请求和 Post 请求

7.常⻅的接⼝测试⼯具

jmeter、postman、soapUI、loadrunner(典型的性能测试⼯具需要收费)

8.典型接⼝的例⼦

⑴12306 ⽀付的时候可以使⽤微信或者⽀付宝⽀付,这就是调⽤的微信或者⽀付宝的⽀付接⼝

⑵实名认证时候去验证身份证和姓名是否匹配也是调⽤的公安系统的接⼝

⑶校验银⾏预留⼿机号是否正确也是调⽤的银⾏的接⼝去验证的什么时候开始做接⼝测试?(⾯试的时候问集成测试⼀般就是指接⼝测试)

⼀般会在功能测试之前进⾏或者集成测试的时候进⾏接⼝测试为什么做了功能测试还要进⾏接⼝测试?

⑴现在很多系统都是前后端分离的,从安全层⾯来说,只依赖前端进⾏限制,已经完全不能满⾜系统安全需求,因为绕过验证实在太容易了,⽽后端同样需要控制,在这种情况下我们就需要接⼝去验证。

⑵因为接⼝中⼤部分内容传输的是数据,所以说我们要测试数据的正确性,以及数据流和业务流⾛向是否正确。

⑶接⼝测试能够覆盖功能测试覆盖不到的点,⽽且接⼝测试效率更快,覆盖相对更全⾯,结合功能测试能够提⾼测试覆盖率。

9.接⼝测试的流程

⑴⾸先了解需求,了解接⼝的业务场景以及业务依赖,尽可能的把接⼝需求给弄懂弄透。

⑵制定测试⽅案,包括功能测试以及安全和性能⽅⾯的要求,根据这些去编写测试⽤例。

⑶然后进⾏⽤例的评审,发给相关的开发和测试,不断的根据⼤家的意⻅进⾏改进,直到 后评审通过。

⑷在评审完之后,准备测试数据和测试⼯具。

⑸执⾏接⼝测试,提交 Bug 让开发修改并发送测试报告。

10.http 请求⾥⾯都包含哪些内容

http 请求(request --> 向服务器发送数据):

请求⾏(请求⽅式,请求地址,http 协议类型)

请求头(header)

/空⾏/

请求体(请求 body)

http 响应(response --> 服务器返回的结果)状态⾏(http 协议类型,状态码)响应头

/空⾏/

响应体(响应结果)

11.请求头都包含哪些内容?

请求头都包含 Referer:来源,上个请求的来源

Content-Type:声明具体的请求类型

User-Agent:声明浏览器的版本和客户端的操作系统

Cookie:保存操作记录或者⽤户登录状态

12.PostMan 如何参数化?

可以设置环境变量和全局变量,在调⽤的时候直接⽤{{变量名}}调⽤。

13.接⼝测试⽤例是怎么设计的?

⼀般情况下,接⼝测试⽤例设计的⽅法,其实跟功能测试⽤例设计⽅法是⼤致类似的,因为接⼝测试也属于功能测试的范畴,其⼀样需要满⾜需求⽂档⾥⾯所规定的功能需求,但是其也有特有的部分,同样我们也是可以通过边界值、等价类、因果图、错误推测、场景设计等⽅法去考虑测试点。

⑴⾸先是冒烟测试,说⽩了就是传递正确的参数,是否返回正常的结果。

⑵参数的必传和⾮必传,参数组合,特殊字符,参数的类型和⻓度,以及传递时可能业务上的⼀些限制,所以在设计测试⽤例时,就要排列组合这些情况,保证所有情况都能覆盖到。

⑶绕过验证,⽐如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我⽀付时,抓个包将订单⾦额⼀改,如果能以我改后的

⾦额⽀付,那这个接⼝就有问题了。

⑷权限验证,就是某个功能只有特殊权限的⽤户才能操作,那我传递⼀个普通的

⽤户,是不是也能操作呢

⑸参数是否加密,这个关系到⼀些账户的安全,⽐如我们在登录⼀些⽹站时,它要将我们的登录信息进⾏加密。以及幂等,就是针对连续重复提交的情况进⾏测试的,特别是涉及到交易⾦额的场景,需要验证软件是如何处理的。

⑹还有并发测试,两个以上⽤户同时操作使⽤同⼀场景时,可能引发争夺资源,造成锁死等现象等等。

⑺ 重要的我们还要考虑业务逻辑校验,包括正常场景和异常场景我们都要考虑,以及业务逻辑的⼀些依赖,还要考虑数据库的落地情况。⽐如⼀些新增、更新的接⼝,要看落库数据是否正确。查询接⼝要考虑数据返回的是否完整,并与数据库数据进⾏对⽐。

14.结合项⽬说下你接⼝是怎么测试的?之前我做的 xxx 项⽬⾥⾯主要有 xxx 接⼝,xxx 接⼝和 xxx 接⼝

那我就以 xxx 接⼝来跟你说下吧,它的请求参数有 xxxxx,响应结果主要有 xxxx 在测试的时候,因为接⼝测试也属于功能测试的范畴,其⼀样需要满⾜需求⽂档

⾥⾯所规定的功能需求,但是其也有特有的部分,同样我们也是可以通过边界值、等价类、因果图、错误推测、场景设计等⽅法去考虑测试点。

⑴⾸先是冒烟测试,说⽩了就是传递正确的参数,是否返回正常的结果。

⑵参数的必传和⾮必传,参数组合,特殊字符,参数的类型和⻓度,以及传递时可能业务上的⼀些限制,所以在设计测试⽤例时,就要排列组合这些情况,保证所有情况都能覆盖到。

⑶绕过验证,⽐如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我⽀付时,抓个包将订单⾦额⼀改,如果能以我改后的

⾦额⽀付,那这个接⼝就有问题了。

⑷权限验证,就是某个功能只有特殊权限的⽤户才能操作,那我传递⼀个普通的

⽤户,是不是也能操作呢

⑸参数是否加密,这个关系到⼀些账户的安全,⽐如我们在登录⼀些⽹站时,它要将我们的登录信息进⾏加密。以及幂等,就是针对连续重复提交的情况进⾏测试的,特别是涉及到交易⾦额的场景,需要验证软件是如何处理的。

⑹还有并发测试,两个以上⽤户同时操作使⽤同⼀场景时,可能引发争夺资源,造成锁死等现象等等。

⑺ 重要的我们还要考虑业务逻辑校验,包括正常场景和异常场景我们都要考虑,以及业务逻辑的⼀些依赖,还要考虑数据库的落地情况。⽐如⼀些新增、更新的接⼝,要看落库数据是否正确。查询接⼝要考虑数据返回的是否完整,并与数据库数据进⾏对⽐。

15.PostMan 如何处理依赖的接⼝?

⾸先把上⼀个接⼝的返回值取出来的同时,把它设置为⼀个环境变量,然后在下

⼀个接⼝需要⽤到的时候直接⽤{{变量名}}去调⽤就可以了。

16.PostMan 环境变量跟全局变量的区别?

环境变量是只有选择这个环境的时候才可以使⽤⾥⾯的变量全局变量是在 Postman ⾥⾯任何位置都可以使⽤的变量

17.PostMan 如何处理需要提前登录的接⼝

⼀般我们会先执⾏登录接⼝,Postman 会⾃动保存 Cookie,再去执⾏我们需要执

⾏的接⼝就可以直接获取登录状态了。

18.结合⼯具说⼀下你是怎么进⾏接⼝测试的(结合 PostMan)

我⽤的⼯具是 Postman,那我就结合 Postman 说⼀下吧。

⾸先我们会把我们需要测试的接⼝的域名、端⼝、路径、参数等添加到 Postman 新建的⼀个请求⾥⾯,分别按照相应的格式去存放,然后点击 send 就可以了。

19.PostMan 如何断⾔?

我们在通过 Postman 发送请求的时候,在请求栏⾥⾯有个 tests,⾥⾯可以⽤来断⾔,⾥⾯可以编写 js 脚本,但是我们⼀般⽤的是 Postman 预设好的,直接点击就会⽣成对应的断⾔脚本,⽐如判断返回的 http 状态码是否是 200,返回结果包含字符串,判断结果返回时间是否⼩于 200ms 等,直接在这个基础上修改就可以了。

20.如何测试上传图⽚(PostMan)

我们测试上传图⽚的时候,我们⾸先可以先抓包把上传图⽚的接⼝给抓下来

然后把接⼝的参数给维护到 Postman 的请求⾥⾯,然后在 body ⾥⾯选择上传的⽅式,⼀般为 multipart/form-data,然后把对应的参数填写进去,点击 send 就可以了。

21.Jmeter 如何录制脚本?

⾸先我们要先设置浏览器的代理,然后打开 jmeter,在⼯作台添加 http 代理服务器,把端⼝设置成和浏览器的代理端⼝⼀致,⽬标控制器选择线程组,然后点击启动,在浏览器⾥⾯操作的时候就可以录制我们的脚本了。

22.Get 和 Post 的区别

⑴Get 和 Post 从本质上来说都是 TCP 连接,并⽆差别,但是由于 HTTP 的规定和浏览器/服务器的限制,导致它们在应⽤过程中有⼀些不同。

⑵Get 请求的参数时放在 URL ⾥⾯的,⽽ Post 是放在请求体中。

⑶Get 请求在 URL 传输的过程中是有⻓度限制的,⽽ Post 理论上没有限制,起限制的是服务器处理数据能⼒。

⑷Get 相对 Post 来说不安全,因为 Get 参数时放在 URL ⾥⾯的,所以不能⽤来传递敏感数据,但是如果 Post 的敏感数据不加密,也是不安全的。

⑸对于 Get 请求⽽⾔,浏览器会把 Http Header 和请求参数⼀起发送出去然后返回数据,⽽ Post 请求是浏览器先发送 header,服务器响应 100 continue,浏览器再发送请求数据,服务器然后返回结果。

23.Jmeter ⽤户定义的变量,http 请求默认值的作⽤ jmeter ⽤户定义的变量:⼀般我们可以把⼀些经常变动且多次调⽤的参数,放到 jmeter ⽤户定义的变量⾥⾯,然后⽤${变量名}去调⽤就可以了。

http 请求默认值的作⽤:⼀般对于我们经常⽤到的⼀些重复性的参数⽐如 url、端⼝、路径等等,我们可以直接维护到 HTTP 请求默认值⾥⾯。然后如果在下⾯的接⼝使⽤到,我们就直接置空就可以了。

24.如何测试 Https?

Postman ⾥⾯的 https 的接⼝:url 直接输⼊ https 就可以了

25.什么样的接⼝是 Get?什么样的是 Post?

Get:查询

Post:登录、注册、提交订单等等

26.什么是 http 协议?

它是指计算机在⽹络通信的时候所必须遵循的规则,是超⽂本传输协议,它也是

⼀种通信协议,它允许浏览器将超⽂本标记语⾔⽂档从客户端传输到服务器。

⼗三、UI ⾃动化

1.⼋种元素定位⽅式都有哪些

(1)使⽤ id 定位

(2)使⽤ name 定位

(3)使⽤⽂本属性来定位

(4)使⽤部分⽂本定位

(5)使⽤ class_name 类名来定位

(6)使⽤ xpath 来定位 #xpath 是⼀个在 xml ⽂档⾥查找的语⾔

(7)使⽤ css 定位 #CSS 是⼀种语⾔,⽤来描述 html 和 xml 的表现,速度⽐ xpath 快

(8)使⽤ tag_name 标签名定位(使⽤很少,因为标签⼀般不唯⼀)

2.⾃⼰会不会搭建⾃动化测试环境答:会,搭建过,我去之前都已经搭建好了,我们那边有个 10 年⼯作经验的⾃动化测试⼯程师,他搭建的⾃动化测试框架。我去那都已经有完整⾃动化环境搭建⼿册了,我只需要按照⼿册⼀步⼀步安装需要软件,以及配置相应的环境变量等等⽐如:我们公司采⽤的是 python+selenium+unittest+ddt 框架以及 POM 设计模式来进⾏⾃动化测试的,我们先安装 python,安装 selenium,安装 pip,安装 pillow,ddt,pymysql,HTMLTestRunner 等第三⽅库以及安装 pycharm,然后再配置相应的环境变量就可以。

3.POM 的优势是什么

POM 提供了⼀种在 UI 层操作,业务流程与验证分离的模式,这使得测试代码变得更加清晰、可读、易维护。对象库与测试⽤例的分离,使得我们更好的复⽤对象,甚⾄能与不同的⼯具进⾏深度的结合应⽤,可复⽤的代码会变得更加优化。

4.功能测试和⾃动化测试各占多少⽐例?

⼀般情况下,⾃动化测试不会超过 30%,还是以功能测试为主,即在 3:7 左右,冒烟测试所占⽐例不超过 10%

5.在⾃动化测试中是怎么组织测试⽤例(怎么识别那些 case 的)?

我们的测试⽤例都放在 case ⽬录下,通过 unittest 单元测试框架⾥的 discover ⽅法,筛选出以 test 开头的⽤例,循环添加到测试套件中,让系统全部执⾏筛选出来的⽤例。

6.你们的测试数据怎么进⼊到测试⽤例的?

我们⾸先通过 xlrd 来封装读取 Excel 的⽅法,读取 data ⽬录下的 Excel 数据⽂件,然后将读取的数据放在列表⾥, 后通过 ddt 数据驱动⼯具,将列表⾥的数据循环添加到执⾏的测试⽤例⾥。

7.你们的测试⽤例维护在哪⾥?维护在 case ⽬录⾥

8.⾃动化测试中下拉列表元素是如何处理的?我们⾸先引⼊ selenium ⾥的 select 类,定位下拉列表元素位置并将其赋值给⼀个

变量,然后将元素的位置传到 select 类⾥,调⽤ select_by_value 的⽅法或者 select_by_visible_text 的⽅法进⾏下拉列表的选取 from selenium.webdriver.support.ui import Select select1=driver.find_element_by_id("s1Id")

Select(select1).select_by_visible_text(u"橘⼦") select3=driver.find_element_by_id("pageElm_a74e_ce2c")

Select(select3).select_by_value("4")

9.⾃动化中如何截图?

我们是通过 get_screenshot_as_file 函数进⾏截图

10.⾃动化中怎么截取部分截图?

⾸先对整个⻚⾯进⾏截图保存,接下来通过 location 获取要截取图⽚的左上⻆坐标,通过 size 获取元素的尺⼨(宽和⾼),然后就得到了图⽚的右下⻆坐标,再通过 PIL 的 Image ⽅法读取保存的图⽚。后通过左上⻆及右下⻆坐标使⽤ crop 进⾏裁切, 后保存成图⽚就可以了。第⼀步 # 获取元素的位置

loc=driver.find_element_by_id('loginform:vCode').location print(loc)

x=loc['x'] #x 坐标 y=loc['y'] #y 坐标

第⼆步 # 获取元素的尺⼨

size=driver.find_element_by_id('loginform:vCode').size print(size) h=size['height'] w=size['width'] 第三步

xx=x+w

yy=y+h

a=Image.open('bos.png')

loc_img=(x,y,xx,yy) #图⽚左上⻆,右下⻆坐标 im=a.crop(loc_img)#裁剪图⽚

im.save('code.png') #保存裁剪图⽚

11.如何处理时间控件?

定位这个时间控件,然后写⼀段 js 脚本去除时间控件的只读属性,然后执⾏ js 代码,再采⽤ send_keys 去输⼊内容就可以了。

js="document.getElementById('demo1').removeAttribute('readonly')" driver.execute_script(js) #执⾏ js 脚本

driver.find_element_by_id("demo1").send_keys("2018-03-21")

12.如何处理弹框?

对于弹框有三种,分别是提示弹框、确认弹框、提示对话框,对于这三种我们都可以采⽤下⾯这些⽅式处理,通过 driver.swith_to.alert.text 获取弹框⽂本,通过

driver.swith_to.alert.accept()来点击弹框⾥的确定按钮,通过 driver.swith_to.alert.dismiss()点击弹框⾥的取消按钮,通过 driver.swith_to.alert.send_keys 向弹框⾥输⼊值

13.⾃动化是如何⽣成测试报告的/导出 HTML 测试报告?

⾸先引⼊ HTMLTestRunner 外部⽂件,先将时间格式化成年⽉⽇时分秒的格式来定义测试报告的⽂件名,然后定位报告的储存路径,通过 open 函数采⽤ wb 的⽅式打开这个⽂件,然后采⽤ HTMLTestRunner ⽅法,传⼊打开的测试报告⽂件,定义测试⽤例的标题,测试⽤例的描述,⽣成执⾏器, 后让执⾏器执⾏测试套件即可⽣成测试报告了。

14.UI ⾃动化测试框架是什么?

UI ⾃动化测试框架是:python + selenium +unittest + ddt +POM

15.⾃动化测试跑⼀个流程需要多久?依据每个项⽬不⼀样,我的项⽬⼤概在 1-2 分钟

16.⾃动化测试主要实现哪些功能?(回归测试,主流程的测试)主要实现冒烟测试及主流程测试的关键功能

17.如何提⾼⾃动化脚本的稳定性?(⽤例在运⾏过程中经常出现不稳定的情况,也就是这次通过,下次没办法通过,如何提升⽤例的稳定性?如何提⾼ selenium 脚本的执⾏速度?不管⽹络加载慢还是快, Selenium 中如何保持操作的元素的成功率?)

(1)不要右键复制 Xpath,⾃⼰写相对路径,多⽤ id 节点查找,保证元素定位没有问题

(2)对定位元素⽅法重新封装,结合显示等待,封装⼀套定位元素的⽅法。

18.什么样的项⽬适合做⾃动化测试?

(1)如果⼀个项⽬频繁做回归测试。

(2)系统界⾯⽐较稳定(⻚⾯变动少的适合做 UI ⾃动化,⻚⾯变动多的适合做接⼝⾃动化)

(3)软件维护周期⽐较⻓,项⽬进度压⼒不是太⼤。

(4)测试⼈员具备较强的编程能⼒。

19.对于验证码是如何处理的?

(1)通过记录 cookie 绕过前端验证

(2)短信/邮箱验证码---连接数据库查询出验证码

(3)去掉(注释掉)验证码

(4)设置万能验证码

(5)通过验证码识别技术

20.元素等待有哪些?强制等待,隐式等待,显示等待三种。在调试的时候会⽤到强制等待,实际运⾏中我们⼀般使⽤显示等待来定位元素。

def findelement(a):

ele=WebDriverWait(driver,5,0.5).until(lambda x:x.find_element(*a)) return ele #显示等待

⼗四、接⼝⾃动化

1.简答说下你们的⾃动化是如何做的?

我们使⽤的是⽤ python 编写的⼀个接⼝⾃动化使⽤的是 python+unittest+yaml+request+ddt 框架进⾏编写的接⼝⾃动化脚本。

⼀般我们会把接⼝⾃动化的测试⽤例按格式放到 yaml ⽂件⾥⾯然后把⼀些固定的配置⽂件可以放到 config.ini ⽂件⾥⾯⽐如说数据库的 IP 地址,账号和密码,端⼝,要连接的数据库的库名等等,然后读取的时候会实例化 configparser()⽅法去读取⾥⾯的配置⽂件然后我们也会写⼀些经常⽤到的⼯具,放到 common ⾥⾯,⽐如说连接数据库的函数,提交 sql 语句和查询语句和关闭数据库连接的函数把他们放到 connectmysql ⽂件⾥⾯,然后在我们测试的时候我们会把我们的主⽅法写在 runmain.py 这个⽂件⾥⾯,然后在这个⽂件⾥⾯使⽤ request ⽅法重新构造 get 和 post 请求,我们会⾸先⽤ ddt.file_data 把 yaml ⽂件给引⼊进来,把测试⽤例的 url,⽅法和请求参数以及检查点通过 ddt 数据驱动的⽅法获取出来传到主函数⾥⾯,并⽤ request 去发送请求,然后⽤ for 循环把检查点给循环出来并进⾏ assert 断⾔,然后执⾏完毕之后我们可以调⽤数据库处理的⽅法去进⾏数据清理,最后我们会使⽤ unittest 的

TestLoader().loadTestsFromTestCase()获取主类⾥⾯的所有的测试⽤例,然后使⽤ HtmlTtestrunner 去发送测试报告。我们这个接⼝⾃动化主要是⽤于接⼝的回归测试(当时写的时候是我和我同事我们两个⼈共同完成的,并且实施到项⽬中了,编写的时候主要是⽤⾃⼰的闲暇时间,由于时间⽐较零碎,我们⼤概⽤例不到 1 个⽉的时间,主要是在项⽬不是很忙的时候,我当时也基本上每个模块都有涉及吧,⽤的时间也⽐较⻓了所以每个模块也都⽐较熟悉)

2.你们的框架当时跑了多少条⽤例?应为我们的框架主要是⽤于回归测试,所以⽤例不是很多⼤概也就是 1-200 条吧,我也没有详细计算过

3.你们的⽤例跑下来⼤概需要多⻓时间?没有太⻓⼤概跑下来有⼏秒钟吧

4.如何测试依赖的接⼝?对于依赖的接⼝我们⼀般是把上⼀个接⼝的返回值给⼀个中间变量,并且把这个变量设置成全局变量,如果下个接⼝使⽤直接调⽤这个全局变量就可以了。

5.如何测试需要登录的接⼝?

⼀般需要登录的接⼝我们使⽤的是 unittest 框架那么我们就可以把需要登录的接⼝放到 setupclass ⾥⾯然后把 cookie 的值给⼀个中间变量,然后把中间变量 global 成全局变量,然后下⾯的接⼝如果需要 cookie 直接在请求的时候直接把全局变量的 cookie 传⼊进去就可以了。

6.测试⽤例放在哪?

我们的测试⽤例是在 yaml ⽂件⾥⾯管理的,把测试⽤例维护到 yaml ⽂件⾥⾯然后在使⽤⾥⾯的测试⽤例的时候我们可以⽤ ddt 进⾏数据驱动,⽤ ddt.file_data 把 yaml ⽂件的路径引⼊进来然后⽤ get ⽅法获取 yaml ⽂件⾥⾯的每个字段的字段名然后再去构造请求。

本文使用 文章同步助手 同步