admin 管理员组

文章数量: 887017

1,怎么开展接口测试?

由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、Java+httpclient、robotframework+httplibrary等。也可以用,接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。

A,开发接口测试案例的整体方案

第一步: 分析出测试需求,并拿到开发提供的接口说明文档;

      第二步: 从接口说明文档中整理出接口测试案例,里面要包括详细的入参和出参数据以及明确的格式和检查点;

      第三步: 和开发一起对接口测试案例进行评审;

      第四步: 结合开发库,准备接口测试案例中的入参和出参数据,并整理成csv格式的文件;

      第五步: 结合接口测试案例文档和csv格式的数据文档,做接口测试案例的自动化案例开发。

B,接口自动化适用场景

目前设计的自动化接口测试案例有两个运行场景:

    (1)测试前置、开发自测:一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断。(开发本地运行的方式就是打开JMeter工具,导入JMX文件,开始执行可。)

    (2)回归测试:开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行。

C,接口测试环境准备

Jdk1.6或以上:http://www.oracle/technetwork/java/javase/downloads/index.html

    Jmeter, 下载地址:http://jmeter.apache/download_jmeter.cgi

    插件的下载安装地址:http://www.jmeter-plugins/

  6.4 创建工程

    1.打开Jmeter:下载好Jmeter后,双击bin目录下的jmeter.bat文件:

    

    2.添加线程组:在“测试计划”上点击鼠标右键-->添加-->threads(Users)-->线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”,根据测试数据的个数设定“循环次数”。

    

    3.添加“HTTP Cookie管理器”:

    

    4.添加“Http请求默认值”组件,当被测系统有唯一的访问域名和端口时,这个组件很好用:

    

    5.在“HTTP 请求默认值”组件配置页面,填写被测系统的域名和端口,http请求的实现包版本以及具体协议类型,线程组里的所有“HTTP Sampler”可默认使用此设置。

    

    6.在“线程组”里添加“HTTP 请求”的Sampler

    

    7.在HTTP请求设置页面,录入被测接口的详细信息,包括请求路径,对应的请求方法,以及随请求一起发送的参数列表:

    

    8.设置检查点:在被测接口对应的“HTTP 请求”上,添加“响应断言”:

    

    9.在设置页面上添加对相应结果的正则表达式存在性判断即可:

    

    10.添加监听器:方便查看运行后的结果

    

    运行结果:

    

  上述步骤完成了一个简单测试案例的创建,复杂测试案例均在此基础上扩展完成。使用Jmeter工具开发的接口测试案例,一个子系统建议放在同一个 “测试计划”中,流程测试可以通过“线程组”来区分,这样也便于设定不同的测试数据个数。比较独立的接口,可以统一放在一个线程组内,顺序完成测试。

  流程性接口的测试:如果要测试的接口可以组成一个流程,只需要顺序添加多个“HTTP 请求”的Sampler,各请求之间可以提取需要在上下文传递的数据作为参数,以保证流程中数据的一致性。

2,cookie和session的区别?

HTTP是无状态的协议,对于事物处理没有记忆力,每次客户端和服务端会话完成时,服务端不会存储任何会话信息。每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求,发送者和这一次的发送者是不是同一个人,那这个状态就要通过cookie或者session去实现。cookie指的是浏览器存储的一种数据,仅仅是浏览器实现的一种数据存储功能,cookie由服务器生成发送给浏览器,浏览器把cookie以key-value形式保存在浏览器中,下一次请求同意服务时,会把cookie发送给服务器。i

a,安全性,session比cookie安全,session是存储在服务端,cookie是存储在客户端的

b,存储值的类型不同,cookie只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,session可以存储任意数据类型

c,有效期不同,cookie可设置为长时间保持,session一般失效时间较短,客户端关闭或者session超时都会失效
d,存储大小不同,单个cookie存储大小不能超过4k,session可存储数据远高于cookie,但是当访问量过多会占用过多的服务器资源

3,jmeter怎么保证并发数是准确的按照线程组进行并发测试?

