• 0
  • 0
分享
  • python 接口自动化测试——软件测试圈
  • 北极 2021-06-18 09:54:04 字数 6606 阅读 1126 收藏 0

1、软件接口是什么?

答:程序不同模块之间传输数据并作处理的类或函数。

2、HTTP 和 HTTPS 协议区别?

答:https 协议需要到 CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用; http 是超文本传输协议,信息是明文传输,Https 协议是由 SSL+Http 协议构建的可进行加 密传输、身份认证的网络协议,比 http 协议安全; http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80后者是 443。

3、HTTPS 在哪一层?

答:HTTPS 在应用层

1.jpg

4、get 和 post 区别是什么?

答: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 方式。

5、常见的 POST 提交数据方式

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

6、什么是 Http 协议无状态协议?怎么解决 HTTP 协议无状态协议

答:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是发送完,不会记录任何信息。

HTTP 是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive 没能 改变这个结果。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导 致每次连接传送的数据量增大。

另一方面,在服务器不需要先前信息时它的应答就较快。HTTP 协议这种特性有优点也有缺点,优点在于解放了服务器,每一次请求“点到为止”不会造成 不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。客户端与服务器进行动态 交互的 Web 应用程序出现之后,HTTP 无状态的特性严重阻碍了这些应用程序的实现,毕竟 交互是需要承前启后的,简单的购物车程序也要知道用户到底在之前选择了什么商品。于是, 两种用于保持 HTTP 连接状态的技术就应运而生了,一个是 Cookie,而另一个则是 Session。

7、cookie 和 session 的区别

答:cookie 数据存放在客户的浏览器上,session 数据放在服务器上 cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗,考虑到安全 应当使用 session session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑 到减轻服务器性能方面应当使用 cookie 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie 可以将登陆信息等重要信息存放为 session;其他信息需要保存,可以放在 cookie

8、请求接口中常见的返回状态码

答:

1xx – 信息提示(表示临时的响应。客户端在收到常规响应之前,准备接收一个或多个 1xx 响应);

2xx – 成功(表明服务器成功地接受了客户端请求);

3xx – 重定向(客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请 求服务器上的不同的页面,或通过代理服务器重复该请求);

4xx – 客户端错误(发送错误,客户端有问题。例如,客户端请求不存在的页面,客户端 未提供有效的身份证验证信息);

5xx – 服务器错误(服务器由于遇到错误而不能完成该请求)。

常见的返回码有:

  • 200 OK - [GET]:服务器成功返回用户请求的数据;

  • 201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功 ;

  • 202 Aceepted - []:表示一个请求已经进入后台排队(异步任务);

  • 204 NO CONTENT - [DELETE]:用户删除数据成功;

  • 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行 新建或修改数据的操作401 Unauthorized -[] :表示用户没有权限(令牌、用户名、密码错误);

  • 403 Forbidden -[] :表示用户得到授权(与 401 错误相对),但是访问被禁止;

  • 404 NOT FOUND -[]:用户发出的请求针对得到是不存在的记录,服务器没有进行操作, 该操作是幂等的;

  • 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求 JSON 格式,但 是只有 XML 格式);

  • 500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是 否成功。

9、什么是 DNS?

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

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

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

①获取接口规范;

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

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

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

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

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

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

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

11、怎么设计接口测试用例?

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

①是否满足前提条件 有些接口需要满足前提,才可成功获取数据。常见的,需要登录 Token 逆向用例:针对是否满足前置条件(假设为 n 个条件),设计 0~n 条用例;

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

③业务规则、功能需求 这里根据时间情况,结合接口参数说明,可能需要设计 N 条正向用例和逆向用例;

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

⑤参数之间是否存在关联 有些参数彼此之间存在相互制约的关系;

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

⑦参数数据类型自身的数据范围值限制 正向用例:针对所有参数,设计 1 条每个参数的参数值在数据范围内为最大值的正向用例。

12、你做接口测试,测什么?

答:

  1. 可用性测试 根据约定的协议、方法、格式内容,传输数据到接口经处理后返回期望的结果;

  2. 接口功能是否正确实现;

  3. 返回值测试 - 返回值除了内容要正确,类型也要正确,保证调用方能够正确地解析;

  4. 参数值边界值、等价类测试; 错误和异常处理测试;

  5. 输入异常值(空值、特殊字符、超过约定长度等),接口能正确处理,且按预期响应;

  6. 输入错误的参数,接口能正确处理,并按预期响应;

  7. 多输入、少输入参数,接口能正确处理,且按预期响应;

  8. 错误传输数据格式(如 json 格式写成 form 格式)测试; 安全性测试,主要指传输数据的安全性;

  9. 敏感数据(如密码、秘钥)等是否加密传输;

  10. 返回数据是否含有敏感数据,如用户密码、完整的用户银行账号信息等;

  11. 接口是否对传入的数据做安全校验,如身份 ID 加 token 类似校验;

  12. 接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃)性能测试,如接口的响应时间、并发处理能力、压测处理情况;

  13. 并发请求相同的接口(特别为 POST 请求),接口的处理情况(如插入了相同的记录导致 数据出错,引发系统故障);

  14. 接口响应时长在用户可忍受的范围内; ? 对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要。

13、平常用什么工具测接口的?

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

14、没有接口文档,如果做接口测试?

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

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

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

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

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

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

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

18、如何模拟弱网做测试

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

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

答:常规错误,接口没实现,没按约定返回结果,边界值处理出错等。 输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理; 输入错误的参数、多输入、少输入参数,接口可能出现的错误; 安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请 求拦截等;

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

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

