针对实习的问答

内容分享2小时前发布
0 0 0

(背景:博主有一段APP测试实习和一段嵌入式软件测试的实习)

一.Android与IOS测试有哪些区别

首先Android是开源的系统,IOS非开源

(1)测试工具不同

Android多为开放系统,测试工具种类多一些(Appium、Espresso)IOS封闭系统严重依赖macos系统环境

(2)安装测试不同

分为测试版本和线上版本,对于线上版本:Android系统的安装渠道很多(自带的应用市场、第三方手机助手)IOS只能通过appStore进行下载安装

对于测试版本:Android只需要提供apk文件就可以在任何设备上安装,IOS不经过苹果审核是不允许安装的,在安装之前需要将设备添加到开发者账号或使用工具

(3)兼容性测试

由于Android系统是开源的,所以Android的操作系统类型及版本有很多(华为、小米、OPPO)IOS只有单一的苹果系统

(4)升级测试

IOS有严格的降级限制,只能单向升级不能降级,Android通过工具就可降级成功

(5)权限测试

许多APP在安装时会要求很多权限,Android系统会提示是否允许获取手机某个权限,即使用户不给也会偷偷获取,所以Android APP的这种权限测试不严格,IOS获取未经过用户同意的权限时,APP是无法获取的

(6)消息推送

Android一般使用第三方或自建平台进行消息推送,IOS消息推送是由苹果官方提供的

二.APP测试和Web测试区别

都需要做功能测试、性能测试、安全性测试

(1)web是B/S架构,是基于浏览器的,web测试只需要更新服务器端客户端就会同步更新

app是C/S架构,是有客户端的,app端修改了服务器意味着客户端核心版本都要回归测一遍

(2)在客户端性能方面,web只关注响应时间,app除此之外还要关注流量、电量、CPU、内存占用情况

(3)在兼容性方面,web是基于浏览器的所以更偏向不同浏览器的兼容性,app是依赖于手机的客户端,还需要看分辨率、屏幕尺寸、操作系统的版本以及不同硬件的兼容性

(4)app多了一些专项测试:弱网测试、中断、关机,还有安装、卸载、更新的测试,触摸屏手机测试时需要注意手势、横竖屏的切换

三.如何做APP兼容性测试的

(1)硬件兼容性

测试对象需要覆盖市面上的主流的手机厂商及各种型号的产品

(2)操作系统的兼容性

测试对象需要覆盖市场上主流的操作系统以及其版本

(3)分辨率的兼容性

测试对象需要覆盖市面上主流的各种屏幕,分辨率屏幕的尺寸

(4)网络兼容性

测试在不同的网络运营商下的APP能否正常工作

四.给你一个接口怎么测

1.先考虑接口的正常调用

按照接口文档里对接口的定义,传递正确的接口信息,包括地址、方法、传输数据,然后查看返回的响应结果是否正确,数据库是否正确

(1)传递的请求数据覆盖有效类和边界值;

(2)返回的响应结果的每个字段都需要校验,例如code、msg信息



code和msg是接口返回结果(Response)里最常见的两个通用字段,是后端用来表示请求处理结果状态的
code状态码,表示接口调用的结果,200是成功,400是参数错误,401是未登录,500是系统异常
msg是返回的提示信息(message的缩写)有“操作成功”、“参数错误”、“服务器内部错误”
data是业务数据(接口返回的具体内容)用户信息、商品列表、订单详情

常见的返回字段有

针对实习的问答

(3)调用接口对数据库中的数据测试,增删改业务的接口调用需确保到表字段的正确性验证



“表字段的正确性验证”——检查数据库里的每个字段是否符合接口预期
在调用接口传入合法参数后查看响应结果中的字段,再连接数据库执行查询,
验证返回结果中该数据的相关操作确实生效

2.考虑到请求参数的错误、异常情况

(1)请求数据输入异常值,例如空值、长度类型异常等,接口能否正确处理返回响应是否合理,可以用来验证接口的容错能力

针对实习的问答

(2)考虑业务约束,例如订单状态必须确认收货后才能评价,调用非该状态的订单,进行评价

(3)输入错误的参数名,多一个参数,少一个参数接口能否正确处理且返回响应是否合理

3.关注接口的安全性测试

(1)敏感数据是否加密传输

在接口通信过程中,重要的信息(如账号、密码、身份证号、手机号等)是否经过加密保护
而不是明文直接通过网络发送

(2)返回数据是否有敏感数据

例如:身份信息、完整的用户银行账号信息

(3)接口是否会对传入的数据进行安全性校验

比如用户的token校验

(4)接口是否防止恶意请求

比如大量伪造请求接口致使服务器崩溃

针对实习的问答

4.关注接口的性能测试

(1)并发请求相同的接口,查看接口的处理情况

例如插入了相同的记录导致数据出错,引发系统故障



当多个用户或者进程同时访问同一个接口时,也就是并发请求时
需要观察接口在高负载的情况下的稳定性、正确性和一致性

针对实习的问答

(2)接口的响应时间在用户可接受范围内

(3)对于业务操作频繁的接口做压测

监测性能资源,确定最大的瓶颈点是否满足当前业务需求

针对实习的问答

补充:

事务完整性和并发下数据一致性(ACID)是数据库层面保证接口在并发访问时数据不出错的核心概念。事务就是数据库中一组要么全部成功、要么全部失败的操作,它保证了数据的完整性和一致性。比如给被人转账:1.从你的账户扣除100元 2.给对方的账户加了100元。这两个操作要么都执行成功要么都执行失败。ACID是事务的四大特性

针对实习的问答

唯一约束:数据库的一种约束规则,用来保证某一列(或者多列)中的值不重复

针对实习的问答

五、具体测试

1.接口测试中怎么验证并发锁机制?