4,jmeter性能测试关注哪些指标

        Thread:线程数,这是已哥与请求数有关联的指标。实际使用中,不同的用户会在不体哦那个的地方或使用不同的设备来访问我们的服务,每一哥用户都在使用我们的软件或服务的过程中会产生许多请求数。对于性能测试,我们没有办法模拟真实的不同用户,不同地点或不同设备来访问我们的服务,只有通过一种方式:线程。通过同时并发的产生多个线程,每个线程去请求与访问我们在性能脚本中设定好的流程,以达到模拟用户请求的场景。不仅可以设置线程数,还可以设置它在多少时间内产生,循环多少次等。

注意:性能测试,不仅与服务的性能承载能力有关,本身压测机器的性能也有关联。

?那么如果压测机性能不够怎么办?

        TPS(每秒事务数):每秒钟能处理多少个这样的业务。性能测试的事务,指的是一个业务过程。jmeter默认一个组件,比如一个HTTP请求,就会产生一个事务,也可以把一系列行为归集到一起,当成一个事务来对待。

        KO:指发生错误的请求

?在性能测试中,如何才算是错误的

        Average/Min/Max(平均/最小/最大响应时间):当前事务的平均响应,最小响应以及最大响应需要多久。

        90th pct/95th pct/99th pct:

  • 什么是DNS

DNS 是域名系统 (Domain Name System),DNS是用来做域名解析的,它会在你上网输入网址后,把它转换成IP,然后去访问对方服务器;没有它,你想上百度就要记住百度的IP,但有了DNS的处理,你只需要记住对应网站的域名,即网址就可以了

  • HTTP协议

超文本传输协议,端口为80,特点(无记忆功能、快速)是由请求和响应两部分组成请求由请求头、请求行、请求正文组成;响应是由响应头、响应行、响应正文组成,之前我们公司的接口是采用https协议的。

https http+ssl协议 端口443 面向安全的超文本传输协议

  • 怎么抓取HTTPS协议

  • 说出请求接口中常见的返回状态码

1xx:指示信息--表示请求已接受,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

  • HTTP协议请求方式

  • HTTP和HTTPS协议区别

https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用;

http是超文本传输协议,信息是明文传输,Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全;

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;

  • HTTP和HTTPS实现机有什么不同

  • POST和GET的区别

POST和GET都是向服务器提交数据,并且都会从服务器获取数据。

区别:

1)传送方式:get通过地址栏传输,post通过报文传输

2)传送长度:get参数有长度限制(受限于url长度),而post无限制

3)GET产生一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200返回数据),POST产生两个TCP数据包(对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok返回数据)

4)get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留

5)在做数据查询时,建议用GET方式;而在做数据添加、修改或删除时,建议用post方式

get和post请求都是客户端向服务器提交的一种请求方式

get是明文传输参数、倾向于请求服务器资源。比如打开网站

post传输数据不可见,安全性高,倾向于向服务器提交数据,比如注册等

  • HTTP请求报文与响应报文格式

  • 什么是HTTP协议无状态协议?怎么解决HTTP协议无状态协议

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是,两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

  • 常见的POST提交数据方式

主要有四种方式:application/x-www-form-urlencoded、multipart/form-data、application/json、text/xML等。

  • HTTP请求报文与响应报文格式

  • HTTP协议学了哪几个版本

  • Session和Cookies区别

  • HTTPS在哪一层, 会话层在第几层

HTTPS在应用层

  • 浏览器输入url按回车背后经历了哪些?

  • TCP/UDP协议的区别,TCP如何保证正确,微信基于什么协议,QQ基于什么协议,为什么?

  • 你熟悉OSI协议吗?原理是什么

  • 怎么设计接口测试用例?

1.接口业务逻辑测试?(正例)

    接口逻辑测试是指根据业务逻辑、输入参数、输出值的描述,对正常输入情况下所得的输出值

    是否正确的测试,也就是测试对外提供的接口服务是否正常工作。