答: 先抓包,用 fiddler(charles)工具抓包,或者浏览器上 F12 调试工具;APP 上的话,那就 用 Fiddler 做代理,通过手机设置代理去看请求和返回报文; 查看后端日志,如 Linux 系统通过 xhell 连上服务器,查看接口日志,查看是否有报错信息 (命令:tail -f 日志文件);

21、如何分析一个 bug 是前端还是后端的?

答:平常提 bug 的时候,前端开发和后端开发总是扯皮,不承认是对方的 bug。 这种情况很容易判断,先抓包看请求报文,对着接口文档,看请求报文有没问题,有问题就 是前端发的数据不对; 请求报文没问题,那就看返回报文,返回的数据不对,那就是后端开发的问题咯。

22、你们做接口测试自动化吗?

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

23、列出几个 JMeter 监听器?

答:一些 JMeter 监听器是: 集合报告 汇总报告 查看结果树 用表格查看结果 图形结果 BeanShell Listener 摘要报告等

24、在 python 中进行数据驱动测试

答:在 unittest 中,没有自带的数据驱动,我们得借助 ddt 来实现,首先,我们得在 python 运行环境中安装 ddt,用下列命令安装 pip install ddt 另 外 一 个 测 试 框 架 pytest , 它 自 带 数 据 驱 动 实 现 , 是 通 过 @pytest.mark.parametrize(argnames,argvalues) 来实现参数化的。 也可以根据自己需求用 python 实现数据的读取和驱动。

25、接口自动化中的关联怎么处理?

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

26、自动化测试怎么校验结果?

答:断言 ,预期结果与实际结果对比数据库校验,根据测试场景来查询数据库里的数据和请求之前的数据进行比对。

27、自动化使用的测试框架是什么?

答:简述自动化框架的设计、维护测试框架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. 持续集成,定时构建,快速反馈。

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

答:完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成 html 报表,查看测试通过率,查看接口的功能每次发版时,进行回归测试,新功能开发未提测前。


作者:码农技术客栈

原文链接:https://blog.csdn.net/weixin_44602565/article/details/108704374

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 读者提问:adb 如何通过 Wi-Fi 将 PC 连接 Android 手机 ?阿常回答:想必通过 USB 连接 PC 和 Android 手机的方法大家都很熟知了,今天我和大家分享一下拔掉 USB 线,通过 Wi-Fi 使得 PC 和 Android 手机保持连接的方法,主要分为两大步骤,步骤如下。一、通过 USB 连接 PC 和 Android 手机1、Android 手机打开【开发者模式】。2、Android 手机打开【USB调试】。3、通过USB 线连接 PC 和 Android 手机。4、Android 手机第一次连接 PC 时需确定...
            0 0 1168
            分享
          • 读者提问:超好用的PC端录屏软件有推荐的吗 ?阿常回答:1、EV 录屏官网地址:https://www.ieway.cn2、傲软录屏官网地址:https://www.apowersoft.cn 3、芦笋官网地址:https://lusun.com4、迅捷录屏官网地址:https://xunjieshipin.com5、OBS官网地址:obsproject.com6、Windows 自带的录屏工具,Xbox7、Mac 自带的录屏工具,QuickTime Player阿常碎碎念:阿常平时喜欢用系统自带的录屏功能,大家可以根据个人偏好来选取合适的录屏软件。看完今天的分享对你是不是...
            0 0 1177
            分享
          •   环球音乐集团(UMG)已开始从TikTok上移除该公司代理的表演者的音乐目录,其中包括泰勒-斯威夫特(Taylor Swift)、德雷克(Drake)和奥利维亚-罗德里戈(Olivia Rodrigo)。UMG 与 TikTok 之前的授权协议已于 1 月 31 日到期。  本周二,UMG 指责该视频平台试图欺压其接受"糟糕的协议",而该协议并没有抚平唱片公司对艺人和词曲作者的充分补偿、对人工智能生成音乐的保护以及平台上保护艺人免受"仇恨言论、偏执、欺凌和骚扰"的在线安全的担忧。  TikTok 则措辞强硬地回应称,UMG"选择放弃一个拥有...
            0 0 938
            分享
          •        对模块进行集成测试时,希望能够通过输入URL对Controller进行测试,如果通过启动服务器,建立http client进行测试,这样会使得测试变得很麻烦,比如,启动速度慢,测试验证不方便,依赖网络环境等,这样会导致测试无法进行,为了可以对Controller进行测试,可以通过引入MockMVC进行解决。       MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,而且提供了一套验证的工具,这样可以使得请求的...
            12 13 2850
            分享
          •   一个Bug的生命周期是从创建开始到关闭结束,而Bug能否关闭就取决于回归测试的结果,测试人员可能很多都对Bug灵敏度有较高要求,但是对于回归测试的把控或质量掌握的程度却比较模糊。而关于回归测试的范围、回归测试的开展正是本文讨论的重点。  Bug回归的重要性  回归测试是软件测试中不可忽视的一部分,回归测试是对问题修改后,重新进行测试并确认修改没有引入新错误,或者导致其他程序出现错误。  作为软件生命周期的一部分,回归测试在整个软件测试过程中占据着相当大的分量,在敏捷测试的每个阶段都要进行多次回归测试。  开发人员修改的局部问题时,可能已经处理了表面症状,所以主要测试其修改的页面和它的底层逻...
            3 3 1206
            分享
      • 51testing软件测试圈微信