面试题

110道python面试题

https://zhuanlan.zhihu.com/p/54430650

自动化工程师面试题

https://www.cnblogs.com/bull_think/p/9925263.html

接口自动化流程

接口自动化测试流程:需求分析-用例设计--脚本开发--测试执行--结果分析
1.获取接口文档,根据文档获取请求方式,传输协议,请求参数,响应参数,判断测试是否通过设计用例
2.脚本开发:使用requests模块进行接口调用
  request内容包含什么?
① 封装了各种请求类型,get、post 等;
② 以关键字参数的方式,封装了各种请求参数,params、data、headers、token 等;
③ 封装了响应内容,status_code、json()、cookies、url 等;
④ session 会话对象,可以跨请求。
3.使用unitest执行测试,编写断言进行结果校验
4.发送邮件报告
5.结合测试报告进行结果分析

数据校验(方便维护)
1.连接数据库,操作数据库
2.testsql.py 写查询sql,数据校验(断言sql查询与api返回校验)
3.testapi测试接口

关于测试数据总结:
1.对于全部是独立的接口项目,可以用数据驱动方式,用excel管理测试的接口数据
2.对于一些一次性消耗的数据,比如注册,每次注册不一样的数,可以用随机数生成
3.对于一个接口有多组测试参数,可以参数化,数据存yaml,text,json、excel都可以
4.对于可以反复使用的数据,比如订单的各种状态需要造数据的情况下,可以放到数据库,每次数据初始化,用完在清理
5.对于账号密码,邮箱配置的全局参数,可以用命令行参数,写到配置文件
6.对于少量的静态数据,比如一个接口的测试数据,可以写到py文件的开头

1.请列举一些HTTP code(状态码),分别代表什么意义?

  • 200 请求成功
  • 500 服务器内部错误
  • 404 请求的资源不存在
  • 304 重定向请求

2.常见端口有哪些?

  • HTTP协议80、HTTPS协议,443
  • ssh协议默认是22
  • Ftp协议默认是21
  • Oracle默认端口1521
  • MySQL默认端口3306
  • SQL Server默认端口143
 
3.接口测试如何批量造测试数据?(高频)
  • 少量数据,用数据库的存储过程、SQL语句,适用于造的数据量比较小,(使用Excel做规划)
  • (常用,有效)从生产环境导出以后做"脱敏"处理,再导入测试数据库。
  • 使用Jmeter中JDBC Sampler,编写SQL语句,使用函数助手生成随机参数,设置迭代次数,执行。参考链接:使用Jmeter造数据http://blog.csdn.net/benpaobagzb/article/details/48036905
  • 大量数据,编写Python的脚本,生成一个sql的脚本,包括很多Insert into table_name (字段1,) values (值1,); 用sql语句或者工具,导入文件即可。MySQL里有load data infile *.sql文件
4.列举你在做自动化过程中遇到的问题,以及是怎么解决的?

自动化的话。1 了解什么自动化的工具和框架,做的内容,遇到过什么问题,怎么解决的。

框架:unittest框架,它主要用于实现测试用例的组织和执行,以及测试结果的生成

工具:selenium,appnium

碰到的问题:元素定位不到,原因(页面未加载完,导致元素定位不到)

解决:封装一个等待查找元素的函数,如果未定位到元素,继续定位10次。

  • 重要的是把"奇怪问题"的排查思路、方法给出来,最后确定出问题(发现重要的bug)。
  • 面试官考察的是,应聘者的解决问题的能力。

5.列举一个你印象中最深的bug?

环境问题,新增了一台redis服务器,开发部署上线的时候,配置错了

系统主动加载链接,导致大量线程阻塞,系统崩溃。

测试的时候可以考虑一下这个异常场景。不能因为一台服务器的异常,占用自身系统的资源,然后导致崩溃。

 

 

6.你做的这个项目有什么优化空间,如果让你优化,你会怎么做。
分别从前端、后端、数据库阐述web项目的性能优化

前端优化:

1.减少http请求、例如制作精灵图

2.html和Css放在页面上部,javascript放在页面下面,因为js加载比HTML和Css加载慢,所以要优先加载html和css,以防页面显示不全,性能差,影响用户体验差

 

后端优化:

1.缓存存储读写次数高,变化少的数据,比如网站首页的信息,商品的信息等,应用程序读取数据时,一般先从缓存中读取,如果读取不到或数据已失效,再访问数据库,并将数据再次写入缓存