2.模块接口测试?(反例)

    模块接口测试是为了保证数据的安全及程序在异常情况下的逻辑的正确性而进行的测试。?

    模块接口测试的主要包括以下几个方面:?

    1)鉴权码token异常(鉴权码为空<没有鉴权码>,错误的鉴权码,过期的鉴权码)。

    2)其他参数异常。

        1、必填项检查

        2、参数的长度、类型、格式异常:

                常规参数:(数字、字符串、日期)

                参数长度:6-18位。或身份证、电话的长度。

                参数类型:数字(精度),字母,中文,带空格的参数,特殊字符。

                日期格式:日期:年月日,年月日时分秒,日期格式(包括/,-,:等)。

    3)错误码异常覆盖。

    4)接口测试其他的关注点

        接口有翻页时,页码与页数的异常值测试

        数据库的增删改查,比如一个post接口操作完成后,通过列表页接口看下新的数据是否和刚才的post一致

        接口返回的图片地址能否打开,图片尺寸是否符合需求

        当输出参数有联动性时,需要校验返回两参数的实际结果是否都符合需求。

        所有列表页接口必须考虑排序值

        所有功能都要考虑兼容旧版本

  • HTTPS测试点

  • 从HTTP变化到HTTPS协议,测试点?

  • 购物车模块, 加入购物车接口测试点分析

  • http://...?orderId=,**, 接口设计用例

  • 设计接口测试用例时,涉及的是电商系统,其中包括很多修改,如商品.商家、店铺等等,针对这些数据的修改,会涉及到很多参数。如商品的名称,商品的尺码,商品的顔色等等。那在设计实现"修改"接口时,如何确定要传什么参数?是只需要传我要修改的参数,还是全部参数都要传?

  • 上传文件测试点

  • 一个订单的几种状态如何全部测到,如:未处理,处理中,处理失败,处理成功

  • 为什么要做接口测试

1)接口测试属于集成测试、测试介入越早、就越能在项目早期发现问题,其修复问题的成本越低

2)接口测试非常快速、UI自动化执行一个测试用例10S左右、接口测试用例执行的话,需要的时间是毫秒级的

  • 你平常做接口测试的过程中发现过哪些BUG

 比如,提现输入框,在页面上输入负数,肯定是无法提交过去(前端页面会判断金额),如果我不走前端,直接用接口工具发请求,输入一个负数过去。(假设服务端没做提现金额数据判断) 余额=当前余额(100)-提现金额(-100),那么提现-100,余额就变成200了,也就是越提现,余额越大了。

  • 平常你是怎么测试接口的

  • 接口测试中有哪些要注意的测试点?

1)接口中返回了图片地址,要手工去进行图片的测试(大小、内容)

2)接口完成查询功能的时候,数据返回的排序显示

3)接口测试的时候,关注参数的默认值、必填项

  • 平常用什么工具测接口的

  • postman参数化有哪几种方式?

内建变量、pre-scripts编写js脚本、批量运行时导入csv或json格式的文件

  • json数据是什么,你平时如何解析json数据?

  • Newman如何执行postman脚本?

Newman run 脚本名称 也可以添加参数生成html报表等

  • jmeter参数化的方式有哪几种可以实现?

1) 配置元件---用户定义的变量元件可以设置全局变量

2) 函数助手对话框中可以选择比如随机字符串、随机日期、随机数字作为参数化

3) 可以使用csv文件作为参数化,通过配置元件中的csv data set config元件进行设置即可

一种开发常用的数据报文格式,由键值对和数组两种格式构成。可以通过工具bejson网站等

  • 没有接口文档,如果做接口测试

  • 接口测试的流程

1、首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。

2、然后使用Postman或Jmeter工具执行接口测试,一般使用Jmeter的步骤是这样的:

     1、首先新建一个线程组。

     2、然后就是新建一个HTTP请求默认值。(输入接口服务器IP和端口)

     3、再新建很多HTTP请求,一个请求一个用例。(输入接口路径,访问方式,参数等。)

     4、然后创建断言和查看结果树。

3、最后调试并执行用例,最后编写接口测试报告

