python⾃动化题⽬(⼀)
第⼀题:json和字典的区别?
Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是⽬前互联⽹项⽬开发中最常⽤的⼀种数据交互格式。
字典,同样是以key-value的键值对来保存数据,是python中的⼀种数据类型。
第⼆题:你做接⼝⾃动化测试时,测试数据放哪⾥?
1. 对于⼀些基础配置⽐如数据库配置可以放到properties⽂件(yaml⽂件,没⽤过就别拓展了)
2. 接⼝测试需要⽤到的数据可以放数据库表,也可以放到excel中
第三题:什么是数据驱动?
数据驱动就是通过excel,或者xml,数据库等数据结构来维护测试数据,通过相应的技术去处理,拿到测试数据⽤于测试,从⽽实现测试数据与代码的解耦,数据驱动测试的本质是⾼级的参数化。
第四题:excel中如何设计你的⽤例?
1. 所有的接⼝信息维护在⼀个表单
2. 关于接⼝的⽤例数据维护在⼀个表单
3. 接⼝传参⼀列来传,通过构造json格式的字符串即可解决传多个参数的问题,同时提升了⽤例的可维护性
第五题:excel中的数据怎么拿出来?
通过第三⽅库openpyxl来完成,项⽬只需要引⼊openpyxl库,通过它提供的api即可完成对于excel的操作,甚⾄于我们⾃⼰也可以做⼀些⼆次封装,使得操作更⽅便。⼀⾏数据就是⼀个⽤例。
第六题:如果有些接⼝做了鉴权(需要鉴定权限),怎么实现这些接⼝的⾃动化测试?
⾸先需要明确接⼝是通过什么机制来实现的鉴权
1. 如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调⽤完登录接⼝–》拿到它返回的这个数据–》存储起来–》后⾯再调⽤其他接⼝的时
png转成svg候直接带上这个数据过去就可以了。
2. 如果是通过token来实现鉴权的,那么同样只需要在调⽤完登录接⼝–》拿到它返回的这个数据–》存储起来,后⾯操作同上。
先回答上⾯的⼀个基本实现步骤,然后再补充以下⼀些实现细节:
1. 怎么取到这个JSESSIONID或者token
** 这个信息怎么取⾸先得明⽩它是怎么返回来的,可能为以下两种⽅式:
a. 登录接⼝的响应头
b. 登录接⼝的响应报⽂
需要开发确认,不同⽅式不同取法。
2. . 怎么存储这个JSESSIONID或者token
a. ⽂件中(excel、properties⽂件都可以)
b. 数据库
c. 代码⾥⾯⾃⼰定义的公共静态变量,作为⼀个共享的数据
3. . 请求其他需要鉴权的接⼝时,怎么带过去这个数据
先开发⼈员确认,再调⽤需要鉴权的这些接⼝怎么携带这个鉴权的信息(票)。
⼀般不外乎这么⼏种:
a. 拼接在url上传过去⽤于服务器验证
b.设置到请求体中
c. 通过请求头带过去 弄明⽩怎么传过去以后,就设法从保存了这个鉴权信息的地⽅取出来 —> 传过去
第七题:什么是会话?
所谓会话就是session,⽽session是⼀种服务器的缓存技术,由服务器端创建,⽤户登录了系统,⼀般就会把登录⽤户的信息保存到这个session对象中,然后把此会话对应的id(JSESSIONID)返回,因此⼤部分系统都会⽤到session机制来实现鉴权。Session保存数据⽅式也是以key-value的形式。
第⼋题:什么是token?
所谓token其实就是服务器端返回的⼀个字符串(有点类似于:xys73494954sdhcdr83435这么⼀串),
这个数据是基于什么算法⽣成的需要开发确认,⼀般这个数据是唯⼀的,服务器每次返回的token都会不⼀样。Token之所以可以⽤来做鉴权,原理如下:⽤户a调⽤了登录接⼝–》登录了系统b–》服务器端⽣成了⼀个唯⼀的token信息(假设为c),然后会拿⽤户的编号id(假设为d)做了⼀个映射:c-d,然后将这样的映射关系存到数据库或redis等缓存中,然后再返回这个token给客户端–》客户端再调⽤其他需要鉴权的接⼝时,只需要将缓存起来的这个token带过去验证–》服务器根据此token检查是否有登录⽤户信息来判断此请求是否是⼀个已登录授权的⽤户。(这⾥客户端怎么取到这个token,怎么存,再次请求时怎么带过去,上⾯接⼝鉴权部分已解释)。
第九题:某个接⼝请求,参数依赖上个接⼝的返回数据,怎么处理(接⼝关联)?
场景:b接⼝在调⽤的时候参数依赖于a接⼝的返回数据。 处理⽅案:
a接⼝调⽤完–》从响应中取出b依赖的这个参数–》保存起来–》b调⽤的时候,取出这个信息–》当做参数传过去即可。
第⼗题:接⼝调⽤依赖第三⽅的接⼝b,⽽b接⼝还未提供给你,如何处理?
通过mock框架搭建⾃⼰的mock系统/平台(其实就是⾃⼰开发接⼝),模拟这个第三⽅接⼝mock⼀个出来即可,这样就解决了这个依赖
第⼗⼀题:接⼝测试的垃圾数据如何清理?
可以⾃⼰准备单独的环境(独⽴的数据库),这样接⼝调⽤产⽣的数据可以在整个套件执⾏完后(@AfterSuite)通过执⾏sql脚本来完成数据删除。
第⼗⼆题:你做接⼝⾃动化,项⽬⽤的是什么数据库,⽤什么来操作的这个数据库?
python基础知识测试
Mysql,可以通过jdbc来实现数据库的增删查改等操作。
第⼗三题:你做接⼝⾃动化时怎么做的数据验证?
数据验证主要包括两个⽅⾯:
stress1. 接⼝响应报⽂的验证
利⽤jsonpath取出响应数据(⼤多数情况是json)中的关键字段的值,通过Assert断⾔这些关键字段的值是否符合预期。预期值和jsonpath取值表达式可以配置在excel中。
2. 数据库表数据的验证 做表数据验证要先明⽩两点:
a.表数据验证⾸先得明⽩这个接⼝的基本业务,会影响到哪些表,哪些字段的数据,然后才能准备查
询sql去有针对性的查数据。
b. 并不是所有⽤例的执⾏都会操作数据库,影响到表数据,因此只有影响到了表数据的⽤例,才准备查询脚本。
具体做法:
Excel⽤例准备aa,bb,cc三列,aa传脚本,bb,cc两列分别⽤来回写⽤例执⾏前的sql查询结果和⽤例执⾏后的sql查询结果,两个数据对⽐即可知道数据变化是否满⾜预期。
第⼗四题:如何提升测试套件的执⾏效率
1. 减少excel读写,减少不必要的io操作
2. excel数据读取测试数据,全部存储到静态变量中)。
3. excel数据回写,尽量通过批量⽅式去写。
第⼗五题:你⽤过单元测试框架吗,是什么框架,有哪些常⽤操作?
⽤过,unittest,pytest(不熟可以不说),这些测试框架都⽀持我们去定义测试套件,达到管理我们测试
⽤例代码的作⽤,同时这些测试框架提供的⼀些丰富注解不仅能很⽅便的控制测试⽤例的执⾏顺序来控制整个测试流程,还能为各种测试场景的实现提供⽀撑。
常⽤操作:
c语言程序代码烟花效果seutp,teardown,适合单个测试⽤例的初始化、环境清理。
seutpClass,teardownClass:适合测试类的全局初始化、环境清理。
assertXXXX: 各种断⾔⽅式
testLoader的discover: ⽤来发现测试⽤例
testSuite的addTests: ⽤来装载测试⽤例
@ddt 数据驱动
htmlTestRunner:⽤来⽣成html测试报告
第⼗六题:说说你对接⼝的理解
接⼝是服务,是功能点实现,是数据传递的通道,也是服务器端的⼀个实现了某种协议(⽐如http协议…)和映射机制(当访问⼀个url时就会通过服务器端的映射处理机制解析后,落到对应的处理函数)的函数,接⼝参数就是函数的参数,接⼝的响应数据就是函数的返回值
第⼗七题:做过接⼝测试吗,有哪些熟悉的⼯具。
做过(即时你之前没有⽤过可视化⼯具做过接⼝测试,但你现在学了接⼝⾃动化测试就算有经验了)。
熟悉的⼯具:
可视化⼯具⽐如:jmeter,postman,soapui等(⽤过哪些说哪些) 代码:requests发包技术来实现接⼝测试。
第⼗⼋题:接⼝常见的请求⽅法有哪些?
GET、POST、PUT、DELETE等(不熟的可以说)
第⼗九题:请简单说⼀说get、post这两种请求⽅法的区别?
Get:
1. ⼀般对于从服务器取数据的请求可以设置为get⽅式
2. Get⽅式在传递参数的时候,⼀般都会把参数直接拼接在url上(例如:xxx?id=1&type=2)
3. Get请求⽅法可以传递的参数数据量是有限的(因为⼀般参数是拼接在url上,⽽浏览器对于url的长度是有限制的)
4. Get请求因为是直接将数据拼接在url上,所以安全性不如post强(相对),但是get的执⾏效率要快于post
Post:
1. ⼀般往服务器提交数据的请求会设置为post⽅式
2. Post⽅式传递参数⼀般都会把参数放在请求体,⽽不会拼接在url
3. Post请求⽅法可以提交的数据量不受限制
4. Post请求传参相对于get要安全(相对不是绝对),但是post的执⾏效率不如get
第⼆⼗题:在浏览器中输⼊URL,回车之后发⽣了什么?
源码程序员
1. URL 解析
2. DNS 查询
3. TCP 连接
4. 处理请求
5. 接受响应
6. 渲染页⾯
第⼆⼗⼀题:将列表a = [“h”,“e”,“l”,“l”,“o”]拼接成字符串,请⽤多种⽅法实现
a =["h","e","l","l","o"]
⽅式⼀:字符串函数调⽤
print("".join(a))
⽅式⼆:for循环
s =""
for item in a:
s += item
print(s)
第⼆⼗⼆题:存在⼀个名称为data.log的⽂件,data.log中的内容是以逗号作为分隔符的,依次存储了⼀次测试的TestID,TestTime,Success(0成功;1失败)。⽂件中数据均为⾮负整数。请写⼀段程序(不限语⾔),对所有成功(Success=0)的测试,输出:
1. 打印最⼤、最⼩TestTime;
2. 打印平均TestTime,保留⼩数点2位数。
data.log的内容格式如下:
TestID,TestTime,Success
0,149,0
1,69,0
2,45,0
3,18,1
4,18,1
"""
打开data.log⽂件。除了第⼀⾏,剩下的第⼀⾏都是数据。
只需要按⾏解析数据,将success对应的值为0的提取出来,将TestTime放在⼀个新的列表当中。
取这个列表当中,最⼤的值,和最⼩的值。
同时,对这个列表的所有数据进⾏取平均值即可。
"""
import os
def anaysis_data():
test_times =[]
# 打开data.log⽂件
with wd()+"/data.log")as fs:
for line adlines():# 按⾏读取
temp = line.strip("\n").split(",")# 去掉换⾏符之后,再按,分割
print("temp",temp)
if temp[-1]==str(0):# 筛选success字段为0的TestTime
test_times.append(int(temp[-2]))
if len(test_times)>0:
avg_time =sum(test_times)/len(test_times)# 平均值
max_time =max(test_times)
min_time =min(test_times)
print("最⼤的TestTime: ",max_time,",最⼩的TestTime: ",min_time,",平均TestTime: ",avg_time)
if __name__ =='__main__':
anaysis_data()
"""
输出结果为:
temp ['TestID', 'TestTime', 'Success']
temp ['0', '149', '0']
temp ['1', '69', '0']
temp ['2', '45', '0']
多级伸缩电动推杆
temp ['3', '18', '1']
temp ['4', '18', '1']
最⼤的TestTime:  149 ,最⼩的TestTime:  45 ,平均TestTime:  87.66666666666667
"""

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。