2.异步方式,如果有耗时操作,可以采用异步,比如celery

3.代码优化,避免循环和判断次数太多,如果多个if else判断,优先判断最有可能先发生的情况

 

数据库优化:

1.如有条件,数据可以存放于redis,读取速度快

2.建立索引,外键等

 

Jmeter做接口测试或者压力测试。

  • 你经常用的Jmeter元件有哪些?Jmeter元件的作用域是什么?

1.配置元件:http信息头管理器、http请求默认值、http cookie管理器

2.前置处理器:用户参数

3.Sampler http请求

4.后置处理器:正则表达式提取器

5.断言:响应断言

6.监听器:察看结果树、聚合报告

  • 需要设置什么类型的配置元件,设置cookies管理器、http头信息等。
  • 设置项目结构,以及添加相应的Sampler(采样器)
  • 添加断言与监听器,方便调试。
  • 分布式环境的搭建(伪分布式)
  • 命令行的使用并生成报告(jmeter3.1以后的版本)
  • 如何与持续集成相结合

 

3.android的性能测试你是怎么做的,看什么指标。(1.CPU 2.内存 3.耗电量 4.流量 5.祯率)

 

 

4.android的怎么查看它是不是有内存泄漏,通过什么方法/工具,测试场景和测试用例怎么设置,测试泄露可能出现的场景,为什么会出现内存泄漏,有什么解决方案,你的设计是不是跟android的框架或者原理有关联。

https://www.cnblogs.com/tiantianbyconan/p/7235616.html

 

算法题

1、冒泡排序、

2、斐波那契数列,常见面试题出现的概率很高

3、给定一个字符串s按照一定的长度n进行反转

4、比较两个字典是否一样

5、给定一个数据库内容,两个字段,第一个是ip,第二个是对应的用户id,据此统计pv和uv

6、还遇到过逻辑推理题目,先把结果说出来,再推理过程用算法去实现

7、比较list是否一样,例如[1,2,2,5]与[1,2,5,5]不一样,[1,2,4,5]与[1,2,4,5,5] ,[1,2,4,5]与[1,2,4,5]一样

8、计算json串中字串的最大深度

9、python单例模式概念

10、python中生成器和迭代器概念相关

11、python的闭包举例以及解释

12、python装饰器怎么用

1.前端和后端的交互,你是怎么保证质量?

(增删改查)

2.测试周期短,有时间做接口自动化吗

3.接口自动化主要的意义

提升测试效率

方便回归

可以和开发代码同步开发

4. nginx怎么配置https

5.jmeter和loadrunner的区别

6.数据准确性:(举一个实际的例子)

先定性分析再定量

比如我们有个统计插件收藏榜的需求,hive表里存的是所有的上报记录:点击、浏览、登录,收藏等各种事件。现在业务上需要统计每个插件被收藏的设备数,开发就需要写sql,从hive中查数据,把点击收藏的设备数写到mongoDB

测试的思路有几个:

1. 阅读开发的sql,看逻辑是否满足需求,一般在看开发sql的时候就能发现一部分问题
2. 数据准确性校验:挑一些活跃率比较高的插件ID,写sql查询hive, 对比mysql的里插件ID下的收藏的设备数
3. 数据总条数校验:上面说的那个业务场景里,mysql存的是pluginid+设备数的关系,一个pluginid对应一条记录,那我按照这个逻辑,查hive中有收藏记录的pluginid条数,预期应该等于mysql里的总记录条数

 

python 基础

1.单引号和双引号,三引号的区别

Python易用性和人性化的一个极致体现,当你用单引号' '定义字符串的时候,它就会认为你字符串里面的双引号" "是普通字符,从而不需要转义。反之当你用双引号定义字符串的时候,就会认为你字符串里面的单引号是普通字符无需转义

三引号就是原格式输出

1..cookie和session的区别

cookie存储在浏览器端,session存储在服务端

cookie不安全

session占用服务器资源

2.接口的鉴权机制

Token的鉴权机制  1.用户使用用户名密码来请求服务器 2.服务器进行验证用户的信息 3.服务器通过验证发送用户一个token 4.客户端存储token,并在每次请求时附送上这个token 5.服务端验证token值,并返回数据

3.数据库左连接和右连接的区别

4.查看包含mysql的所有进程

5.python基础列表的翻转

6.登录的测试点

7.http请求的过程

域名解析---tcp连接--发送请求---响应请求---获取html--浏览器渲染