4、其实我们做接口的时候也碰到了蛮多的问题,都是自己独立解决的,比如返回值乱码(修改jmeter的配置文件为UTF-8编码方式),比如需要登录后才能取得token鉴权码并且这个鉴权码在下面的请求中需要用到(使用正则表达式提取器提取token的值等。

  • 常用什么接口测试工具, 说一个你在工作中具体怎么做接口测试的实例

  • 不可逆的操作,如何处理,比如删除一个订单这种接口如何测试

  • 接口产生的垃圾数据如何清理

  • 测试的数据你放在哪

  • 你们数字签名怎么实现的

  • 当一个接口出现异常时候,你是如何分析异常的

  • 你们怎么做的参数化

  • 如何进行数据清洗

  • 如何进行数据检验

  • response怎么验证, 参数特别多

  • 做接口测试如何分析是前端还是后端的问题

  • 在测试接口中怎么知道请求成功还是失败

  • 如何模拟弱网测试

  • 异步接口怎么测试

  • 接口的加密测试中对称加密与非对称加密有什么区别?如何开展测试?请详解

  • 请详细阐述接口测试和UI测试在测试活动中是如何协同测试的?

  • 目前接口文档是由word格式管理,因迭代快,产生很多文裆,分不清哪些是不用的接口,哪些是正在用的接口,哪些是更新后的接口, 文裆杂乱.另外因是 word格式管理,不方便询问,如何管理?每次查看接口文档需要下载多个word,不能避免下载操作查看,效率不高,如何提高工作效率?

  • 很多接口都需要登录怎么处理?

  • 依赖于登录的接口如何处理 -token 和 session的管理

  • 在手工接口测试或自动化接口测试的过程中,上下游接口有数据依赖如何处理?

  • 依赖于第三方数据的接口如何进行测试

  • 接口测试中依赖登录状态的接口如何测试

  • 如果两个请求有严格的先后顺序,需要测试调转顺序的情况

  • 下个接口请求参数依赖上个接口的返回数据

  • HTTP接口测试和Web Service接口测试区别是什么?

  • Web Service接口是如何测试的

  • 接口测试框架怎么搭建的?

  • 你有没有做过框架稳定性优化相关的工作?

  • 持续集成怎么做的?

  • Mock怎么使用

  • 你们Mock是怎么做的

  • rpc接口怎么测试

  • 什么是RPC接口,用Http设计一个RPC接口

  • 你有没有自己实现过rpc框架

  • JMeter怎么存储变量, 让下一个接口使用

  • 如何进行接口压测

  • JMeter执行10次

  • JMeter获取上一个request的结果

  • JMeter完成一个用例

  • 做接口测试当请求参数多时tps下降明显,此接口根据参数从redis中获取数据,每个参数与redfs交互一次,当一组参数是tps5133,五组参数是tps1l69,多次交互影响了处理性能,请详细描述如何改进增进效果的方案

  • TCP报头格式

  • UDP报头格式

  • TCP/UDP区别(不仅是宏观上的,最好能根据各自的机制讲解清楚)

  • HTTP状态码(最好结合使用场景,比如在缓存命中时使用哪个)

  • HTTP协议(一些报头字段的作用,如cace-control、keep-alive)

  • OSI协议、TCP/IP协议以及每层对应的协议

  • Session机制、Cookie机制

  • TCP三次握手、四次挥手(这个问题真的要回答吐了,不过真的是面试官最喜欢问的,建议每天手撸一遍,而且不只是每次请求的过程,各种FIN_WAIT、TIME_WAIT状态也要掌握)。

  • 打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,Nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)。

  • http和https区别,https在请求时额外的过程,https是如何保证数据安全的

  • IP地址子网划分

  • POST和GET区别

  • DNS解析过程

  • TCP如何保证数据的可靠传输的(这个问题可以引申出很多子问题,拥塞控制慢开始、拥塞避免、快重传、滑动窗口协议、停止等待协议、超时重传机制,最好都能掌握)

  • 地址解析协议ARP

  • 交换机和路由器的区别

  • HTTP2.0、thrift

  • API接口与SDI接口的区别(API是提供给别人的接口)

  • dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题

  • 你怎么理解http协议

  • 说说http协议的工作流程

  • http有哪些请求提交方式

  • http中的200,302,403,404,500,503都代表什么状态

  • 什么是web缓存?有什么优点

  • 你怎么理解cookie和session,有哪些不同点

  • 什么是https,说说https的工作原理

  • 什么是http代理服务器,有什么用

  • 什么是分布式系统

  • 分布式系统你会考虑哪些方面

  • 讲讲CAP理念

  • 怎么理解强一致性、单调一致性和最终一致性

  • 分布式系统设计你会考虑哪些策略

  • 讲一讲TCP协议的三次握手和四次挥手流程

  • 讲一讲TCP协议的三次握手和四次挥手流程

  • 为什么TCP建立连接协议是三次握手,而关闭连接却是四次握手呢?为什么不能用两次握手进行连接

  • 为什么TCP TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态

  • 什么是DoS、DDoS、DRDoS攻击?如何防御

  • 为什么说TCP/IP协议是不可靠的

  • OSI有哪七层模型?TCP/IP是哪四层模型

