测试面试题
一 、 测试工作流程
需求评审(有开发人员,产品经理,测试人员,项目经理)->需求确定->开发设计文档(开发人员在开始写代码前就能输出设计文档)->写出测试用例->发给开发人员和测试经理看看(正式的评审用例)->接到测试版本->执行测试用例->提交bug(有些bug需要开发人员的确定(严重级别的,或突然发现的在测试用例范围之外的,难以重现的),有些可以直接录制进TD)->开发人员修改->回归测试 — 提交测试报告—整个测试通过之后—版本上线
二、设计用例的方法
白盒测试:逻辑覆盖法,主要包括语句覆盖,判断覆盖,条件覆盖,判断-条件覆盖,路径覆盖
黑盒测试:等价划分类,边界值分析,错误推测法
**测试用例设计点 功能性 ** 易用性 安全性
兼容性(兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行)
三 、 怎么定位前端还是后台的问题
前端bug特点 1, 界面相关 2,布局相关 3,兼容性相关
后端bug特点 1,业务逻辑相关 2,性能相关 3,数据相关 4,安全性相关
前端bug主要分为3个类别:HTML,CSS, Javascript三类问题
出现样式的问题基本都是CSS的bug
出现文本的问题基本都是html的bug
出现交互类的问题基本都是Javascript的bug
\1. 查看前端给的状态码
\2. 查看后端返回信息
\3. 查看日志
\4. 对接口进行测试(Postman)
\5. 查看数据库状态
\6. 实际操作一下确定具体问题
\7. 前端是否有明显报错如(js css JavaScript)静态资源页面展示
\8. 后端获取数据库数据后端跨域接口功能实现
四 、怎么给开发提bug**
一,熟悉Bug管理工具
二,准确地给bug定级
三,准确记录bug信息
Bug的标题 和详细描述
标题主要是对你所提交的Bug进行简明扼要的描述;
提交bug时,应该说明哪些信息?
所属模块 bug类型 —(哪一类的错误:代码 界面 安全 性能 设计缺陷等)— 操作系统 — 浏览器
指派给哪位开发 — bug标题 — bug的严重程度 — 修改bug的优先级
复现步骤 (重现步骤最好能有截图和视频类附) 预期结果 实际结果
五、针对bug怎么去判定等级
1.致命问题:
造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等
2.严重问题:
系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。
3.一般问题
功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。
4.轻微问题:
接口、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等
六、除了接口怎么定位问题
看服务日志,有数据库相关报错,还有代码相关报错
七、 接口自动化
我们采用unittest和ddt数据驱动搭建测试框架,(对数据excel读取、yaml配置、Requests接口请求、Re参数化、Pymysql数据库效验、日志等模块实现封装),
1.Openpyxl来处理excel,存储测试数据(用例数据)
2.pyyaml来配置文件(configparse,pyyaml)
- Pymysql来连接mysql数据库,执行sql数据,进行数据效验
4.Requests请求库,来向接口发起请求
5.使用logging模块来创建日志器,记录项目中的日志信息
6.使用HttpTestRunner来生成HTML测试报告
7.使用re模块来实现参数化(正则匹配)
8.使用动态创建属性(类属性)的机制来实现接口之间的依赖 (setattr getattr)
八、 python的基本数据类型
整数 int类型 print(‘3+4的值是{}’.format(add))
字符串 字符串就是一系列字符。单引号、双引号或者三引号里面的内容就是字符串。
布尔类型 boolean:布尔类型【只有两个值,分别为True和False】 True and True # ==> True
列表 List 列表用 [ ] 标识, names_python_pc = [‘毛豆’,‘刘德华’,‘张学友’,‘美女’] 有序性包含不同种类、任意类型的对象 本地可修改
元组 tuple 用”()”标识 tup1 = 1,2,3 print(tup1) 有序不可修改
字典 Dictionary {key:value} 无序 **每个键都是唯一的
name_dictionary = {‘老爸’:300,‘老婆’:1000,‘老妈’:800,‘自己’:600,‘孩子’:200} print(name_dictionary)
集合类型:set { } 无序不重复
字符串 —>string类 索引–> index()、find() 长度 -->length() 删除 --> delete
分割 --> split()
运算符
- 算术运算符:+,-,*,/,%,即加、减、乘、除、取余
- 比较运算符:==,!=,>,<,>=,<=,即等于、不等于、大于、小于、大于等于、小于等于
- 赋值运算符:=,+=,-=,*=,/=,%=,即赋值、加赋值、减赋值、乘赋值、除赋值、取余赋值
- 逻辑运算符:and,or,not,即与、或、非
for循环 while循环。
九、json和string 相互转换
json对象(dict)转string 简单地直接转换----使用json.dumps()
string转json对象(dict)----使用json.loads()
十、 常见的异常都有什么 兼容性异常
ArithmeticException 算数异常
NullPointException 空指针异常
ArrtIdexOutOfBoundException 数组越界异常
InsexOutOfBoundException 索引越界异常
ClassCastException 类型转换异常
InputFormatException 输入类型不匹配
IOException 输入输出异常
SQLException SQL异常
IllegalArgumentException 非法参数异常
十一、 fiddler 抓包咋用?为什么要抓包 怎么运用其中功能
\1. fiddler默认只能抓包HTTP协议, 不能HTTPS协议
? 安装hTTPS证书
\2. 过滤器 filters: 过滤掉不需要关注的请求(通过服务器ip或域名进行过滤)
\3. rules --> automatic breakpoints --> before requests after responses
\4. autoresponder 进行重定向操作
\5. 使用composer进行发起请求, 进行接口测试.
\6. 抓包的目的
? \1. 没有接口文档时, 可以以抓取的接口为参照
? \2. 用于定位问题.(前端/后端问题)
? \1. 通过页面发起请求, 抓包, 抓包之后确认一下,前端传递数据的准确性
? \2. 前端调用接口的逻辑是否通畅
? \3. 是否有多次/冗余调用
? \4. 后端响应中, 1. HTTP协议响应状态码 2. 响应数据是否准确
? \5. 业务逻辑是否正确
一.对PC参数进行配置
\1. 配置fiddler允许监听到https(fiddler默认只抓取http格式的)
? 打开Fiddler菜单项Tools->TelerikFiddler Options->HTTPS,
? 勾选CaptureHTTPS CONNECTs,点击Actions,
? 勾选Decrypt HTTPS traffic和Ignore servercertificate errors两项,点击OK(首次点击会弹出是否信任fiddler证书和安全提示,直接点击yes就行)
? 二.配置fiddler允许远程连接
? 上一步窗口中点击Tools->TelerikFiddler Options->Connections,勾选allow remote computers to connect,默认监听端口为8888(下图Fiddler listens on port就是端口号),若端口被占用可以设置成其他的,配置好后要重新启动fiddler,如下图:
? 三.对手机端进行参数配置
? 首先要保证手机和电脑都处于同一个网络;
? 然后要知道电脑的ip地址(当然这个电脑是安装fiddler的电脑),电脑ip地址可通过cmd,输入ipconfig查询,或网络共享中ipv4找到,我的是192.168.103.53,
? 再者要知道fiddler的端口号,Tools->TelerikFiddler Options->Connections,port中值就是端口号,一般默认为8888;接下来开始操作手机;
? 1.第一步:手机和电脑连接同一个网络,打开手机浏览器,输入http://ip:端口号,点击前往;可以下载证书并安装。在打开的页面中,点击 FiddlerRoot certificate 下载证书,点击允许
? 点击下载之后,安装证书并起个名字,要求设置一个手机密码,自己设置一个
? 第五步:更改手机无线网的代理
? 手机系统设置-无线网-点击高级,代理选择手动,主机名就是fiddler的电脑ip地址,端口号,就是fiddler的端口号,与浏览器中ip:端口号保持一致,点击确定即可,
? 第六步操作手机,电脑fiddler中会显示一些http信息,成功;
为什么要抓包:(1)发现了一个bug,提交前端或后端,开发不认账?
1 通过抓包看头部请求信息 是后端的无响应的情况下 没有请求信息就是 前端的bug
2 有请求信息 前端请求是a 响应的b的话 抓包请求的是a 那就前端的错
如果后端请求是b 响应的a 抓包请求信息为b 那就是后端的错
若抓取到的请求返回值中间的http 的状态码是500的话,说明是后端服务器一般的内部错误,那这就是后端的bug
若抓取到的请求返回值中间的http 的状态码是404的话,说明可能后端服务器根本就没有对应地址的服务,当然还有可能是前端JS 提交请求的时候提交了错误的地址。
十二、HTTP和HTTPS的区别:
https则是具有安全性的ssl/tls加密传输协议。
https协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
http是超文本传输协议,信息是明文传输,无连接,无状态
十三、 你们接口用什么工具?接口测试的流程
postman
1、首先是从开发那里拿到API接口文档,了解接口业务、包括接口地址、请求方式,入参、出参,token鉴权,返回格式等信息。
2、然后使用Postman,点击左上角的“+New”,鼠标点击Collection,新建一个集合,
3、输入你想要给这个collection起的名字,点击右下角的“creat”进行确定
4、选中刚刚建的collection,鼠标右击,在打开的菜单栏中选择“add request”,输入这个接口请求的名称,下方的description中添加描述说明,点击Save进行保存
5、按照接口文档中的描述,输入接口请求的url,添加请求头和请求体,点击运行,就完成了一个接口的测试。
get请求 创建请求 点击选择get方法 url地址栏输入地址 params输入参数 点击send发送
post请求 创建请求 点击选择post请求 url地址栏输入地址 在body输入参数 点击send
设置参数
举例登录来讲 在tests获取token值
然后在环境变量中去设置token环境变量
在下一次个接口中就可以选择上次设置的token环境变量
在Header中手动添加token环境变量
变量名表示的话是用两个大括号中加变量的名
十四、 Postman你们关注什么 会用一个接口传过来的参数当做下一个接口的入参嘛
接口请求信息中,重点需关注四大信息:接口URL地址,请求方法,请求头以及请求参数
获取响应返回信息:状态码,响应头,响应正文
会呀 设置第一个接口返回的参数到环境变量, 第二个接口使用第一个接口的返回值作为下一个接口的请求参数
接口测试的核心测试点
校验接口参数是否达到要求(边界、业务规则)
校验接口返回数据的正确性与格式
校验接口覆盖率是否达到要求(一般要求核心接口要达到100%的测试率,非核心接口根据)
性能指标是否满足要求(接口的响应时间、处理能力)
安全指标是否满足要求(一般接口都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证。)
多接口测试 就是批量执行测试用例 点running 勾选需要的测试用例 设定时间
十五、 日志命令
APP端 查看日志 adb logcat
web端 linux 日志查看 tail、 tail -n 10 test.log 查询日志尾部最后10行的日志
十六、 数据库的多表查询怎么用? 多表查询的区别又是啥?
内连接 inner join 连接两个数据表的用法:
select * from 表1 inner join 表2 ON 表1.字段号=表2.字段号
外连接 full join 或 full outer join
SQL语句:select * from表1 full join 表2 student.Num=score.Stu_id;
左外连接 left join
[select * from 表1 left join 表2 on 条件(表1.字段=表2.字段)]
内连接 目的: 内连接的连接结果仅包含符合连接条件的行。
外链接目的 外连接的连接结果包含了符合连接条件的行;还包含了不符合条件的行
内连接需要注意区分在嵌套查询时使用的any以及all的区别,外连接不需要区分,左表和右表都不受限制。两个表不足的地方可用null进行填充。
十七、 linux的常用命令
? ls 查看当前目录下的所有目录和文件
? cd / 切换到根目录
? mkdir aaa 在当前目录下创建一个名为aaa的目录
? rm 文件 删除当前目录下的文件
? find 查询 目录 参数 文件名称
? find /usr/tmp -name ‘a*’ 查找/usr/tmp目录下的所有以a开头的目录或文件
? touch 文件名 在当前目录创建一个名为aa.txt的文件 touch aa.txt
? 看日志的 tail -f reboot 重启
? 修改文件 vim 查看主机IP ifconfig
? 压缩 gzip 解压 gunzip
十八、 unittest 怎么用的 pytset使用
一 unittest是python内置的单元测试框架
二 使用方法 1 导入unittest包 2 编写测试类继承unittest.TestCase父类
3 编写测试用例 4 运行unittest测试框架 5 生成测试报告
三 pytest是基于unittest上的单元测试框架 也就是支持单元测试 内置assert
**四 ** 各种请求 GET请求 post()方法,将需要提交的数据传递给data参数
五 传递URL参数 构造一个字典,并在请求时将其传递给params参数
六 定义Headers,同样的将字典数据传递给headers参数
七 Requests中自定义Cookies不用构造CookieJar对象,直接将字典递给cookies参数
十九 断言
assert xx 判断xx为真
·assert not xx 判断xx不为真
·assert a in b 判断b包含a
·assert a == b 判断a等于b
·assert a != b 判断a不等于b
python元素定位 窗口定位 三大等待 显性等待隐隐性等待
二十、 常见的web ui自动化框架是什么
语言:python
测试框架:unittest
requests和selenium
数据格式的转换:text,json
日志处理:logging —清晰的执行过程,快速定位问题
持续集成:Jenkins(通过插件HTML Publisher/git/Email Extension)进行自动构建,生成HTML,发送邮件
二十一、 python 的 import request
import是导入 requeset是一个模块
1 安装好python3,设置环境变量 勾选pip并下载requests包
2、运行cmd,输入pip install requests
3、成功之后cmd 输入python,回车后再输入import requests来引入这个库
4、pycharm 配置request的包文件
打开pycharm的setting,选择如下:
新建一个本地project。,打开下面的project interpreter,勾选existing interpreter。
project中创建一个新的 py文件,配置好了requests环境
二十二、 Sql数据库的增删改查
增
insert into +表名 +列名 +值
增加一条信息
insert into Students (姓名,性别,出生日期) values (‘王伟华’,‘男’,‘1983/6/15’)
删
delete form + 表名 where 列名 +值
删除表中zs的记录
delete form empty where name= ‘zs’
改
Update?+表名 set?列名=更新值?where?更新条件
蒋某员工的薪资改为三千
update emp set salary =3000 where name = “张”
查
select * from 表名 where 条件
查询表中工作是店员
select * from emp where job=‘CLERK’;
二十三、 cookie与session的区别
\1. cookie数据存放在客户的浏览器上,session数据放在服务器上
\2. cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗 考虑到安全应当使用session
\3. session会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的 性能考虑到轻服务器性能方面,应当使用cookie
\4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie
\5. 所以个人建议:
将登陆信息等重要信息存放为session
其他信息如果需要保留,可以放在cookie中
二十四、 web端文件编码有哪些
UTF-8 GBK ASCII码
二十五 、Post和Get区别
\1. get是不安全的,因为在传输过程,数据被放在请求的URL中,
post的所有操作对用户来说都是不可见的 (安全性)请求体中
2.Get传送的数据量较小,这主要是因为受URL长度限制
Post传送的数据量较大,一般被默认认为不收限制 (传输量)
get执行效率却比post方法好,get是form提交默认方法 (效率性)
二十六、web端和APP端的测试的不同
web测试是基于浏览器的,所以不用考虑安装卸载。
而App是客户端,必须测试安装、卸载、更新,还需要考虑其他异常情况,包括安装时候中断、弱网,安装后删除安装文件(可删除,不影响软件正常运行)。
App还有专项测试,如网络适配性、运营商环境、WIFI。
还有中断测试,就是在操作软件的时候,来电话、短信、电量不足提示等外部事件发生,会不会影响软件正常运行。
(1)性能测试:web页面测试主要关注的是响应时间;而App测试还需要关注流量、耗电量、CPU、内存等—monkey测试的指标
(2)兼容性方面:web是基于浏览器的,所以倾向于浏览器、电脑硬件、操作系统方面的兼容;而App测试兼容的是手机设备,要看设备系统、机型、分辨率、屏幕尺寸。
(3)交互方式:web主要采用鼠标点击方式;而App主要是手指点击、拖拽、手势测试、横屏测试,考虑更多的是手指的交互习惯。重点考虑回退、刷新是否会造成二次提交。
二十七、adb命令的基本使用(安装、卸载、获取日志)
\1. 查看设备 adb devices
\2. adb install xxx.apk //安装软件
adb install -r xxx.apk //重新安装该软件
adb uninstall apk包名.apk //卸载apk软件
\3. 登录设备shell 进入shell环境 adb shell
adb shell 进入手机的超级终端Terminal
adb shell <command命令> //直接shell运行设备命令, 相当于执行远程命令
\4. 从PC上发送文件到手机
adb push <本地路径> <远程路径>
adb push D:\xxx.apk system/app
\5. 从手机上下载文件到PC
adb pull <远程路径> <本地路径>
adb pull system/app/xxx.apk D:\
\6. 查看日志 adb logcat
二十八测试报告内包含哪些内容
1.写测试背景 2.测试目标 3.测试范围
4.测试环境 5.测试数据 6.测试标准(重点)
7.测试进度 8.测试结果 9.测试结论
二十九、 常用的http状态码都有哪些
200 – 请求成功 301 – 资源(网页等)被永久转移到其它URL
404 – 请求的资源(网页等)不存在 500 – 内部服务器错误
三十一、 web端的项目部署 Python+Selenium+unittest
1、搭建环境-安装jdk 安装python sdk 安装Selenium 安装pycharm
2、安装selenium模块: cmd 输入 python -m pip install selenium
3、seleniumide来进行录制web操作 在文件中找到元素标识
4、导入from selenium import webdriver
5、编写浏览器驱动的相关代码
6、根据元素特征(在selenium获取元素特征) 通过driver来操作元素
7、比说 (find+八大 元素定位).click/.sendkeys/swipe
8、新建Python unit test文件 import unittest导入模块
9、在测试方法中用断言进行测试
10、import HTMLTestRunner 生成测试报告
三十二 、数据库 模糊查询 分组查询 排序查询 where和having的区别
Where
where是一个约束声明,使用where来约束来自数据库的数据;
where是在结果返回之前起作用的;
where中不能使用聚合函数。
having:
having是一个过滤声明;
在查询返回结果集以后,对查询结果进行的过滤操作;
在having中可以使用聚合函数。
一*模糊查询**
% :表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。
select * from +表 where + 字段 Like 条件 把u_name 有“三”的记录全找出来。
select * from [user] where u_name LIKE ‘%三%’
? _ : 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:
select * from+表 where + 字段 Like 条件 这样name为三个字且第一个字是“三”的;
比如 select * from [user] where u_name LIKE ‘三__’
二 分组查询
select + 字段 +条件 from +表 group by +字段
select classnum, max(age) from tb group by classnum;
查询每个班学生的最大年龄
查询每个班中男女生的最大年龄
select class, sex,max(age) from tb group by class, sex;
三 排序查询
select * from +表 + order by 字段 +排序
asc代表的是升序 desc代表的是降序
按工资降序
select * from employees order by salary desc
where:
where是一个约束声明,使用where来约束来自数据库的数据 having是分组数据进行过滤
where是在结果返回之前起作用的;
where中不能使用聚合函数。
having:
having是一个过滤声明; where是对查询数据进行过滤
在查询返回结果集以后,对查询结果进行的过滤操作;
在having中可以使用聚合函数。
三十三 selenuim 八大元素定位方式**
一 八大定位 .ID定位 2.name定位 3.class name定位 4.tag name定位
5.link_text 6. partial_link_text定位 7.css定位 8.xpath定位
如果我现在通过id元素定位 现在找不到元素 请问是什么原因
一 id为虚拟 id(自动生成 的id)
二 页面中有frame 没办法定位
switch_to.frame可以通过id,classname,tag_name来定位的,
三 点击速度过快 页面没有加载出来就需要点击页面上的元素
这个需要增加一定等待时间,显示等待时间可以通过WebDriverWait 和util来实现
解决方法 switch_to
三十四 会在linux环境下搭建测试环境吗
JDK安装
\1. 通过FTP上传JDK压缩包;
\2. tar –zxvf 文件名 解压JDK文件
\3. mv 旧文件名 新文件名 修改文件名
\4. 修改JDK环境变量 vi / etc/profile
\5. 在文件末尾添加修改变量信息并保存(shift+i进入编辑模式,ESC退出编辑模式,即为命令模式,:wq!保存并退出):
\6. export JAVA_HOME=/usr/java1.7
export PATH=
J
A
V
A
H
O
M
E
/
b
i
n
:
JAVA_HOME/bin:
JAVAH?OME/bin:PATH
export CLASSPATH=.:
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
JAVA_HOME/lib/dt.jar:
JAVAH?OME/lib/dt.jar:JAVA_HOME/lib/tools.jar
\7. 重新执行系统配置文件 source /etc/profile
Tomcat安装
\1. 通过FTP上传Tomcat压缩包
\2. tar –zxvf 文件名 解压Tomcat文件
mv 旧文件名 新文件名 修改文件
\3. 修改端口号(默认为8080)
进入conf 修改server.xml文件
\4. 启动 startup.sh
关闭 shutdown.sh
访问:浏览器访问地址http://192.168.0.253:8080/
MySQL5.7安装
\2. 创建MySQL用户 mkdir /_data/mysql
创建MySQL用户组 grounpadd mysql
\3. 通过FTP上传MySQL压缩包
\4. tar –zxvf 文件名 解压MySQL文件
\5. 修改文件名 mv 旧文件名新文件名
\6. 初始化mysql数据库 cd /_data/mysql
./bin/mysqld --user=mysql --basedir=/_data/mysql --datadir=/_data/mysql/data/ --initialize
\7. 启动服务 ./support-files/mysql.server start(或者service mysqld start)
\8. 修改文件 (红色为添加的实际安装路径)
vim support-files/mysql.server
basedir=/home/mysql
datadir=/home/mysql/data
\9. 创建软链接 ln -s /home/mysql/bin/mysql /usr/bin/mysql
\10. 通过FTP新建 my-default.cnf 配置文件(文件内容网上百度通用)
\11. 拷贝配置文件模板为新的mysql配置文件
cp my-default.cnf /etc/my.cnf
\12. 设置编码为utf8以防乱码
\13. 配置mysql服务开机自动启动
\14. 登录mysql服务 mysql -uroot –p 回车
use mysql
修改密码
\15. 重启服务,登录mysql,输入新密码,登录成功
\16. 设置远程连接 mysql> grant all privileges on . to ‘root’@’%’ identified by ‘123456’
\17. 通过mysql连接工具连接,连接成功则OK
三十五、在python项目下 如果开发没有提供详细的接口文档会怎么做
和开发要接口文档,用fiddler抓包并根据需求文档进行测试,
\1. 找开发要(开发不一定给)
\2. 看开发代码(需要有代码能力)
\3. 抓包获取(最简单) ,用fiddler抓包并根据需求文档进行测试,
三十六、列表:list, 元组:tuple, 字典:dict 集合:set之间的区别
相同点:
a.四者都是数据结构
b.四者都是可迭代对象
c.四者都可以存储不同类型的数据
d.可以通过系统的list(),tuple(),dict(),set()进行相互转换
不同点: 列表元组字典可重复 7 集合不可重复
a 列表直接储存元素 有序 可进行增删改查
b 元组 直接储存元素 有序 不能进行增删改
c 字典 是以键值对形式存在的,无序,键不可重复,值可重复
d 集合 直接储存元素 无序 自动去重 可修改
三十七、你是怎样做接口测试的
根据接口文档来进行设计具体的测试用例,等价划分类,边界值分析,错误推测法
三十八、你们的测试流程是怎样的的
我拿到了开发设计文档,根据我负责的理财这块的校验点来输出测试用例,接到我这个模块的测试版本来执行测试用例,发现了提交bug,开发人员修改,在进行下一步测试,
三十九、平时什么时候会用到monkey测试 哪个时期会用到
一般版本前期,目的是为了大量发现bug 每一个版本会用到 跟我们版本的更新迭代有关系
四十 、那么为什么要进行弱网测试?
测试稳定性 3G网都很少,因此,这款AP应用要想完成交付,就一定要在弱网状态甚至在没有网络状态下运行。
模拟弱网环境测试 弱网功能测试:2G/3G/4G、高延时、高丢包
无网状态测试:断网功能测试、本地数据存储
用户体验关注:响应时间、页面呈现&超时文案&超时重连、安全及大流量风险
网络切换测试:Wifi----4G/3G/2G-----无网多状态切换
四十一、断言总结
接口断言
1、判断请求返回的状态为200,200就是正常
2、判断请求返回中其它字段的值(或状态)
3、获取json数据,并校对返回值的正确性
4、判断响应时间
5、判断返回数据的类型
6、判断返回数据中是否存在某个元素
自动化测试断言 判断条件是否成立
assertEqual(a,b,[msg=‘测试失败时打印的信息’]):若 a=b,则测试用例通过
assertNotEqual(a,b,[msg=‘测试失败时打印的信息’]):若a != b,则测试用例通过
assertTrue(x,[msg=‘测试失败时打印的信息’]):若x是True,则测试用例通过
assertFalse(x,[msg=‘测试失败时打印的信息’]):若x是False,则测试用例通过
assertIs(a,b,[msg=‘测试失败时打印的信息’]):若a是b,则测试用例通过
assertNotIs(a,b,[msg=‘测试失败时打印的信息’]):若a不是b,则测试用例通过
assertIsNone(x,[msg=‘测试失败时打印的信息’]):若x是None,则测试用例通过
assertIsNotNone(x,[msg=‘测试失败时打印的信息’]):若x不是None,则测试用例通过
assertIn(a,b,[msg=‘测试失败时打印的信息’]):若a在b中,则测试用例通过
assertNotIn(a,b,[msg=‘测试失败时打印的信息’]):若a不在b中,则测试用例通过
assertIsInstance(a,b,[msg=‘测试失败时打印的信息’]):若a是b的一个实例,则测试用例通过
assertNotIsInstance(a,b,[msg=‘测试失败时打印的信息’]):若a不是b的实例,则测试用例通过
(一)assertEqual 和 assertNotEqual
- assertEqual:如两个值相等,则pass
- assertNotEqual:如两个值不相等,则pass
(二)assertTrue和assertFalse
- assertTrue:判断bool值为True,则pass
- assertFalse:判断bool值为False,则Pass
(三)assertIsNone和assertIsNotNone
- assertIsNone:不存在,则pass
- assertIsNotNone:存在,则pass
四十二、你是 怎么进行测试的(问的就是测试的关注点)
那我这边的关注赎回这块的到账日期需要知道最快的结果,会在数据库里修改购买的时间,
四十三、你们几个测试 任务是怎么分配的
我们是两个测试 具体是按照情况来分配的 ,如果是按照移动端来划分的话我是进行的是安卓系统模块,她进行的是ios模块,如果是同一个系统的话,我负责的是xx模块,她负责是xx模块
四十四、自动化测试怎么进行校验
举例 拿一个按钮讲 try 如果执行成功按钮显示了,是可以点击的
1、首先执行 try 中的代码块,如果执行过程中出现异常,系统会自动生成一个异常类型,并将该异常提交给 Python 解释器,此过程称为捕获异常。
2、 当 Python 解释器收到异常对象时,把该异常对象交给该 except 块处理,这个过程被称为处理异常。如果 Python 解释器找不到处理异常的 except 块,则程序运行终止,Python 解释器也将退出。
|