2023年7月10日发(作者:)
关于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.什么是数据驱动1.数据驱动就是通过excel,或者xml,数据库等数据结构来维护测试数据,通过相应的技术去处理,拿到测试数据⽤于测试,从⽽实现测试数据与代码的解耦,数据驱动测试的本质是⾼级的参数化。⾥⾯⽤unittest框架st框架还有⼀个paramunittest也可以实现4.如果⽤的是pytest框架,也能实现参数化⾥⾯还有⼀个更加强⼤的功能,获得多个参数化参数的所有组合,可以堆叠参数化装饰器中如何设计你的⽤例?1.所有的接⼝信息维护在⼀个表单2.关于接⼝的⽤例数据维护在⼀个表单3.接⼝传参⼀列来传,通过构造json格式的字符串即可解决传多个参数的问题,同时提升了⽤例的可维护性05excel中的数据怎么拿出来?通过第三⽅库openpyxl来完成,项⽬只需要引⼊openpyxl库,通过它提供的api即可完成对于excel的操作,甚⾄于我们⾃⼰也可以做⼀些⼆次封装,使得操作更⽅便。⼀⾏数据就是⼀个⽤例。06如果有些接⼝做了鉴权(需要鉴定权限),怎么实现这些接⼝的⾃动化测试?⾸先需要明确接⼝是通过什么机制来实现的鉴权1.如果是通过会话id(JSESSIONID)来实现鉴权的,那么先调⽤完登录接⼝–》拿到它返回的这个数据–》存储起来–》后⾯再调⽤其他接⼝的时候直接带上这个数据过去就可以了。2.如果是通过token来实现鉴权的,那么同样只需要在调⽤完登录接⼝–》拿到它返回的这个数据–》存储起来,后⾯操作同上。先回答上⾯的⼀个基本实现步骤,然后再补充以下⼀些实现细节:a怎么取到这个JSESSIONID或者token这个信息怎么取⾸先得明⽩它是怎么返回来的,可能为以下两种⽅式:1.登录接⼝的响应头2.登录接⼝的响应报⽂需要找开发确认,不同⽅式不同取法。b怎么存储这个JSESSIONID或者token1.⽂件中(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数据库表数据的验证做表数据验证要先明⽩两点: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这两种请求⽅法的区别?GetPosta. ⼀般往服务器提交数据的请求会设置为post⽅式b. Post⽅式传递参数⼀般都会把参数放在请求体,⽽不会拼接在urlc. Post请求⽅法可以提交的数据量不受限制d. Post请求传参相对于get要安全(相对不是绝对),但是post的执⾏效率不如get。20在浏览器中输⼊URL,回车之后发⽣了什么? 解析 查询 连接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 += itemprint(s)22存在⼀个名称为的⽂件中的内容是以逗号作为分隔符的,依次存储了⼀次测试的TestID,TestTime,Success(0成功;1失败)。⽂件 中数据均为⾮负整数。请写⼀段程序(不限语⾔),对所有成功(Success=0)的测试,输出:1.打印最⼤、最⼩TestTime;2.打印平均TestTime,保留⼩数点2位数。的内容格式如下:TestID,TestTime,Success0,149,01,69,02,45,03,18,14,18,1“”"打开⽂件 。除了第⼀⾏,剩下的第⼀⾏都是数据。只需要按⾏解析数据,将success对应的值为0的提取出来,将TestTime放在⼀个新的列表当中。取这个列表当中,最⼤的值,和最⼩的值。同时,对这个列表的所有数据进⾏取平均值即可。“”"import osdef anaysis_data():test_times = []# 打开⽂件with open(() + “/”) as fs:for line in nes(): # 按⾏读取temp = ("n").split(",") # 去掉换⾏符之后,再按,分割print(“temp”,temp)if temp[-1] == str(0): # 筛选success字段为0的TestTimetest_(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“”"24依赖于登录的接⼝如何处理登录接⼝依赖token的,可以先登录后,token存到⼀个yaml或者json,或者ini的配置⽂件⾥⾯,后⾯所有的请求去拿这个数据就可以全局使⽤了参考之前分享的⼀篇python接⼝⾃动化24-token关联登录如果是cookies的参数,可以⽤session⾃动关联s=n()后⾯请求⽤()和()就可以⾃动关联cookies了26不可逆的操作,如何处理,⽐如删除⼀个订单这种接⼝如何测试此题考的是造数据的能⼒,接⼝的请求数据,很多都是需要依赖前⾯⼀个状态的⽐如⼯作流这种,流向不同的⼈状态不⼀样,操作权限不⼀样,测试的时候,每种状态都要测到,就需要⾃⼰会造数据了。平常⼿⼯测试造数据,直接在数据库改字段状态。那么⾃动化也是⼀样,造数据可以⽤python连数据库了,做增删改查的操作测试⽤例前置操作,setUp做数据准备后置操作,tearDown做数据清理28⼀个订单的⼏种状态如何全部测到如:未处理,处理中,处理失败,处理成功跟上⾯⼀样,也是考察造数据,修改数据的状态29平常你是怎么测试接⼝的?01分析⾯试官通过这个问题判断求职者是否做过接⼝测试,以及测试的深度。02思路接⼝测试的功能点(连通性、功能、性能、安全等)决定了接⼝测试执⾏的⽅式,有⼿⼯、⾃动化等。我们可以分别进⾏回答。03⼿动测试1、webService接⼝:可以使⽤的⼯具有SoapUI、jmeter、loadrunner等;2、http api接⼝:可以使⽤的⼯具有postman、RESTClient、jmeter、loadrunner等。04⾃动化测试⾃⼰开发第三⽅⼯具:SoapUI、 RobotFramework + HttpLibrary 。。。05性能测试⾃⼰开发第三⽅⼯具:Jmeter、 Gatling、LoadRunner。。。30没有接⼝⽂档,如何做接⼝测试?01分析如果我来问这个问题,原因可能是因为我的公司就是这个情况,然后看看求职者是否能适应这个情况。02思路先跟开发经理沟通,让他抽点⼈去整理接⼝⽂档; 然后我也会⾃⼰⽤抓包⼯具整理整理接⼝。31当⼀个接⼝出现异常时候,你是如何分析异常的?思路1.⽤fiddler等⼯具进⾏抓包,看请求报⽂和返回报⽂(浏览器可以使⽤F12)2.查看后端⽇志32如何模拟弱⽹测试?思路r和charles都可以模拟弱⽹测试,平常说的模拟丢包,也是模拟弱⽹测试。2.如果是APP,也可以借助连热点,然后在热点上限速33如何分析⼀个bug是前端还是后端的?思路先抓包看请求报⽂,对照接⼝⽂档,查看请求报⽂是否有问题,有问题就是前端发的数据不对。请求报⽂没问题,那就看返回报⽂,返回的数据不对,那就是后端开发的问题。34你平常做接⼝测试的过程中发现过哪些bug?01分析很多⾯试官希望通过这个问题来判断求职者是否真的做过接⼝测试。02思路回答这个问题可以从接⼝测试的内容,并结合接⼝测试相⽐页⾯测试的优势来回答,然后结合具体的案例来让我们的回答更丰满。03接⼝测试点04接⼝测试优势可以发现很多在页⾯上操作发现不了的bug。可以修改请求参数,突破前端页⾯输⼊限制。05举例说明1、⽐如⼀个订单⽀付时,我们页⾯上是⽆法改变订单⾦额的,但我们可以通过抓包⼯具捕获订单⽀付请求,然后修改订单⾦额后提交,然后出现了⼀个原价100元的订单我们⽤1分钱完成了⽀付。2、⽐如⼀个转账的页⾯,前段做了限制导致我们⽆法在转账⾦额的输⼊框输⼊负数,但我们可以通过抓包⼯具修改,然后出现了⼀个转账⾦额为负数的bug。35HTTP接⼝传递数据最常⽤的⽅式?get和post最常⽤。get是从服务器上获取数据 适⽤场景:在做搜索接⼝ 商品信息接⼝post是向服务器上传送数据 适⽤场景:在做数据添加修改删除时或图⽚上传等时能⽤到36HTTP接⼝测试的类型?1、get请求⽆参数2、get请求有参数3、post请求带参数37webservice接⼝如何测试的?⽤soapui⼯具测试38接⼝测试的步骤?⼤体流程是:1、阅读API接⼝⽂档2、编写测试⽤例3、根据测试⽤例进⾏API的⼿⼯测试(开发API⼯具、使⽤⼯具进⾏测试 )
发布者:admin,转转请注明出处:http://www.yc00.com/news/1688931457a184814.html
评论列表(0条)