一、Web自动化测试

1.Selenium中hidden或者是display = none的元素是否可以定位到?

不能,可以写JavaScript将标签中的hidden先改为0,再定位元素

2.Selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

1.添加元素智能等待时间 driver.implicitly_wait(30)

2.添加强制等待时间(比如python中写 sleep)

3.try 方式进行 id,name,clas,x path, css selector 不同方式进行定位,如果第一种失败可以自动尝试第二种

3.如何提高Selenium脚本的执行速度?

代码优化,多任务,分布式部署都是可以提升脚本执行速度的。

4.用例在运行过程中经常会出现不稳定的情况,也就是说这次可以通过,下次就没办法通过了,如何去提升用例的稳定性?

1.time.sleep( )

2.driver.implicitly_wait(30)

3.多用 try 捕捉,处理异常

5.你的自动化用例的执行策略是什么?

自动化测试与软件开发本质上是一样的,利用自动化测试工具,经过测试需求分析,设计出自动化测试用例,从而搭建自动化测试的框架,设计与编写自动化脚本,验证测试脚本的正确性,最终完成自动化测试测试脚本(即主要功能为测试的应用软件)并输出测试结果

6.自动化测试的时候是不是需要连接数据库做数据校验?

从数据库层面来进行数据校验可以更方便验证系统的数据处理方面是否正确,数据处理逻辑正常后,UI层面上的校验也是需要做的。

7.id,name,class,xpath, css selector这些属性,你最偏爱哪一种,为什么?

css 、xpath 几乎所有的元素都可以定位到,但是它们的短处在于页面上更改了元素后位置很容易改变,所以首先使用的还是id或者name等。

8.如何去定位页面上动态加载的元素?

触发动态加载元素的事件,直至动态元素出现,进行定位

9.如何去定位属性动态变化的元素?

xpath或者css通过同级、父级、子级进行定位

点击链接以后,Selenium是否会自动等待该页面加载完毕?

会的

10.什么是page object设计模式?

简单来说,就是把页面作为对象,在使用中传递页面对象,来使用页面对象中相应的成员或者方法,能更好的体现面向对象语言(比如java或者python)的面向对象和封装特性。

11.如何在定位元素后高亮元素(以调试为目的)?

用JavaScript等脚本来重置元素属性,给定位的元素加背景、边框

12.什么是断言?

断言的英文是assertion,断言检查的英文是assertion checking。

断言是指定一个程序必须已经存在的状态的一个逻辑表达式,或者一组程序变量在程序执行期间的某个点上必须满足的条件。

13.你觉得自动化测试最大的缺陷是什么?

1.不稳定

2.可靠性

3.不易维护

4.成本与收益

14.Webdriver可以用来做接口测试吗?

接口测试有现成的模块来处理,WebDriver是用于做WebUI自动化测试的。如果要实现接口测试,可以使用Requests模块来实现

二、APPUI自动化测试

1.Android APP 内存不足时, 系统如何结束进程获得内存?

系统优先结束被挂起(暂停)的进程,释放内存

2.APP 测试常见的严重问题有哪些?分别引起的原因有哪些?