8.tcp的三次握手

9.http和https的区别

10.项目架构介绍

11.介绍一下业务逻辑比较复杂的功能?怎么测试?

1.权限管理模块(可以给不同用户设置不同的数据权限)

 1)、赋予一个人员相应的权限后,在界面上看此人员是否具有此权限,并以此人员身份登陆,验证权限设置是否正确(能否超出所给予的权限);
2)、删除或修改已经登陆系统并正在进行操作的人员的权限,程序能否正确处理;
3)、重新注册系统变更登陆身份后再登录,看程序是否能正确执行,具有权限是否正确;
4)、在有工作组或角色管理的情况下,删除包含用户的工作组或角色,程序能否正确处理;
5)、不同权限用户登录同一个系统,权限范围是否正确;
6)、覆盖系统所有权限设定;
7)、能否添加信息为空的用户(其中包括空用户名及空口令、空用户名非空口令、非空用户名及空口令);
8)、能否添加长用户名及长口令,如果允许,新用户能否正确登录;
9)、系统是否允许删除系统管理员这一特殊用户或修改系统管理员口令,删除或修改后系统的实际情况;
10)、登录用户能否修改自己的权限;
11)、添加用户(有标识或编号):标识相同,用户名不同;标识相同,用户名相同;标识不同,用户名相同;标识不同,用户名不同;
12)、登录用户能否修改本人(或其他人)的信息,删除本人(或其他人);
13)、修改用户的信息(包括权限,口令,基本信息等),对其他模块的影响;
14)、修改用户信息:修改后的用户信息和已经存在的用户信息相同;修改后的用户信息和已经存在的用户信息不同;
15)、不给用户授权,是否允许登录;
16)、改某些设置时,是否会影响具有上级权限及相同权限人员的设置;
17)、系统管理员修改了某些数据,以其他人员身份登录时数据是否改变;

18)、勾选多项权限时  是否产生了新的权限 或减少了某些权限 。
19、) 只有修改或编辑自己信息的权限时,能否同时修改或编辑其他用户数据的权限 
20)、用户能否同时属于多个组,各个组的权限能否交叉;
21)、删除后重新添加的用户是否具有以前的权限;更改用户各项属性(包括权限)看对权限是否有影响。

 

 

 

2.数据异常监控的业务流程

(宿主,口径(曝光率,曝光设备数),告警条件(周环比,日环比),增幅,降幅)

12.app测试和web测试的区别

1.安装:app测试需要安装客户端,web测试不需要

2.兼容性测试关注点   app测试主要测不同操作系统,web测试主要测不同浏览器

3.app 测试需要升级维护,web测试不需要

4.app测试性能需关注耗电量,流量,cpu、内存、启动速度、界面切换速度

 

app面试题

怎么保证数据准确性     1.进行接口测试,数据一致性测试。

 

1.怎么去做的sdk兼容性测试 (不同品牌机型,不同系统版本、不同分辨率,top100)

SDK一般是处于被集成的角色,被接入到哪个应用都是未知的,拿我们的广告SDK来说吧,首先SDK提供的各个接口需要写DEMO来进行测试,另外预留集成测试时间非常重要。我们SDK自己会写demo来做平台兼容性测试,比如android、iOS版本,品牌型号设备的测试,等和待接入的app进行联调的时候还会测试一次

2.sdk稳定性测试关注指标

稳定性测试是用来验证产品在一定的负载下是否能够长时间的稳定运行    1.持续施压   2.暴力破坏

3.平台底层原理

5.Carsh出现怎么处理    1.需要抓取日志2.一般app开发在debug版本,出现anr和crash的时候会自动把日志保存到本地实际的SD卡上,去对应的app目录取出来就可以了

6.日志分析的案例

8.怎么定义测试            对程序、数据、文档进行测试

9.app能耗关注指标     1.CPU占用 2.内存占用 3.耗流量4.耗电量5.安装包大小6.启动在间7.帧率

10.怎么判断一个SDK好不好       1.易用性2.稳定性3.轻量4.灵活5.优秀的支持

11.SDK的测试流程

12.怎么定义产品质量? 1.功能完整符合产品需求 2.用户体验佳 3.运行稳定

 

开放题