使用JMeter添加线程组通过设置参数(Number of Threads等)模拟用户并发发起多个相同请求,来观察接口响应和数据库状态

在接口测试中,我验证并发锁机制主要是通过 并发场景下的数据正确性和接口行为 来判断的。
比如对“库存扣减”、“订单评价”、“优惠券领取”等敏感操作,我会使用 JMeter 或脚本模拟多线程同时请求同一个资源 ID,然后:

一方面观察接口返回是否合理:是否有部分请求成功、部分返回业务错误,而不会全部成功或大量 500;

另一方面去数据库中验证最终数据,比如库存是否为 0 而不是负数、评论是否只有一条、优惠券是否只被成功使用一次。
如果在高并发下仍然能保证数据不重复、不丢失、不超卖,基本可以说明后台的并发锁/事务控制是生效的;反之则说明需要和开发一起排查锁策略或业务幂等设计。

2.接口压测怎么做?具体看哪些指标

(1)确定压测的接口以及压测目标。比如:下单接口、登录接口,通过询问PM该接口高峰期大概多少QPS,接着明确压测目标是什么(是看系统在100QPS、500QPS、1000QPS下的表现如何,还是看P95响应时间的上限不超过多少)

(2)选择压测工具(使用的是JMeter)

在JMeter里添加线程组(用来控制用户数量和循环次数),接着设置参数Number of Threads(模拟的并发用户数)、Ramp-up Period(启动完所有线程的时间)、Loop Count(每个线程执行的次数)

然后添加请求并设置请求参数(请求名称Name比如“登录接口”、协议Protocol比如“https”、服务器地址Server Name or IP比如“api.example.com”、接口路径Path比如“/login”、请求方法Method比如POST、请求体Body Data比如{“usename”:”test”,”password”:”123″})如果是GET请求,只填Path和参数就行。添加请求头(Header),最后添加结果查看器(监听器)Summary Report用来查看汇总(平均响应时间、吞吐量、错误率)

针对实习的问答

3.使用Pytest自动化测试框架如何对接口进行压测的

我用 pytest 做压测主要分几步:

先和业务确认要压的对象和目标,比如哪个接口/哪个设备操作,要压多少轮、成功率要求是多少;

用 pytest 搭一个小工程结构,把接口调用或设备操作封装在 utils 里,用 fixture 管理环境初始化、配置和日志;

在测试用例里通过循环或者参数化,多次调用同一个接口/动作,并统计每轮的成功/失败情况和耗时;

对整体成功率、最大耗时等加断言,例如要求成功率 99% 以上,单次操作不超过 X 秒;

压测过程中通过日志和 pytest-html 报告观察是否有偶发错误或者性能劣化;

4.pytest框架是如何控制压测次数的

1)在
config.yaml
 里配置
rounds
(压测轮数);
2)在压测用例内部用
for range(rounds)
控制调用次数

5.pytest自动化测试框架如何对接口测试

使用pytest配合requests库发送HTTP请求,再用pytest来组织用例、管理参数化数据、执行断言、输出报告

先配置config.yaml文件,这里主要存放环境配置、公共参数(用户名、token)数据库连接信息

接着封装requests,以便统一处理:请求头、日志等,避免每个用例都重复写

然后通过fixture加在配置文件,测试用例通过参数化从data.yaml文件读取不同输入数据,

再用 pytest 的断言机制校验响应 code、msg、data 等字段是否符合预期;

最后结合 pytest-html生成测试报告

针对实习的问答

6.压测的两个临界值

(1)性能拐点:系统性能开始恶化的点(响应时间明显变长、吞吐量增长缓慢、CPU利用率接近100%),系统接近极限但还在运行

(2)崩溃点:系统彻底不工作了(请求大量超时,500错误,服务无响应)

7.TPS和QPS

针对实习的问答

针对实习的问答

针对实习的问答

8.浏览器访问资源无响应如何排查

首先先区分问题现象:比如打不开任何网站,可能是网络断开,只打不开某个网站,可能是域名解析异常,打开页面慢或卡死,可能是服务端超时,如果显示正在加载一直转圈,可能TCP已联通但是HTTP无响应

接着从客户端开始排查,第一步检查本机网络,通过ping查看能否访问外网,不通则网络本身或网关有问题,如果返回IP解析失败,则DNS配置异常,可尝试改用公共DNS

然后检查TCP连接,用telnet命令验证端口,能连通则TCP正常,连接超时可能网络阻塞或服务端宕机,通过抓包查看3次握手,如果客户端没有收到SYN-ACK报文则服务端无响应,载检查HTTP,查看请求是否发出,响应是否返回,如果状态码是4xx或5xx则是后端接口错误

最后是服务器端排查,查看Web服务日志(是否收到请求是否返回响应)

9.接口测试自动化代码是如何代码分层并且提高测试效率的

分4层(1.配置&数据层 2.底层请求封装层 3.业务接口封装层 4.测试用例层)

配置&数据层:用来存储环境地址、账号、测试数据参数化,好处:更换环境的时候只修改配置不用动任何代码,参数变更只修改一处,全局生效,支持数据驱动,一条用例多组数据,直接从yaml文件里读取

底层请求封装层:主要是对requests进行统一封装,主要负责拼URL,发送HTTP请求、统一加Header(比如token,Content-type),好处:所有请求走一个入口,改一次全局生效,减少重复代码

业务接口封装层:一个模块的接口封装在一个类中,主要复杂把“接口路径+请求方法+参数”组织好,好处:后端改接口路径、参数名只改这一层,所有用例不用改,一个接口会被很多用例用到,封装后复用率很高

测试用例层:主要是确定调用哪个接口,校验什么结果,好处:用例简单化,可读性强

© 版权声明

相关文章

暂无评论

none
暂无评论...