常见的有 crash、ANR(应用无响应、卡死),一般由设备碎片化、网络波动大、内存泄漏、代码编写错误

3.请简单介绍你曾使用过的一款 APP 自动化测试工具 ?

开放性问题,带点主观意见

1.对比其他熟悉的自动化工具的优缺点

2.自动化的简要方案(简要的同时关键内容请具体)。(提示:appnium 等)

4.Android 测试与 web 测试有什么区别?

相同点:

1.设计测试用例均依据等价类、边界值等方法,测试原理相同;

2.大多数都采用黑盒测试方法来验证业务功能;

3.需要检查界面布局、风格和按钮是否美观、统一等(UI测试);

4.测试页面载入和翻页的速度、登录时长是否溢出等问题(性能测试)

5.测试应用系统的稳定性;

不同点:

1.手机作为通信工具,通信等一些行为会对APP产生(中断测试)

2.手机用户对app 产品的安装卸载操作:从上一版本/上两个版本直接升级到最新版本(安装卸载测试);

3.web自动化测试使用的工具较常用的是selenium,而android手机自动化测试比较常用的自动化工具是monkey、monkeyrunner、Appium(测试工具不一样)

5.app 测试有哪几种环境?

本地环境:app 安装的手机环境和电脑搭建的自动化测试环境(比如安卓 SDK 等等)。

服务器环境:war 包部署的服务器, 服务器可以通过浏览器访问, 也可以通过 app 去访问。(访问的是 web 程序的接口)

6.简单介绍一下 Android SDK 的安装步骤:

下载 jdk 和安卓 sdk

安装 jdk, 配置环境变量(java_home、 classpath、 path)

7.请简要介绍一下移动应用及其服务端的测试点?

移动应用主要有权限、安装运行卸载、UI、功能、性能、中断、兼容性、安全性、回归、升级更新、用户体验。(app的11 大测试点)

服务端有接口测试、性能测试、安全测试。

8.如何判断 app 的 bug 是客户端问题还是后台问题

这个要根据业务来,一般数据的问题前端的问题多些,一般做法是有问题提给前端开发, 他们知道是他们自己的问题还是后台返回的数据问题。

9.安卓中如何取出日志信息?

把安卓系统日志信息实时导入到本地:adb logcat -v time > d:\mylog.log

运行使用某个 app,实时获取该 app 的日志信息(cmd 里面的返回信息) :

adb shell monkey -p com.android.calendar -v 1000 > d:\mylog2.log

10.常见的 adb 命令:

查看当前连接的设备:adb devices

安装软件:adb install 路径\xx.apk

卸载软件:adb uninstall <包名>

从电脑上发送文件到设备:adb push <本地路径> <远程路径>

adb push C:\test1.txt /sdcard/

从设备上下载文件到电脑:adb pull <远程路径> <本地路径>

adb pull /sdcard/test1.txt D:

实时获取日志:adb logcat -v time > D:\mylog.log

登录终端设备 shell:adb shell

查找包名/活动名:adb logcat | findstr START

(脚本中, cmp= 后面的值就是 包名/activity 名称)

启动 APP 启动

adb shell am start -n packageName/activity

关闭 app

语法:adb shell am force-stop 包名

监控 APP 启动时间

adb shell am start -W packageName/activity

Monkey 命令:

adb shell monkey -v -p mypackage 50

11.APP 这么多主流机型如何测试 ?

我们公司就买了, 魅族, 华为, 小米, iphone7、 iphone8 、 iphone8plus 、 iphone x 测试兼容性,有些没有的机型,先借用同事的手机进行测试,同时申请公司购买,或者采用云真机。

12.App 崩溃(闪退),可能是什么原因导致的?

缓存垃圾过多:由于安卓系统的特性,如果长时间不清理垃圾文件.会导致越来越卡.也会出现闪退情况.

运行的程序过多,导致内存不足

应用版本兼容问题:如果应用版本太低,会导致不兼容,造成闪退。此外,有些新版本在调试中,也会

造成应用闪退。解决方法:如果是版本太旧,更新为新版本即可;如果是新版本闪退,可能是应用在改版调

