软件测试面试问题

因为我从业时间尚短,学的东西还是很浅显的,面试的大佬们一问我,就卡壳了。所以做个汇总。

个别答案 仁者见仁

个人博客:https://blog.csdn.net/zyooooxie

GET请求和POST请求的区别

  1. 提交数据的形式:get请求是请求参数直接跟在url地址后;post请求可以 通过表单提交的,请求参数放在body中 + 在url传递;
  2. 编码方式:GET只接受ASCII字符,而POST没有限制;
  3. 提交数据的大小/长度
  4. 提交数据的安全性:GET比POST更不安全,因为参数直接暴露在URL上;
  5. 请求体:GET没有请求体;POST有请求体;
  6. GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

左连接、右连接

SQL中左连接和右连接都属于外连接。

Left join:以左表为基础,根据on后给出的两表条件将两表连接起来;结果是 左表中的所有记录和右表中连接字段相等的记录。
select a.name,b.job from A a left join B b on a.id=b.A_id;

HTTP状态码


	1xx(临时响应)
	表示临时响应并需要请求者继续执行操作的状态代码。
	
    100: ('continue',),
    101: ('switching_protocols',),
    102: ('processing',),
    103: ('checkpoint',),
    122: ('uri_too_long', 'request_uri_too_long'),

	100(继续)请求者应继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
	101(切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。
------------------------------------------------------------------------------------------------------------------------

	2xx (成功)
	表示成功处理了请求的状态代码。
	
    200: ('ok', 'okay', 'all_ok', 'all_okay', 'all_good', '\\o/', '✓'),
    201: ('created',),
    202: ('accepted',),
    203: ('non_authoritative_info', 'non_authoritative_information'),
    204: ('no_content',),
    205: ('reset_content', 'reset'),
    206: ('partial_content', 'partial'),
    207: ('multi_status', 'multiple_status', 'multi_stati', 'multiple_stati'),
    208: ('already_reported',),
    226: ('im_used',),

	200  (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。
	201  (已创建)  请求成功并且服务器创建了新的资源。
	202  (已接受)  服务器已接受请求,但尚未处理。
	203  (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。
	204  (无内容)  服务器成功处理了请求,但没有返回任何内容。
	205  (重置内容) 服务器成功处理了请求,但没有返回任何内容。
	206  (部分内容)  服务器成功处理了部分 GET 请求。
------------------------------------------------------------------------------------------------------------------------

    3xx (重定向)
	表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

    300: ('multiple_choices',),
    301: ('moved_permanently', 'moved', '\\o-'),
    302: ('found',),
    303: ('see_other', 'other'),
    304: ('not_modified',),
    305: ('use_proxy',),
    306: ('switch_proxy',),
    307: ('temporary_redirect', 'temporary_moved', 'temporary'),
    308: ('permanent_redirect',
          'resume_incomplete', 'resume',),  # These 2 to be removed in 3.0

	
	300  (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
	301  (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
	302  (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
	303  (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。
	304  (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
	305  (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。	307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
------------------------------------------------------------------------------------------------------------------------

	4xx(请求错误)
	这些状态代码表示请求可能出错,妨碍了服务器的处理。

    400: ('bad_request', 'bad'),
    401: ('unauthorized',),
    402: ('payment_required', 'payment'),
    403: ('forbidden',),
    404: ('not_found', '-o-'),
    405: ('method_not_allowed', 'not_allowed'),
    406: ('not_acceptable',),
    407: ('proxy_authentication_required', 'proxy_auth', 'proxy_authentication'),
    408: ('request_timeout', 'timeout'),
    409: ('conflict',),
    410: ('gone',),
    411: ('length_required',),
    412: ('precondition_failed', 'precondition'),
    413: ('request_entity_too_large',),
    414: ('request_uri_too_large',),
    415: ('unsupported_media_type', 'unsupported_media', 'media_type'),
    416: ('requested_range_not_satisfiable', 'requested_range', 'range_not_satisfiable'),
    417: ('expectation_failed',),
    418: ('im_a_teapot', 'teapot', 'i_am_a_teapot'),
    421: ('misdirected_request',),
    422: ('unprocessable_entity', 'unprocessable'),
    423: ('locked',),
    424: ('failed_dependency', 'dependency'),
    425: ('unordered_collection', 'unordered'),
    426: ('upgrade_required', 'upgrade'),
    428: ('precondition_required', 'precondition'),
    429: ('too_many_requests', 'too_many'),
    431: ('header_fields_too_large', 'fields_too_large'),
    444: ('no_response', 'none'),
    449: ('retry_with', 'retry'),
    450: ('blocked_by_windows_parental_controls', 'parental_controls'),
    451: ('unavailable_for_legal_reasons', 'legal_reasons'),
    499: ('client_closed_request',),

	
	400  (错误请求) 服务器不理解请求的语法。
	401  (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。
	403  (禁止) 服务器拒绝请求。
	404  (未找到) 服务器找不到请求的网页。
	405  (方法禁用) 禁用请求中指定的方法。
	406  (不接受) 无法使用请求的内容特性响应请求的网页。
	407  (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。
	408  (请求超时)  服务器等候请求时发生超时。
	409  (冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。
	410  (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。
	411  (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。
	412  (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。
	413  (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。
	414  (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
	415  (不支持的媒体类型) 请求的格式不受请求页面的支持。
	416  (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。
	417  (未满足期望值) 服务器未满足"期望"请求标头字段的要求。
------------------------------------------------------------------------------------------------------------------------

    5xx(服务器错误)
	这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

    500: ('internal_server_error', 'server_error', '/o\\', '✗'),
    501: ('not_implemented',),
    502: ('bad_gateway',),
    503: ('service_unavailable', 'unavailable'),
    504: ('gateway_timeout',),
    505: ('http_version_not_supported', 'http_version'),
    506: ('variant_also_negotiates',),
    507: ('insufficient_storage',),
    509: ('bandwidth_limit_exceeded', 'bandwidth'),
    510: ('not_extended',),
    511: ('network_authentication_required', 'network_auth', 'network_authentication')

	
	500  (服务器内部错误)  服务器遇到错误,无法完成请求。
	501  (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
	502  (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
	503  (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
	504  (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。
	505  (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
	

Http无状态

http是无状态协议,言外之意是说http协议没法保存客户机信息,也就没法区分每次请求的不同之处。

分析Bug

先抓包看请求报文,对着接口文档,看请求报文有没有问题,有问题就是前端发的数据不对;请求报文没问题,就看返回报文,返回的数据不对,就是后端的问题。

举例说下:
下图的情景,页面显示搜索结果,选择不同的每页显示数量【由size=10变成size=40】,接口vendorId没有传参【vendorId是必传】,那就是说前端少传参数,前端的bug。
在这里插入图片描述
下图的情景:搜索vendorId=100000的数据,接口时间返回 23条数据,看到各种各样的vendorId,确认是返回的数据不对,后台的bug
在这里插入图片描述

UI自动化测试的优缺点及如何规避缺点

UI自动化测试(GUI界面层),主要应用于冒烟测试、回归测试。

在实际应用中,UI自动化可以帮助我们节省人工测试成本,提高功能测试的测试效率。
缺点也是比较明显,随着敏捷迭代的速度越来越快,UI控件的频繁变更导致控件定位不稳定,提高了用例脚本的维护成本,同时定位的不稳定导致用例的可信度降低。

解决方法:

1.在自动化测试中,引入了Page Object Model(POM) 页面对象模式来解决。

采用PageObject设计模式是将某个页面的所有"元素(包含控件)属性"及"元素操作"封装在1个类(Class)里面,目的是为了将测试代码与被测页面对象代码分离,后期如果有页面元素发生更改,只需要修改相应页面对象的代码(即对应class文件),而不需要修改测试代码。也是为了进一步降低后续因页面变化带来的维护成本。

2.失败重试机制,提高用例稳定性

由于用例执行的稳定性直接决定用例在业务落地时的可信度,所以提高用例稳定性是必要的,框架提供了失败重试的机制来间接保证稳定性。即当监听到用例执行失败异常时,重新执行当前用例逻辑,如果执行成功,覆盖当前用例的执行结果;如果失败,重新执行,直到超过重试次数。

3.定位元素的方式 + 等待方式的优化

A.实际写脚本的时候,尽量少使用xpath绝对路径方式来定位元素
B.元素等待少用implicitly_wait 、sleep,可以多使用 WebDriverWait + expected_conditions做新的方法封装

App测试和Web测试的共同点、区别

共同点在于:
都要覆盖接口、功能、兼容、性能、稳定和安全的测试。

主要区别在于:

性能测试:在web测试中,只需要测试响应时间这个要素;在app测试还要考虑流量测试和耗电量。
兼容性测试:web测试是兼容不同浏览器、系统,app测试是兼容手机设备【不同品牌、不同分辨率、不同系统、不同版本】。
安装测试:web基本没有客户端层面的安装测试,app安装测试包括 全新安装,新版本覆盖旧版本,卸载旧版本安装新版本,卸载新版本安装旧版本。

交叉事件测试:手机客户端的电话、短信、电量不足、闹钟提示、蓝牙传输文件、相机拍照等外部事件
网络测试:不同网络、弱网测试和切换网络测试

FIddler手机抓包和截取HTTPS请求

A. 截取HTTPS请求
Tools-Options-HTTPS选修卡,选择‘Decrypt HTTPS traffic’;
证书导入浏览器。

B.截取手机APP请求

Tools-Options-Connections选修卡,选择‘Allow remote computers to connect’;
重启Fidder;确认PC端和手机同一网。
手机设置-WIFI设置,设置代理:FIddler所在机器IP+设置的端口号,安装证书【HTTPS请求】。

Android和iOS系统区别

1、两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
2、两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
3、IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。

软件测试 面试题目第二期 ,有兴趣可以看看;

交流技术 欢迎+QQ 153132336 zy
个人博客 https://blog.csdn.net/zyooooxie

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值