关于python接⼝⾃动化的相关知识点整理(持续更新)
1,json和字典的区别
Json是轻量级的数据交互格式,以key-value的键值对形式来保存数据,结构清晰,可以说是⽬前互联⽹项⽬开发中最常⽤的⼀种数据交互格式。
字典,同样是以key-value的键值对来保存数据,是python中的⼀种数据类型。
⾸先python⾥⾯的基础数据类型有:int、str、 float、list、bool、tuple、dict、set这⼏种类型,⾥⾯没json这种数据类型。
JSON(JavaScript Object Notation, JS 对象简谱) 是⼀种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的⼀个⼦集,采⽤完全独⽴于编程语⾔的⽂本格式来存储和表⽰数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语⾔。 易于⼈阅读和编写,同时也易于机器解析和⽣成,并有效地提升⽹络传输效率。
由于你的代码是python写的(也有可能是php,java,c,ruby等语⾔),但是后端接⼝是java写的(也有可能是其它语⾔),不同的语⾔数据类型是不⼀样的(就好⽐中国的语⾔和美国的语⾔数据类型也不⼀样,中国的⼀般说⼀只⽺,⼀头⽜,美国都是 a /an这种单位),所以就导致你提交的数据,别的开发语
⾔⽆法识别,这就需要规范传输的数据(传输的数据都是⼀个字符串),⼤家都遵循⼀个规范,按⼀个标准的格式去传输,于是就有就json这种国际化规范的数据类型。
json本质上还是字符串,只是按key:value这种键值对的格式来的字符串
2.接⼝⾃动化的测试数据存放
测试数据存放总结:
1.对于账号密码,这种管全局的参数,可以⽤命令⾏参数,单独抽出来,写的配置⽂件⾥(如ini)
2.对于⼀些⼀次性消耗的数据,⽐如注册,每次注册不⼀样的数,可以⽤随机函数⽣成
3.对于⼀个接⼝有多组测试的参数,可以参数化,数据放yaml,text,json,excel都可以
4.对于可以反复使⽤的数据,⽐如订单的各种状态需要造数据的情况,可以放到数据库,每次数据初始化,⽤完后再清理
5.对于邮箱配置的⼀些参数,可以⽤ini配置⽂件
6.对于全部是独⽴的接⼝项⽬,可以⽤数据驱动⽅式,⽤excel/csv管理测试的接⼝数据
7.对于少量的静态数据,⽐如⼀个接⼝的测试数据,也就2-3组,可以写到py脚本的开头,⼗年⼋年都不会变更的
3.什么是数据驱动premise词根词缀
1.数据驱动就是通过excel,或者xml,数据库等数据结构来维护测试数据,通过相应的技术去处理,拿到测试数据⽤于测试,从⽽实现测试数据与代码的解耦,数据驱动测试的本质是⾼级的参数化。
2.python⾥⾯⽤unittest框架
3.unittest框架还有⼀个paramunittest也可以实现
4.如果⽤的是pytest框架,也能实现参数化
5.pytest⾥⾯还有⼀个更加强⼤的功能,获得多个参数化参数的所有组合,可以堆叠参数化装饰器
1.所有的接⼝信息维护在⼀个表单
2.关于接⼝的⽤例数据维护在⼀个表单
3.接⼝传参⼀列来传,通过构造json格式的字符串即可解决传多个参数的问题,同时提升了⽤例的可维护性
05excel中的数据怎么拿出来?
通过第三⽅库openpyxl来完成,项⽬只需要引⼊openpyxl库,通过它提供的api即可完成对于excel的操作,甚⾄于我们⾃⼰也可以做⼀些⼆次封装,使得操作更⽅便。⼀⾏数据就是⼀个⽤例。
06如果有些接⼝做了鉴权(需要鉴定权限),怎么实现这些接⼝的⾃动化测试?
⾸先需要明确接⼝是通过什么机制来实现的鉴权
1.如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调⽤完登录接⼝–》拿到它返回的这个数据–》存储起来–》后⾯再调⽤其他接⼝的时候直接带上这个数据过去就可以了。
javecome2.如果是通过token来实现鉴权的,那么同样只需要在调⽤完登录接⼝–》拿到它返回的这个数据–》存储起来,后⾯操作同上。
先回答上⾯的⼀个基本实现步骤,然后再补充以下⼀些实现细节:
a
怎么取到这个JSESSIONID或者token
asp脚本编程使用的语言是这个信息怎么取⾸先得明⽩它是怎么返回来的,可能为以下两种⽅式:
1.登录接⼝的响应头
2.登录接⼝的响应报⽂
需要开发确认,不同⽅式不同取法。
b
怎么存储这个JSESSIONID或者token
1.⽂件中(excel、properties⽂件都可以)
2.数据库
3.代码⾥⾯⾃⼰定义的公共静态变量,作为⼀个共享的数据
c
请求其他需要鉴权的接⼝时,怎么带过去这个数据
先开发⼈员确认,再调⽤需要鉴权的这些接⼝怎么携带这个鉴权的信息(票)。⼀般不外乎这么⼏种:
1.拼接在url上传过去⽤于服务器验证
2.设置到请求体中
3.通过请求头带过去
弄明⽩怎么传过去以后,就设法从保存了这个鉴权信息的地⽅取出来–》传过去
07什么是会话?
所谓会话就是session,⽽session是⼀种服务器的缓存技术,由服务器端创建,⽤户登录了系统,⼀般就会把登录⽤户的信息保存到这个session对象中,然后把此会话对应的id(JSESSIONID)返回,因此⼤部分系统都会⽤到session机制来实现鉴权。Session保存数据⽅式也是以key-value的形式。
08什么是token?
所谓token其实就是服务器端返回的⼀个字符串(有点类似于:xys73494954sdhcdr83435这么⼀串),这个数据是基于什么算法⽣成的需要开发确认,⼀般这个数据是唯⼀的,服务器每次返回的token都会不⼀样。Token之所以可以⽤来做鉴权,原理如下:
⽤户a调⽤了登录接⼝–》登录了系统b–》服务器端⽣成了⼀个唯⼀的token信息(假设为c),然后会拿⽤户的编号id(假设为d)做了⼀个映射:c-d,然后将这样的映射关系存到数据库或redis等缓存中,然后再返回这个token给客户端–》客户端再调⽤其他需要鉴权的接⼝时,只需要将缓存起来的这个token带过去验证–》服务器根据此token检查是否有登录⽤户信息来判断此请求是否是⼀个已登录授权的⽤户。(这⾥客户端怎么取到这个token,怎么存,再次请求时怎么带过去,上⾯接⼝鉴权部分已解释)。
09某个接⼝请求,参数依赖上个接⼝的返回数据,怎么处理(接⼝关联)?
不同的接⼝封装成不同的函数或⽅法,需要的数据return出来,⽤⼀个中间变量a去接受,后⾯的接⼝传a就可以了
01
处理⽅案
a接⼝调⽤完–》从响应中取出b依赖的这个参数–》保存起来–》b调⽤的时候,取出这个信息–》当做参数传过去即可。
02
保存⽅案
参考问题5中的数据保存⽅式
10接⼝调⽤依赖第三⽅的接⼝b,⽽b接⼝还未提供给你,如何处理
通过mock框架搭建⾃⼰的mock系统/平台(其实就是⾃⼰开发接⼝),模拟这个第三⽅接⼝mock⼀个出来即可,这样就解决了这个依赖。
11接⼝测试的垃圾数据如何清理?
造数据和数据清理,需⽤python连数据库了,做增删改查的操作
测试⽤例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
可以⾃⼰准备单独的环境(独⽴的数据库),这样接⼝调⽤产⽣的数据可以在整个套件执⾏完后(@AfterSuite)通过执⾏sql脚本来完成数据删除。
12你做接⼝⾃动化,项⽬⽤的是什么数据库,⽤什么来操作的这个数据库
Mysql,可以通过jdbc来实现数据库的增删查改等操作。
13你做接⼝⾃动化时怎么做的数据验证
数据验证主要包括两个⽅⾯:
01
接⼝响应报⽂的验证
利⽤jsonpath取出响应数据(⼤多数情况是json)中的关键字段的值,通过Assert断⾔这些关键字段的值是否符合预期。预期值和jsonpath取值表达式可以配置在excel中。
02
数据库表数据的验证python请求并解析json数据
做表数据验证要先明⽩两点:
a. 表数据验证⾸先得明⽩这个接⼝的基本业务,会影响到哪些表,哪些字段的数据,然后才能准备查询sql去有针对性的查数据。
b. 并不是所有⽤例的执⾏都会操作数据库,影响到表数据,因此只有影响到了表数据的⽤例,才准备查询脚本。
03
具体做法
Excel⽤例准备aa,bb,cc三列,aa传脚本,bb,cc两列分别⽤来回写⽤例执⾏前的sql查询结果和⽤例执⾏后的sql查询结果,两个数据对⽐即可知道数据变化是否满⾜预期。
14如何提升测试套件的执⾏效率
1.减少excel读写,减少不必要的io操作
15你⽤过单元测试框架吗,是什么框架,有哪些常⽤操作?
⽤过,unittest,pytest,这些测试框架都⽀持我们去定义测试套件,达到管理我们测试⽤例代码的作⽤,同时这些测试框架提供的⼀些丰富注解不仅能很⽅便的控制测试⽤例的执⾏顺序来控制整个测试流程,还能为各种测试场景的实现提供⽀撑。
常⽤操作
seutp,teardown,适合单个测试⽤例的初始化、环境清理。 seutpClass,teardownClass:适合测试类的全局初始化、环境清理。assertXXXX: 各种断⾔⽅式
testLoader的discover: ⽤来发现测试⽤例
testSuite的addTests: ⽤来装载测试⽤例
@ddt 数据驱动
htmlTestRunner:⽤来⽣成html测试报告
16说说你对接⼝的理解
接⼝是服务,是功能点实现,是数据传递的通道,也是服务器端的⼀个实现了某种协议(⽐如http协议…)和映射机制(当访问⼀个url时就会通过服务器端的映射处理机制解析后,落到对应的处理函数)的函数,接⼝参数就是函数的参数,接⼝的响应数据就是函数的返回值。
17做过接⼝测试吗,有哪些熟悉的⼯具。
做过(即时你之前没有⽤过可视化⼯具做过接⼝测试,但你现在学了接⼝⾃动化测试就算有经验了)。
熟悉的⼯具
可视化⼯具⽐如:jmeter,postman,soapui等(⽤过哪些说哪些)
代码:requests发包技术来实现接⼝测试。
18接⼝常见的请求⽅法有哪些?
GET、POST、PUT、DELETE等
19请简单说⼀说get、post这两种请求⽅法的区别?
Get
Post
a. ⼀般往服务器提交数据的请求会设置为post⽅式
b. Post⽅式传递参数⼀般都会把参数放在请求体,⽽不会拼接在url
c. Post请求⽅法可以提交的数据量不受限制
d. Post请求传参相对于get要安全(相对不是绝对),但是post的执⾏效率不如get。
20在浏览器中输⼊URL,回车之后发⽣了什么?
1.URL 解析
2.DNS 查询
3.TCP 连接
4.处理请求
5.接受响应
6.渲染页⾯
21将列表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)
22存在⼀个名称为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:怎么自己重装系统win7
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
“”"
24依赖于登录的接⼝如何处理
登录接⼝依赖token的,可以先登录后,token存到⼀个yaml或者json,或者ini的配置⽂件⾥⾯,后⾯所有的请求去拿这个数据就可以全局使⽤了
参考之前分享的⼀篇python接⼝⾃动化24-token关联登录
如果是cookies的参数,可以⽤session⾃动关联
jquery表单提交事件s=requests.session()
后⾯请求⽤s.get()和s.post()就可以⾃动关联cookies了
26不可逆的操作,如何处理,⽐如删除⼀个订单这种接⼝如何测试
此题考的是造数据的能⼒,接⼝的请求数据,很多都是需要依赖前⾯⼀个状态的
⽐如⼯作流这种,流向不同的⼈状态不⼀样,操作权限不⼀样,测试的时候,每种状态都要测到,就需要⾃⼰会造数据了。
平常⼿⼯测试造数据,直接在数据库改字段状态。那么⾃动化也是⼀样,造数据可以⽤python连数据库了,做增删改查的操作
测试⽤例前置操作,setUp做数据准备
后置操作,tearDown做数据清理
28⼀个订单的⼏种状态如何全部测到
如:未处理,处理中,处理失败,处理成功
跟上⾯⼀样,也是考察造数据,修改数据的状态
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论