试,可卸载后安装旧版。

检查 APP 中访问网络的地方,组件中的 ImageView 是否可以正常的下载并显示到 app 页面上。

检查 APP 的 sdk 和手机的系统是否兼容。

在一些特定情况下的闪退,比如播放视频,在 Android5.0 升级到 Android6.0 的时候,有些系统 API 老版本

有,新版本没有,到时回去对象的时候失败,报空,系统就会出现闪退

13.Appium 都有哪些启动方式

1.客户端启动

2.命令行启动

14.请简单介绍一下使用过的安卓UI自动化测试工具?

参考答案:appium:是一个移动端的自动化框架,可用于测试原生应用,移动网页应用和混合型应用,且是跨平台的。robotium:是一款国外的Android自动化测试框架,主要针对Android平台的应用进行黑盒自动化测试,它提供了模拟各种手势操作(点击、长按、滑动等)、查找和断言机制的API,能够对各种控件进行操作。

15.请说明Android手机和IOS手机,系统有什么区别?

两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。

两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。

IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。

接口自动化测试

16.按你的理解,软件接口是什么?

答:就是指程序中具体负责在不同模块之间传输或接受数据的并做处理的类或者函数。
 

24.请问你们公司是如何做接口测试的?

答:

接口测试实际跟一般测试不同就是测试用例的设计部分。

①获取接口规范。

②设计接口测试功能用例(主要从用户角度出发看接口能否实现业务需求,用例设计就是黑盒用例那一套)。

③各种入参验证(正常情况,异常情况包括输入参数个数不对,类型不对,可选/必选,还有考虑参数有互斥或关联的情况)。

④接口返回值各种验证(符合接口文档需求)

⑤了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…)

⑥接口能并发执行吗、安全吗,性能满足要求吗?

⑦采用工具或者自写代码来验证。

⑧发现问题跟功能测试一样,该报bug报bug,该跟踪状态的跟踪状态。

25.怎么设计接口测试用例?

答:

通常,设计接口测试用例需要考虑以下几个方面:

①是否满足前提条件

有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token

逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例

②是否携带默认值参数

正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例

③业务规则、功能需求

这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例

④参数是否必填

逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例

⑤参数之间是否存在关联

有些参数彼此之间存在相互制约的关系

⑥参数数据类型限制

逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例

⑦参数数据类型自身的数据范围值限制

正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例

26.平常用什么工具测接口的?

答:常用http协议接口测试工具,如:postman、fiddler、jmeter;webService接口用SoapUI、jmeter等。

27.没有接口文档,如果做接口测试?

本题主要考情商,通俗来说就是忽悠能力,先唬住面试官了再说,进去了也是瞎测测,随时做好背锅的准备,当然,你肯定不能回答面试官不测(心理mmp,脸上笑嘻嘻),接下来就是扯犊子时间

答:用抓包工具把接口抓取处理,然后针对性进行测试;接口中字段信息不清楚的,找时间集中寻求开发解答。(常用抓包工具Fiddler、Charles等)

28.在手工接口测试或者自动化接口测试的过程中,上下游接口有数据依赖如何处理?

答:用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。

29.依赖于第三方数据的接口如何进行测试?

答:mock

接着面试官会问你,如果mock的,然后你就顺着坑继续挖,搭建mock服务,参考这篇http://www.51ste/share/det-485.htML

30.接口测试中,依赖登录状态的接口如何测试?

答:依赖登录状态的接口的本质上是在每次发送请求时需要带上session或者cookie才能发送成功,在构建POST请求时添加必要的session或者cookie

31.如何模拟弱网做测试?

答:Fiddler和charles都可以模拟弱网测试,平常说的模拟丢包,也是模拟弱网测试。具体可以看《几种弱网模拟方法,总有一种适合你》

32.你平常做接口测试的过程中发现过哪些bug?

答:

常规错误,接口没实现,没按约定返回结果,边界值处理出错等。

输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;

输入错误的参数、多输入、少输入参数,接口可能出现的错误;

安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;

性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;

