41、怎么设计接口测试用例?(非常重要)
通常,设计接口测试用例需要考虑以下几个方面:
①是否满足前提条件
有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token
逆向用例:针对是否满足前置条件(假设为n个条件),设计1~n条用例
②是否携带默认值参数
正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确,设计1条用例
③业务规则、功能需求
结合接口参数说明,可能需要设计N条正向用例和逆向用例
④参数是否必填
逆向用例:针对每个必填参数,都设计1条参数值为空的逆向用例
⑤参数之间是否存在关联
有些参数彼此之间存在相互制约的关系
⑥参数数据类型限制
逆向用例:针对每个参数都设计1条参数值类型不符的逆向用例
⑦参数数据类型自身的数据范围值限制
正向用例:针对所有参数,设计1条每个参数的参数值在数据范围内为最大值的正向用例
42、你做接口测试,测什么?(非常重要)
可用性测试
根据约定的协议、方法、格式内容,传输数据到接口经处理后返回期望的结果:
1、根据响应结果判断接口功能是否正确实现;
2、返回值测试 – 返回值除了内容要正确,类型也要正确,保证调用方和前端能够正确地解析,
3、返回值测试 – 判断返回值中的字段是否有缺少或者多余
4、参数值边界值、等价类测试;
错误和异常处理测试
1、输入异常值(空值、特殊字符等),接口能正确处理,且按预期响应;
2、输入超长数据或者超大或者超小数据,接口能正确处理,且按预期响应;
3、输入错误的参数,接口能正确处理,并按预期响应;
4、多输入、少输入参数,接口能正确处理,且按预期响应;
5、错误传输数据格式(如json格式写成form格式)测试;
安全性测试,主要指传输数据的安全性:
1、敏感数据(如密码、秘钥)等是否加密传输;
2、返回数据是否含有敏感数据,如用户密码、完整的用户银行账号信息等;
3、接口是否对传入的数据做安全校验,如身份ID加token类似校验;
4、接口是否防止恶意请求(如大量伪造请求接口致使服务器崩溃);
性能测试,如接口的响应时间、并发处理能力、压测处理情况:
1、并发请求相同的接口(特别为POST请求),接口的处理情况(如插入了相同的记录导致数据出错,引发系统故障);
2、接口响应时长在用户可忍受的范围内;
3、对于请求量大的接口做压测,确定最大的瓶颈点是否满足当前业务需要;
43、没有接口文档,如果做接口测试?(非常重要)
没有接口文档,那就需要先跟开发沟通,然后整理接口文档
没有接口文档,可以抓包看接口请求参数,然后不懂的跟开发沟通
44、你平常做接口测试的过程中发现过哪些bug?(非常重要)
面试官出这个题,主要是想知道你是不是真的做过接口测试,
常规错误,接口没实现,没按约定返回结果,边界值处理出错等。
输入异常值(空值、特殊字符、超过约定长度等),接口抛错,没做封装处理;
输入错误的参数、多输入、少输入参数,接口可能出现的错误;
安全性问题,如明文传输、返回结果含有敏感信息,没对用户身份信息做校验,没做恶意请求拦截等;
性能问题,如接口并发插入多条相同操作,响应时间过长,接口压测出现瓶颈等;
45、你的项目是什么阶段介入接口自动化测试的(非常重要)?
项目前期:编写测试用例、搭建测试框架、调试脚本代码;
项目中期:执行测试,报告bug,维护框架,调整测试用例
项目后期:代码改进,框架优化,结果输出,分析报告,回归测试
项目上线:监控项目,维护框架
46、Python 什么是命名元组?
from collections import namedtuple
User=namedtuple('User',('name','age','city'))
user1=User('kobe','18','洛杉矶')
print(user1) #User(name='kobe', age='18', city='洛杉矶')
print(user1.name)
print(user1.age)
print(user1.city)
执行结果:
python
User(name='kobe', age='18', city='洛杉矶')
kobe
18
洛杉矶
47、Python 如何去操作 MySQL 数据库?
# 1、导入mysql
from pymysql import *
# 2、创建数据库lianjie
conn = connect(host='localhost',
port=3306,
user='root',
password='xxxx',
db='mytestdb',
charset='utf8')
print(conn)
# 3、打开游标
cur=conn.cursor()
# 4、执行sql语句
# 编写sql语句
# 查询数据时为了节约内存,不要用*,而要指定具体的字段,另外要指定查询条件,现在查询条数
sql="select sno,sname,sex,age,enterdate,classname,email from t_student1 where age>%s"
params=(30)
# 执行sql语句
cur.execute(sql,params)
# todo 获取1条数据,每次执行cur.fetchone()语句,游标都会向下走,获取到新的数据
result=cur.fetchone()
print(result)
# result=cur.fetchone()
# print(result)
# result=cur.fetchone()
# print(result)
# todo 获取所有的数据
result1=cur.fetchall()
print(result1)
# todo 获取多条数据
result1=cur.fetchmany(2) #取指定条数据
print(result1)
# 5、关闭游标
cur.close()
# 6、关闭连接
conn.close()
48、解决手动造数据问题(重要)
参数化
手机号:
excel里边存放初始手机号 每次执行完,回写新的手机号(原来号码+1)
每次从数据库里查询最大手机号,在这个基础上加1
变量替换: 数据库依赖关系 ${mobile} ${regtime} ${memberid} ${loanid}
最关键:用例设计、用例参数之间依赖关系
49、为什么做接口测试(重要)?
a、可以发现很多在页面上发现不了的bug。
b、检查系统的异常处理能力。
c、检查系统的安全性,稳定性。
d、前端随便变,接口测好了,后端就可以不用变了。
e、接口测试是一个完整的体系,也包括功能刻试、性能则试和安全性测试。
50、登录按钮除了用click方法进行点击以外还有其他方式吗?
还可以使用 submit()
方法,前提是input元素的type为submit
51、怎么验证复选按钮是不是被选中
可以使用元素的 isSelected() 方法,如果返回的是 true 则说明被选中,否则表明未被选中
52、需求:给定一个只包含正整数且非空的数组,返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序), 请用熟悉的语言实现该需求。10分钟内写出来
a=[2,3,5,7,2,2,7,8,5,5,5]
def fun(s):
d={}
for item in s:
if item not in d:
d[item]=1
else:
d[item]+=1
print(d)
return d
def fun_sort():
res = fun(a)
dd = sorted(res.items(), key=lambda x: x, reverse=True)
print(dd)
N = int(input("请输入一个数:"))
for i in range(0,N):
print("出现次数排第%d的数字是%d,共出现了%d次" % (i+1,dd[i][0],dd[i][1]))
fun_sort()
53、在制定自动化测试计划的时候一般要考虑哪些点?(重要)
1、分析当前的工具是否适合新项目
2、选择合适的自动化测试框架
3、确定要做自动化测试的范围和不做自动化测试的范围
4、测试环境的准备
5、制定一个粗略的脚本开发的时间表
6、制定脚本执行的一些策略,如冒烟测试的频率,回归测试的时间点及频率等
7、定义自动化测试的输出,比如脚本,测试数据,发现的缺陷,测试报告等
54、编写自动化脚本时的一些规范?
1、统一的命名约定,如用例名,方法名等
2、良好的脚本注释
3、遵循代码规范,使用适当的缩进
4、对异常进行处理
55、做自动化测试时关注的一些指标?
1、自动化测试用例的覆盖率=自动化测试用例数/所用用例总数,这个比例越高测试反馈越快,成本节约越多
2、节省的时间成本=手工测试所花的时间-自动化测试所花的时间
3、自动化测试的投入=开发脚本的投入+脚本维护的投入+工具价格
4、自动化测试发现的缺陷数,每次回归测试时自动化测试发现的缺陷数及漏测数,反应了自动化用例的有效性
5、自动化测试投入产出比
ROI=(手工测试的成本-自动化测试成本)/自动化测试成本
ROI如果是负值说明自动化测试的成本未收回,ROI为正值说明自动化测试成本已回收,且值越大说明回报越好
56、Selenium可以处理Windows弹窗吗?
Selenium本身是不可以处理Windows弹窗的,但是Selenium可以借助Autolt小工具来完成对Windows弹窗的操作。
57、如何判断一个元素在页面上是显示出来的?
webelement类中的is_displayed()方法
本身这个函数用于判断某个元素是否存在页面上(这里的存在不是肉眼看到的存在,而是html代码的存在。某些情况元素的visibility为hidden或者display属性为none,我们在页面看不到但是实际是存在页面的一些元素。)
58、Selenium中如何判断元素是否存在?
from selenium.common.exceptions import NoSuchElementException
# 判断元素是否存在
def isElementPresent(self, by, value):
try:
element =self.driver.find_element(by=by, value=value)
except NoSuchElementException as e:
# 发生了NoSuchElementException异常,说明页面中未找到该元素,返回False
return False
else:
# 没有发生异常,表示在页面中找到了该元素,返回True
return True
59、不可逆的操作,如何处理,比如删除一个订单这种接口如何测试
此题考的是造数据的能力,接口的请求数据,很多都是需要依赖前面一个状态的
比如工作流这种,流向不同的人状态不一样,操作权限不一样,测试的时候,每种状态都要测到,就需要自己会造数据了。
平常手工测试造数据,直接在数据库改字段状态。那么自动化也是一样,造数据可以用python连数据库了,做增删改查的操作。
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
60、接口产生的垃圾数据如何清理
跟上面一样,造数据和数据清理,需用python连数据库了,做增删改查的操作
测试用例前置操作,setUp做数据准备
后置操作,tearDown做数据清理。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123226.html