1.职业规划

 

 

  • 测试用例设计方法
    • 等价类划分
      • 例子:密码输入框,要求密码必须是数字和字母组合
      • 有效等价类:密码输入数字和字母组合
      • 无效等价类:密码包括中文、密码包括其他符号等
    • 边界值分析
    • 因果图
    • 判定表
    • 场景法
    • 正交实验设计
    • 介绍一下业务逻辑比较复杂的功能?怎么测试的?
      • 赋予一个人员相应的角色后,在界面上看此人员是否具有此权限
      • 以此人员身份登录,验证权限设置是否正确
      • 删除或修改已经登陆系统并正在进行操作的人员的权限,程序能否正确处理
  • 接口自动化的流程
    • 需求分析---用例设计---脚本开发---测试执行---结果分析
      • 获取接口文档,根据文档获取请求方式,传输协议,请求参数、响应参数,设计用例
        • requests模块封装模拟get,post请求
        • 封装请求参数,data,params,headers,token
        • 封装响应
        • session会话
      • 脚本开发:接口调用,结果校验
      • 执行测试
      • 发送邮件报告
      • 结果分析
    • 接口自动化的优势
      • 运行效率高
      • 开发成本低
      • 运行成本低
      • 可以与开发代码同步开发
    • 接口依赖另一个接口返回的数据如何处理
      • 用全局变量来处理依赖数据。比如登录后返回token,用全局变量来传token参数
    • 接口测试质量的评估标准:
      • 业务功能覆盖完整
      • 业务规则覆盖完整
      • 参数验证达到要求
      • 接口异常场景完整
      • 代码覆盖率达到要求
      • 性能指标满足要求
      • 安全指标满足要求
  • 自动化测试工具有哪些
  • 抓包的关注点
    • 传输协议,请求方式,请求参数、响应参数、数据库的报文请求
  • linux
    • 查看端口
      • netstat -an|grep 8080
    • 查看指定进程
      • ps -ef|grep mysql
    • 查看日志
      • tail -f
    • 查看cpu,查看内存
      • top
      • free -m
  • 查看日志,定位问题的例子
    • 问题:前端数据展示与数据库不一致
    • 先浏览器端按f12,查看前端传参是否正确
      • 如果不正确,则为前端问题
      • 如果正确,查看接口返回是否与数据库一致,如果一致则为前端问题
      • 如果接口返回错误,则为后端问题,查看日志,定位sql是否正确
  • 印象深刻的bug
    • 实时数据当数据量过大时,cpu被打满,导致页面卡死。研发使用的慢sql,全表扫描。
      • top命令查看cpu使用率非常高。找到进程id
      • 使用top -h -p pid 查看进程中各线程的CPU使用情况、找出最占cpu的线程pid
      • 将线程pid转成16进制,查看堆栈找到线程在干嘛(jstack pid)
  • 网络基础知识
    • 接口的鉴权机制
      • 用户使用用户名和密码发送请求
      • 服务器通过验证,发送给客户端一个token
      • 客户端存储token值,并在每个请求上附送这个token
      • 服务器验证token,返回数据
    • cookie和session的区别
      • cookie数据存放在客户的浏览器上,session数据存放在服务器上
      • cookie不安全
      • session会在一定时间内保存在服务器上,当访问增多,会比较占用服务器的性能
    • http请求的过程
      • 域名解析----TCP连接 ----发送请求-----响应请求----获取html代码----浏览器渲染
      • TCP是主机对主机层的控制传输协议,提供可靠的连接服务(面向有连接)
      • TCP的三次握手
        • 客户端向服务端发送连接请求报文,发送SYN包
        • 服务端接收连接请求并发送SYN+ACK包给客户端
        • 客户端接收ACK报文,向服务端发送ACK报文,建立连接
      • TCP的四次挥手
        • 第一次挥手:客户端发送一个FIN,用来关闭客户端与服务端的数据传送
        • 第二次挥手:服务端接收客户端发送的FIN,发送一个ACK给客户端
        • 第三次挥手:服务端发送一个FIN给客户端,用来关闭服务端与客户端的数据传送
        • 第四次挥手:客户端接收到服务端发送的FIN,发送一个ACK给服务端,关闭连接
    • https 和 http的区别
      • http是明文传输,数据都是未加密的,安全性较差
      • https数据传输过程是加密的,安全性较好
      • http端口号为80,https端口号为443
      • https需要到CA申请证书
      • https是建构在ssl/TLs之上的http协议,更耗费服务器资源
      • https://www.runoob.com/w3cnote/http-vs-https.html

 

 

 

 

 

原文地址:https://www.cnblogs.com/zyblb/p/10951565.html