33.当一个接口出现异常时候,你是如何分析异常的?

答:

先抓包,用fiddler(charles)工具抓包,或者浏览器上F12调试工具;APP上的话,那就用Fiddler做代理,通过手机设置代理去看请求和返回报文;

查看后端日志,如Linux系统通过xhell连上服务器,查看接口日志,查看是否有报错信息(命令:tail -f 日志文件);

34.如何分析一个bug是前端还是后端的?

答:

平常提bug的时候,前端开发和后端开发总是扯皮,不承认是对方的bug。

这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就是前端发的数据不对;

请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。

35.你们做接口测试自动化吗?

答:现在针对大量应用,普遍推崇做接口测试自动化,维护成本低、收益高。常用的工具有许多,如Jmeter、Robot Framework、pytest等。

36.列出几个JMeter监听器?

一些JMeter监听器是:

集合报告

汇总报告

查看结果树

用表格查看结果

图形结果

BeanShell Listener

摘要报告等

37.在python中进行数据驱动测试

在unittest中,没有自带的数据驱动,我们得借助ddt来实现,首先,我们得在python运行环境中安装ddt,用下列命令安装

pip install ddt

另外一个测试框架pytest,它自带数据驱动实现,是通过@pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。

也可以根据自己需求用python实现数据的读取和驱动。

38.接口自动化中的关联怎么处理?

把上一个请求返回的结果传入到下一个请求的参数中,将请求的结果反射到一个类属性(使用setattr()函数),下一个请求去调用这个类属性

39.自动化测试怎么校验结果?

断言 ,预期结果与实际结果对比

数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对

40.自动化使用的测试框架是什么?简述自动化框架的设计、维护

测试框架:python+unittest+requests+ddt+openpyxl+pymysql+logging

python:入门简单,语法简洁

unittest :定义一个测试用例类,具体的方法来维护测试用例的生命周期,测试场景行为,测试用例 前置场景,行为,期望结果,实际结果,断言方法,Setup teardown方法

requests:接口调用 ,支持http请求的库,API 简洁,提供不同的http请求方法,支持session,cookies,

ddt :数据驱动,ddt 类装饰器,data 测试方法装饰器 unpack解包可迭代的数据类型

普通用户,数据库,配置文件—(基础数据)

openpyxl:数据管理 excel管理数据,使用openpyxl模块来进行excel数据的读和写(excle,csv, json, yaML, txt都可以管理测试数据)

pymysql:数据库交互,数据校验

eval,json:数据格式的转换 Eval将python支持的格式转换成对应的格式

logging:日志处理, 统一日志输出格式,渠道,级别,执行结果的记录,便于定位问题

jenkins:持续集成

2/框架设计思路:数据驱动+结构分层(可读性,可维护性,可扩展性)

数据驱动:将维护数据与代码分离,接口调用行为一致,针对不同的参数组合驱动不同的测试场景,减少代码冗余

结构分层:数据层+用例层+逻辑层

数据层:测试数据的支撑 data.xls

用例层:用例的执行 test_register.py test_recharge.py

逻辑层:公用的方法的封装与提取 doexcle.py do_mysql.py http_requests.py logger.py等模块

3/框架设计步骤:

准备测试数据:EXCEL表准备测试用例—excel数据的读取—参数值的替换

发起请求:请求方法(get/post方法进行封装—URL的拼接(不同—参数转化为字典

拿到请求的返回值:解析返回值code,status,msg信息

断言

好处:

1、自动化测试用例和手工测试用例的完美结合,减少重复工作

2、配置灵活,可以自主切换测试环境,执行测试用例

3、常用功能进行封装,逻辑清晰,易于维护

4、统一执行入口,管理测试用例集:

run.py模块通过模糊查找来选择需要执行的测试用例

5、持续集成,定时构建,快速反馈

41.具体的在这个项目中自动化怎么应用到实际的,您对自动化结果的分析

完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到

jenkins,配置定时执行,生成htML报表,查看测试通过率,查看接口的功能

每次发版时,进行回归测试,新功能开发未提测前。

本文标签: 接口 测试