- 软件测试的流程
1、测试需求分析阶段;
2、测试计划阶段;
3、测试设计阶段;
4、测试执行阶段;
5、测试评估阶段。
- 编写测试用例需要考虑的
①功能测试②性能测试③界面测试
④安全性测试⑤兼容性测试⑥可用性测试
⑦可靠性测试⑧本地化/国际化测试
3、什么是接口?
API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,意思是应用程序编程接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。举个栗子:在TB上下单付款之后,商家选用SF快递发货,然后你就可以在TB上实时查看当前的物流信息。TB、SF作为两家独立的公司,TB上实时看到SF的快递信息,是用到API,查看自己的快递信息时,TB利用SF提供的API接口,可以实时调取信息呈现在自己的网站上。BAIDU上输入订单号查取到快递信息。只要有合作,别的公司都可以通过顺丰提供的API接口调取到快递信息。有多方调用,提供一个统一的调用规范会方便很多。
4、什么是接口测试?
接口测试是测试系统组件间接口的一种测试,接口测试主要用于检测外部系统和内部系统之间以及各个子系统之间的交互点。测试的重点是检查数据的交换、传递和控制管理的过程,以及系统间的相互逻辑依赖关系等。
5、接口组成的要素有哪些?
接口访问的地址、请求的方法、参数、返回值
(1)接口访问的地址 协议://IP地址或域名:端口号/应用名/功能名
(2)请求的方法 get、post等
(3)参数 用户使用接口时,需要向接口提供的数据。
(4)返回值 接口给用户的反馈结果。
6、为什么开展接口测试?
接口测试属于集成测试、测试接入越早,就越能在项目早期发现问题,修复问题成本降低。
接口测试非常快速,UI自动化执行一个测试用例10s左右,接口用例执行一般毫秒级。
7、接口测试用例设计主要考虑哪些?
1)功能是否正常。
(2)功能是否按照接口文档实现、是否依赖业务、异常情况(参数异常、数据异常)、安全测试等。
8、接口测试用例包含哪些内容?
用例名称、接口地址、请求方式、前置条件、描述、请求头部、请求参数、状态码、预期返回结果
9、接口测试如何设计用例?
接口测试一般考虑入参形式的变化和接口的业务逻辑。
一般设计接口测试用例采用等价类、边界值、场景法居多。
接口测试用例设计思路:
(1)接口业务逻辑测试,接口逻辑测试是指根据业务逻辑,输入参数,输出值的描述,对正常输入情况下所得输出值是否正确的测试,也就是测试对外提供的接口服务是否正常。
(2)模块接口测试,模块接口测试是为了保证数据的安全及程序在异常情况下的逻辑正确性而进行的测试模块,接口测试主要包括以下几个方面
a.鉴权码 token 异常(为空、没有、错误、过期)
b.其他参数的异常,必填项的检查,参数的长度、类型、格式异常。常规的参数有数字,字符串,日期;参数长度,位数、身份证、电话的长度;参数的类型,数字精度,字母,中文,带空格的参数,特殊字符;日期格式,日期年月日,年月日时分秒,日期格式(包含/-:等)
c.错误码异常覆盖
10、通用接口用例设计?
(1)通过性验证:首先肯定要保证这个接口功能是好使的,也就是正常的通过性测试,按照接口文档上的参数,正常传入,是否可以返回正确的结果。
(2)参数组合:现在有一个操作商品的接口,有个字段 type,传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,type传2的时候是删除商品,商品id是必传的,这样就要测参数组合了,type 传1的时候,只传商品名称能不能修改成功,id、名称、价格都传的时候能不能修改成功。
(3)接口安全:绕过验证,比如说购买了一个商品,它的价格是300元,那我在提交订单时候,我把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?绕过身份授权,比如说修改商品信息接口,那必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,我传一个其他的卖家能不能修改成功。参数是否加密,比如说我登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息了,加密规则是否容易破解。密码安全规则,密码的复杂程度校验。
(4)异常验证:所谓异常验证,也就是我不按照你接口文档上的要求输入参数,来验证接口对异常情况的校验。比如说必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11,总之就是你说怎么来,我就不怎么来,其实也就这三种,必传非必传、参数类型、入参长度。
11、接口测试报告包含哪些内容?
系统接口概况、测试目的与范围、测试工具与资源、测试记录及结果分析(单场景接口、混合场景接口)、测试结论
12、测试指标范围包含哪些?
(1)被测接口接收请求和返回报文。
(2)被测接口返回状态、被测接口对应业务逻辑处理、涉及数据沉淀的处理、复杂场景下多个接口串联交互。
13、做接口测试运用哪些测试工具?
(1)Postman
(2)JMeter
(3)SoapUI
(4)Python + requests
(5)Java + HttpClient
(6)Java + OkHttp
14、抓包工具用过哪些?
(1)Fiddler
(2)Charles
(3)Wireshark
15、为什么进行抓包测试?
当没有标准的接口文档,测试人员只能抓包来获取接口信息。
抓包可以迅速找到请求,通过抓包可以查看整个请求过程,以及响应过程,可以通过抓包来分辨前台还是后台bug。
通过抓包,可以查看是否有敏感信息泄露,比如用户密码和个人账号信息等数据。
通过抓包进行测试,拦截请求,修改请求数据,查看对应响应结果,抓包本身就是接口测试的一部分。
16、TCP/IP参考模型有哪几层?
应用层、传输层、网络层、网络接口层
17、接口测试流程是怎样的?
(1)从开发中取得接口文档,了解接口业务,主要包括接口地址、请求方式、入参、出参、返回格式等信息。
(2)使用 Jmeter 进行接口测试,创建一个线程组,然后建立一个 http 请求默认值,再新建很多 http 请求,一个请求是一个用例,输入相应接口路径、访问方式、参数等,创建断言和察看结果树。
(3)最后调用并执行测试用例,编写测试报告。
(4)在做接口测试的时候遇到过很多问题,都是自己独立解决的,比如返回值乱码(修改 Jmeter 的配置文件为 UTF-8)。
18、http和https的区别
http超文本传输协议=请求+响应是明文传输,安全性低;
请求是由请求头,请求行,请求正文组成;响应是由响应头、响应行、响应正文组成。
而https可以进行加密传输,身份认证。
http的端口是80,而https的标准端口是443。
http:超文本传输协议,是互联网上应用很广泛的一个网络协议。它负责完成客户端到服务端的一系列操作,专门用来传输HTML的超文本web内容,是基于TCP协议的应用层
https:是基于安全套接字的http协议,由SSL+http协议构建的可进行加密传输、身份认证的网络协议。
19、TCP和UDP的区别
1、 TCP面向连接 (如打电话要先拨号建立连接); UDP是无连接、即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP传送的数据,无差错,不丢失,不重复,且按序到达;UDP不保证可靠性
Tcp通过校验,重传控制,序号标识,滑动窗口、确认应答可靠传输。丢包时的重发控制,可以对次序乱掉重置
3、UDP具有较好的实时性,工作效率比TCP高,延迟率降到最低、适用于对高速传输和实时性有较高的通信或广播通信。
4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP对系统资源要求较多,UDP对系统资源要求较少。
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect();
6、收发数据,用函数send()和recv(),或者read()和write();
7、关闭网络连接;
20、三次握手
建立TCP连接,需要客户端和服务端总共发送至少三个包确认连接的建立(保证连接是双工)
第一次握手:建立连接时,客户端发送syn包、并进入发送状态,等待服务器确认。
第二次握手:服务器收到syn包,必须确认客户的SYN、同时自己也发送一个SYN包、即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK.此包发送完毕,客户端和服务器进入TCP连接成功状态,完成三次握手。
21、四次挥手
终止TCP连接,需要客户端和服务端总共发送4个包确认连接的断开
第一次挥手:客户端发出fin,并且停止发送数据。
第二次挥手:服务器收到fin,发出ack。第三次挥手:服务器发送fin给客户端。第四次挥手:客户端发送ack给服务器。
22、测试游戏在安卓的兼容性
①手机机型的兼容性(CPU、内存、操作系统)②手机UI显示(标准屏、全面屏、异性屏)③模拟器的兼容性(主流的安卓模拟器)
23、缺陷的生命周期
发现缺陷提交缺陷确认缺陷
分配缺陷修复缺陷
验证缺陷(若缺陷未修复则再次提交)
关闭缺陷
1. 发现缺陷:由测试人员
2. 提交缺陷:由测试人员
3. 确认缺陷:一般由测试主管、或者质量保证(QA)、由产品经理进行确认
4. 分配缺陷:经确认后,有效的缺陷会指派给相关人员进行处理。一般谁确认的缺陷,就由谁分配。
5. 修复缺陷:主要由开发修复,也有可能是产品经理修复问题,也有可能是UI修复问题
6. 验证缺陷:测试去验证缺陷有没有修复成功
24、缺陷的识别
1. 通过测试用例中的预期结果进行识别
2. 通过需求规格说明书进行识别
3. 通过用户手册及其他文档进行识别
4. 通过同行业相类似成熟的扇叶软件来识别
5. 通过和开发人员的沟通进行识别
6. 通过和有经验的测试人员沟通进行识别
7. 参照同行业隐式需求进行识别
8. 跟有经验的测试人员沟通
25、编写缺陷报告
1. 缺陷编号。Bug_项目名称_模块名称_功能名称_0001
2. 所属模块。一级模块/二级模块/三级模块
3. 优先级。 缺陷的修复紧急程度 P1>P2>P3>P4
4. 严重程度。S1>S2>S3>S4
5. 缺陷概述:用一句话描述缺陷的基本情况
6. 缺陷的描述。将缺陷的复现步骤、预期结果和实际结果列出来
7. 提交人:是谁就写谁的名字
8. 备注:将Bug的截图作为备注信息
26、编写缺陷报告的目的
1. 易于搜索软件测试报告的缺陷
2. 报告的软件缺陷进行了必要的隔离,报告的缺陷信息更具体、准确
3. 软件开发人员希望获得缺陷的本质特征和复现步骤
4. 市场和技术支持等部门希望获得缺陷类型分布以及对市场和用户的影响程度
27、缺陷报告编写准则
1. 准确:每个组成部分的描述准确,不会引起误解
2. 清晰:每个组成部分的描述清晰,易于理解
3. 简洁:只包含必不可少的信息,不包括任何多余的内容
4. 完整:包含复现该缺陷的完整步骤和其他本质信息
5. 一致:按照一致的格式书写全部缺陷报告
28、接口测试和UI测试在测试活动中是如何协同测试的
接口测试和UI测试这两块其实是有一部分是重叠的,UI测试是通过前端写的界面来调用接口,而接口测试是直接调接口。所以排除前端的处理的逻辑和调用的正确性,在理论上接口测试是可以覆盖所有的UI测试。但实际过程中,如果只是在接口层覆盖所有的业务流,在UI上只测试前端的逻辑,最终的结果可能会是忽视很多原有的功能点,导致了UI测试的不充分。所以存在多人分工且时间充分的时候可以尝试接口去做业务流的全覆盖,否则不要轻易尝试。
29、接口测试注意事项
(1)改变请求参数,看响应结果是否和接口文档一致。
(2)查看参数是否有敏感信息(比如个人账户信息,资金信息)。
(3)查看是否对关键参数进行加密处理(密码信息)。
(4)所有列表页接口必须考虑排序值。
(5)接口返回的图片地址能否打开,图片尺寸是否符合需求。
(6)接口有翻页时,页码与页数的异常值测试。
(7)当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求每个接口入参的默认值、异常类型、非空校验。
(8)入参支持多个值时,要考虑传的值的个数多的情况下,接口会不会报错。
30、接口测试执行中对比数据库吗?
要对比,因为接口返回值的数据来源于数据库,接口对数据的操作还要进行深层次的数据库检查。
31、cookie、session以及token的区别
cookie 数据存放在客户的浏览器上、session 数据放在服务器上、token 是接口测试时鉴权码,一般情况下登陆后才可以获取到 token,然后在每次请求接口时需要带上 token 参数。
cookie 不安全,别人可以分析存在本地的 cookie 并进行 cookie 欺骗,考虑到安全应当使用 session 可以将登录信息等重要信息存放为session,其他信息可以保存在 cookie。
32、http请求跟webservice请求
(1)http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。可以使用的工具有postman、RESTClient、jmeter、loadrunner等。
(2)webservice接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,都是通过工具才能进行调用与测试。可以使用的工具有SoapUI、jmeter、loadrunner等。
33、接口测试中关联是什么含义?
关联就是把上一个接口返回值的部分截取出来,作为下一个接口的参数,能让接口串联运行。
34、如何使用Postman设置关联?
(1)通过正则表达式提取的方式或json取值的方式把下一个接口需要的信息从上一个接口截取出来。
(2)使用设置全局变量的代码把取出来的值保存到全局变量里。
(3)在下一个接口中,使用(全局变量)代替要替换的静态值。
35、接口自动化测试框架一般分为几层
自动化测试框架一般分为5层:
(配置层,脚本层,数据层,测试报告层,驱动层)
接口项目工程规划大致可分为几类,首先是测试结果类,比如说叫test_rusult,里面存放一些比如日志文件,测试报告。然后是测试用例testcase,里面分模块存放测试用例。接下来是公共方法类,比如说叫public,或者是tools,里面存放一些,读取excel数据的方法,发送http请求的方法,收集log日志的方法,发送邮件,操作数据库等方法。还有就是配置文件类,比如说叫config,里面存放一些指定运行部分用例的配置文件,连接数据库的配置文件。最后是写一个run方法,运行所有的用例。
36、测试框架里怎样做到数据和代码分离
第一种:写在 excel 表格里,像这种主要是读取 excel 数据有点麻烦,常用的用来读取 excel 的第三方库有 openpyxl,xlrd 等。当然读取 excel 数据最好用的还是用来做数据分析的 pandas 模块,不用写那么多for循环。
第二种:数据存放到 yaml 文件里,一个模块或者是一个功能写一个 yaml 文件,最后写个读取 yaml 文件的公共方法就行了。yaml 格式的文件比较简单。
第三种:存放在数据库里面。
第四种:数据存放在 json 文件里。
37、常用协议的端口号
(1)21/tcp FTP 文件传输协议
(2)22/tcp SSH 安全登录、文件传送(SCP)和端口重定向
(3)23/tcp Telnet 不安全的文本传送
(4)25/tcp SMTP Simple Mail Transfer Protocol(E-mail)
(5)69/udp TFTP Trivial File Transfer Protocol(微型文件传输协议)
(6)80/tcp HTTP 超文本传送协议(WWW)
(7)110/tcp POP3 Post Office Protocol(E-mail)
(8)443/tcp HTTPS used for securely transferring web pages
(9)3389/tcp 远程访问5631/tcp
(10)5632/udp pcanywhere端口号
(11)1433 SqlServer服务端口号
(12)1521 Oracle服务端口号
(13)3306 Mysql服务端口号
(14)8080 Tomcat默认服务端口号
38、解释Python的requests包
requests是一个HTTP库,作用是发送HTTP请求,获得响应,往往使用在网络爬虫,接口自动化测试中。
39、Python的requests包怎么使用
(1)安装Python
(2)安装requests模块
(3)创建.py文件
(4)导入requests模块
(5)编写Python代码
(6)调用requests方法
40、 API 和 SDK 的区别
API:把软件A里需要的功能打包好,写成一个函数。按照流程,把这个函数放在软件B里,软件B能直接用软件A的功能了!API就是研发人员A写的那个函数。
举个栗子:电脑需要调用手机里面的信息,这时候你会拿一根数据线将电脑手机连接起来,电脑和手机上连接数据线的接口就相当于“API接口”
SDK : Software Development Kit 的缩写,翻译过来——软件开发工具包。这是一个覆盖面相当广泛的名词。SDK是辅助开发某一类软件的相关文档、范例和工具的集合。
举个栗子:某公司开发出软件A的某一功能,把它封装成 SDK(比如数据分析 SDK 就是能够实现数据分析功能的SDK),出售给其他公司做开发用,其他公司如果想要给软件开发出某种功能,但又不想从头开始搞开发,直接付钱省事。
SDK想象成一个虚拟的程序包,在这个程序包中有一份做好的软件功能,这份程序包几乎是全封闭的,只有一个小小接口可以联通外界,这个接口就是API。