自己开发api测试工具(api接口测试工具)

网友投稿 273 2022-12-25


本篇文章给大家谈谈自己开发api测试工具,以及api接口测试工具对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享自己开发api测试工具的知识,其中也会对api接口测试工具进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

常见接口测试工具有哪些?使用哪个好?

1.
主流接口测试工具:Jmeter、PostMan、RESTClient、Fiddler、Requests库,不同测试环境不同需求,选择不同工具。
1).
Jmeter:Java开发一款开源免费工具,适合接口功能测试、接口自动化测试、接口压力测试
【推荐】
2).
PostMan:谷歌公司开发的一款工具,分为浏览器插件版和客户端版。
适合开发自测接口、测试调试接口
3).
RESTClient:一款国人开发的火狐浏览器插件,界面简单,支持高亮显示,调试、自测
推荐。
4).
Fiddler:强大的抓包工具,支持接口请求、响应。
5).
Requests库:python语言中一个第三方请求库,使用代码测试接口不二选择。注意:适合python语言
以上内容均来自黑马程序员软件测试课程笔记

如何编写一个DLL的API 自动化测试工具

我估计楼主想做的是一种黑盒测试自己开发api测试工具,只要输入和输出正确就行自己开发api测试工具了。呵呵自己开发api测试工具,CPPUnit太麻烦了,并且还是要做很多事情,还要写测试用例,呵呵,我估计楼主求的测试工具应该是不存在的,因为没有什么工具能让你一段代码都不写就可以完成测试的,因为DLL的导出函数所能完成的功能太多了。无法一一照顾到自己开发api测试工具
我觉得如果可以的话,可以写一个简单的程序,但是可能比较麻烦。提供一个对话框程序,先提供选择DLL的机会,然后输入要测试的导出函数的函数名和相关的参数值,然后就可以LoadLibrary,GetProcAddress,FreeLibrary.显示返回值,但是这个程序只能对一些简单的只是设计一些算法处理的DLL有用吧,如果设置图形操作、导出类,还有内存的分配和释放都比较难处理!

python怎么做接口测试工具

之前使用过urllib和urllib2做接口测试,在做的途中,感觉使用urllib2直接进行的get,post 请求并没有那么好用。作为测试人员,所需要的测试工具应当以方便为第一要务,测试的耗时只要是真正的无人值守,耗时不是太久的都可以接受。所以,本人又尝试了一个新的包:requests。

Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 !推荐一篇文章,上面有该包的详细说明 传送门,以下只会写到我用到的部分,所以更多的了解需要自己去搜资料

好了,我们开始吧!!

接口测试中重要的部分:

1.get和post方法

2.用到的参数

3.请求头

4.cookie

5.日志输出

6.如何调试你的程序--借助fiddler

按照以上的顺序,我将一一说明我的搞法,因为编码能力有限,所以可能看着很low

一、get和post

requests包很好的实现了post和get方法,示例:

1 import requests2 response_get = requests.get(url, data, headers, cookies)3 response_post = requests.post(url, data, headers, cookies)

其他的访问方式如put,head等等,用法几乎都是如此,因为没用到,所以省略

现在一般的接口返回值有页面和json俩种,按照需求,可以分别使用response.text或者response.content获取,text获取的是unicode类型的返回值,而content返回值是str类型,所以我一般使用content来获取返回值,因为这样获取的返回值可以直接使用正则或者in的方式来验证返回值结果是否正确。

我自己为了实现接口的自动访问,所以又在requests上面加了一层封装,就像下面这样:

1 def main_get(list_result, cookies): 2     """ 3     用于模拟get请求,返回结果 4     :param list_result:空列表,用于存储结果 5     :param cookies: 登陆后的cookie 6     :return:访问结果 7     """ 8     # List_interface_get写在接口文件里,文件是py格式,然而它本身是字典类型 9     for key in List_interface_get:10         try:11             f1 = requests.get(key, cookies=cookies)12             if f1:13                 print f1.content14                 print List_interface_get[key]+'接口访问成功'15                 split_line()16             list_result.append(f1.content+'||'+key)17             # print f1.read()18         except AssertionError:19             print 'One Error in get'20             pass21     return list_result22 23 24 def main_post(result_list, url_list, param_list, payload_list, note_list, cookies):25     """26     模拟post请求27     :param result_list: 结果字典28     :param url_list: 接口字典29     :param param_list: 入参字典30     :param payload_list: header字典31     :param notelist: 描述字典32     :param cookies: 登录获取的cookie33     :return:填充完成的结果列表34     """35 36     # post这块写的比较low,最好自己搞一个数据结构把它搞定37     for key in range(1, 9):38         a = requests.post(url=url_list[key], data=param_list[key], headers=payload_list[key], cookies=cookies)39         try:40             if a.content:41                 print a.content42                 print note_list[key]+'接口访问成功'43                 split_line()44             result_list.append(a.content+'||'+url_list[key])45         except AssertionError:46             print 'One Error in post'47             pass48     return result_list

二、用到的参数以及请求头

我用的方法是把这些都存放于一个py文件中,当然也可以使用excel或者xml文件,甚至于使用DB。项目紧急,凑合了一下,这里的数据结构主要为了符合上面封装的函数,直接上代码看吧

1 BaseURL = 'https://******.com'  # 测试环境 2 # 使用什么数据结构不重要,关键看实现方法中怎么解析你的测试数据 3 List_interface_get = { 4     BaseURL+'/api/****/****/****?****=1****=375': '描述' 5 } 6 # 以下是用于post的接口 7 List_interface_post = { 8     1: BaseURL+'/api/****/****/****/****' 9 }10 # 以下是用于post的数据11 List_post_param = {12     1: 'new=222222old=111111'13 }14 # 以下是post接口的描述,它是干嘛的15 List_post_note = {16     1: '修改密码'17 }18 # 以下是post用到的请求头19 List_post_header= {20     1: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'}21 }

三、cookie

一款产品的接口测试中必定会使用登录状态,需要使用cookie实现,之前写过使用cookiejar获取cookie,requests中获取cookie的方法更为简单,不过首先你得知道是哪个接口set了cookie,不过一般是登录啦。登录接口访问之后set了cookie,那好,就去调用登录接口,然后拿到搞回来的cookie:

# 只需要这样!!login = requests.post(login_url, data=login_data, headers=login_header)
cookie = login.cookies

这个cookie就是登录状态了,拿着随便用,需要登录的就直接cookies=cookies

四、日志输出

这里注意看第二步中接口数据,有接口描述,也有接口是啥,第一步中又把content做成返回值了,具体拼接方式自己想吧,东西全有了,想写啥写啥,还可以加上获取本地时间的api获取接口运行时间,log文件该长啥样是门学问,这里就不献丑了。

五、借用fiddler调试你的脚本

requests允许使用代理访问,这有啥用,真有!fiddler是一款截包改包的工具,而且通过扩展可以进行请求间的比对,这样让你的程序访问的请求和真正正确的请求作对比,为啥我的程序访问出错?是不是缺了请求头?参数是不是丢了?cookie是不是少了?很容易看出来。写法如下:

proxies = {     "http": "",     "https": ""}
requests.post(url, proxies=proxies)

这样就可以走代理了,除fiddler以外还有charles和burp suite可以使用,具体看个人喜好吧。

敏捷交付中的自动化测试

提到敏捷交付,我们总会说到持续集成,持续交付,持续发布,即频繁地交付产品特性。而我们都知道要实现真正的持续交付,必然少不了两个关键要素:

只有测试不行,只有集成工具也不行,二者需合二为一,保持相同的步调,实现持续不断的质量反馈,方能实现保质地持续发布。

可以开门见山地说:Automation Test ≠ Automation Tools ≠ Continuous Test

根据我个人的项目经验,试着画了下面这个图来表达这三者的关系。

在提及自动化测试的时候,很多人会把工具的使用等同于自动化测试。自动化测试应该是一个策略性的系统工程,不只有自动化工具。像我们的产品一样,不仅要有技术语言,还要有产品架构设计。自动化测试除了工具框架,还需要考虑:

项目的技术栈,产品架构,开发流程,基础设施,可靠的测试数据,稳定干净的测试环境,如何呈现测试报告,如何工程化测试配置,测试套件等等。

有了自动化测试还不够,我们的目的是在持续交付的过程中实现快速频繁的质量反馈,我们需要持续不断地测试(Continous Testing)。实现持续测试,不仅需要团队从文化上去支持,真正做到全员对测试和质量负责,创建Devops文化氛围,打通开发-测试-运维的壁垒;还需团队从技术上去储备知识,比如云平台、虚拟化技术,容器及相应的编排技术,甚至网络知识等等。

维基百科对自动化的解释:

In software testing, test automation is the use of software separate from the software being tested to control the execution of tests and the comparison of actual outcomes with predicted outcomes.

从定义可以总结出自动化测试的两个特点:

测试,质量评估的重要手段之一,而自动化测试只是测试的一种具体实现方式而已。它能释放QA的双手和一部分大脑(这部分大脑,即know knowns),将对已知特性和既定逻辑流程的检测交由计算机来完成。而QA去做更多需要思辨能力,分析判断能力的事情。例如,通过向团队提问,来澄清需求的unknowns;通过探索产品去拓宽对产品的knowns;抑或运用经验帮助团队走出Unknown Unknowns 带来的迷局。

维基百科对持续测试的解释:

Continuous testing is the process of executing automated tests as part of the software delivery pipeline to obtain immediate feedback on the business risks associated with a software release candidate.

从这个定义可以看出,持续测试的目的即在软件交付的流水线中执行自动化测试以提供对产品质量的反馈。

想强调定义里的几个关键字:automated tests, delivery pipeline, immediate feedback, business risks.

不管多火的工具,如果不能兼容项目的技术栈和基础设施,那都无处发挥其优势,流行的不一定是适合项目的。

在写自动化之前,QA需要对项目的技术栈,开发流程,和基础设施有基本的认识和了解;另外也需要了解和掌握各个工具之间的优劣,这样才能为项目选择最匹配的自动化工具。是不是像老生常谈?但是别人告诉你的经验和自己经历的实战真的两种不同的收获。就跟蹲家看电视和去现场看演唱会的区别一样,别人的经验之谈总归是别人的,自己走过的路才是自己的。

这两年 Cypress 真的很火,去年在项目上做UI自动化测试的时候,出于好奇也想实践一把。实践出真知,Cypress本身可以通过环境变量和plugin配置代理,但是不支持socks5的代理(客观现状是项目所有资产,包括测试环境都是通过socks5的代理连接),线上环境无法访问。当时还试过将socks5的代理转换成http代理,但因为Cypress本身是多线程的,而socks5只能截获第一个进程的网络通信, 即使能连通应用本身,Cypress也无法将测试过程可视化的优势发挥出来。人无完人,工具也一样,只有适合你的才是好的。

考虑自己也不会造轮子,喜欢拿来就用,加之项目上socks5代理约束,之后便转用了CodeceptJS, 几次尝试下来,觉得非常满足项目需要。下面罗列CodeceptJS 几个好用的点,具体细节请移步 官网 。

由于团队有完全的自由来选择技术栈,在做第三个产品的时候, 我们的开发小哥哥就已经不满足于只写REST API了,第三个产品开始引入GraphQL。在以前的项目上用过REST Assured 做API测试,觉得也是好用的,但当时并没有选用REST Assured, 因为在那时,刚好发现一枚ThouhgtWorks开发自己做的API功能测试工具 Pandaria 。(这也从侧面证明TW的开发很有质量意识)选择这个工具,除了自己不会造轮子,除了它支持代理,更重要的是它基于Cucumber JVM,我个人以前的项目上用过cucumber,对gherkin语法还算熟悉,还有它能提供漂亮的测试报告。它既支持REST API的测试,也支持GraphQL 的测试,完美匹配我个人的技术和项目的实际情况。

在项目做第一个规范安全流程的产品时,MVP1(Minimum Viable Product) 一完成,该产品的接口自动化测试和端到端自动化测试便实现了,并集成到了产品CI/ CD 流水线上。后来由于客户方硬件集成的问题,该产品基于MVP1进行了一次演进,从产品直接融入并规范安全流程换成了‘曲线救国’地强化安全流程,页面和接口设计也有较大变动。由于产品流程设计上的变动导致之前的接口测试和端到端的自动化测试全部都失效,需要重新编写和维护。

这个经历挺真实的,自动化是有好处,但是也是有代价的: 在MVP1,特别是POC(Proof Of Concept)阶段的产品建议不要急于做自动化,项目的初期更别尝试做UI层面的自动化。当然对工具的spike是可以的,把框架搭建好,等待特性稳定了,就可以直接加测试用例了。

我们选择自动化一定是要考虑项目是否存在客观的现实需求,在动手实施具体的自动化测试之前,一定要对自动化测试的投入产出比做一次客观理性地评估。如上图所示,自动化测试的成本相对单次(或者少量的)手动测试来说是较高的,为了少量的测试活动而做自动化,投入产出比是很低的。需要QA根据项目进度,产品演进程度,测试策略,回归频率等等做一个综合评估,找到出图中交集的点,即何时何种情况团队和产品应该必须引入自动化测试了。因为自动化前期需要投入产品分析,工具框架选型,用例设计,数据环境准备等等,后期还需要持续不断地投入人力进行及时的维护和更新以保证自动化测试的严密性和足够的覆盖率。

虽然敏捷强调质量全员负责,但我所待过的团队,做过的项目,践行得好的很少。幸运的是,现在团队的质量意识都很好。但故事一开始不都是美好的,每个团队都是在 “掉坑-反馈-调整磨合” 的循环里走向成熟的。

在交付一个微服务化的产品时,后端多个API,每个API有相应的API集成测试,产品还有UI测试,同时团队还有额外的3个产品需要维护。每个产品都有自动化测试,前端的后端的。其中一个微服务实现的产品就有四套测试,而且后续还会增加视觉测试。

在刚开始的时候,测试挂了没人去看,也没人去修。由于项目是基于 Trunk Based Development ,为了保证测试的及时性,每天不是在加新用例的路上,就是在修各种测试的路上。UI测试相较于API测试更为脆弱,需要频繁的维护成本,特别是项目基于主干开发的团队。那段时间感觉自己成了automation engineer,对产品新增的功能特性并不是非常清楚,对故事卡的可测性也没及时作出反馈,感觉自动化并未真的达到释放自己精力和时间的初衷。

如果只是QA一个人来维护管理,那么这个QA一定做不了自动化以外的事情了。ThoughtWorks好多项目都只有一个QA,我们的这个QA是Quality Analyst, 并不是Automation Engineer。敏捷项目之下,QA的首要任务应该是驱动团队各个角色对质量负责。

为了提升团队对自动化测试的重视程度, 如下是一些我个人在项目上实践过的方法:

除了以上,项目还需要有高度可视化或者能及时通知测试状态的方式。

项目上用的是Jenkins自带的 Build Monitor View。将对项目pipeline的监控投影到电视上,并配置相应的提示音,能非常及时地让团队知道最新的构建,部署,测试状态。

如下是我们项目上当前的一个流水线dashboard:

这些实践都是对‘质量全员负责’最落地的践行。我相信,每个团队是不一样的,但是敏捷QA的主要价值一定是能驱动团队为质量作出改进和贡献。

敏捷QA是对项目流程质量,产品内部质量,产品外部质量都需要负责的,而自动化测试只是质量保证的一种措施而已而非唯一措施。‘质量全员负责’的团队才能释放出你们的QA,去做更多Quality Analysis的工作,比如提更多需要思辨能力的问题以实现产品风险的识别和管理,反思开发流程以促进团队流程质量的提升,分析产品架构制定适合项目产品的整体测试策略等等。

在项目上做自动化集成到流水线的时候,有遇到一些常见的在云容器里运行测试会遇到的问题。

1)测试工具相关的

虽然很多问题都是可以从网上找到答案,但是在解决问题的时候,通常需要我们了解工具框架的工作原理,否则连搜索关键字可能都憋不出来。

2)测试报告可视化相关的

测试报告对于我们快速定位失败根因有很大的帮助,好的测试报告可以直接揭示问题的根源。在云端运行测试,我们通常希望测试工具能输出可读性强的测试报告以方便非技术人员阅读,也希望测试工具能把运行过程的细节打印在console里,以方便技术人员定位根因。

像前面提到的CodeceptJS它就提供多种不同形态的运行,并且可以运用Mocha生成各种类型的测试报告。目前市面上的测试工具,都会有对第三方库的依赖,特别是前端测试框架和工具,这个对QA或者团队的技术宽度是有一定要求的。

另外Jenkins有非常丰富的插件库,在选择测试工具的时候可以把是否有Jenkins报告可视化支持考虑进去。QA需要对Jenkins和测试工具都相当熟悉,还需要知道如何通过将某一测试工具生成的某种格式的测试报告集成在Jenkins上以方便一键获取测试报告。
像cucumber的测试报告插件:

像Allure的测试报告插件:

有了这些插件的辅助,在流水线上就一键可得测试报告,为‘质量团队负责’提供了很好的契机。

3) Pipeline as Code, 想要集成测试到流水线,不可避免是需要一些DevOps相关知识的

也许项目的需求是如何通过Jenkinsfile 并行运行各种测试,也许是通过Jenkinsfile传递测试相关参数以为云上运行测试所用,还也许你需要在Jenkinsfile里添加调试信息用以线上调试,等等。

云上运行,我们还要学会如何在一个slave 上优雅地管理运行测试的容器,不出现容器占用,slave内存不足,测试失败之后报告不可得等等问题。

所以只会自动化工具不够,只有自动化测试也不够。如果你们团队开发们没有DevOps的经验,或者他们忙于特性开发,上线冲刺,那么QA必须对Docker,Kubernetes 基本命令和用法有些了解。QA就是一个不分前后端,不挑技术栈,需要持续不断学习的角色。

会自动化工具算是有了织网的道具,有自动化测试资产算是编出了能捞鱼的网,而持续测试才能真正地实现持续交付,才算是把一张张过滤不同缺陷的网放置于了不断提交变更的交付之流中。

只有网而无法至于河里,或者不知道于何处放置,那就只能站于岸边时时撒网捕鱼,不够及时,也不算释放了捕鱼人 (QA和团队) 。

我们期望的是,各种不同的网 (自动化测试资产) ,置于不同的河段( 软件产品不同层级:函数级别?组件级别?接口级别?系统级别?) ,过滤不同的鱼 (缺陷) ,而不管是谁 (团队的所有角色) 都可以去确认有没有捞着鱼 (测试挂了吗?为什么挂?我们对目前的变更有足够的信心吗?) ,也需要所有人时时确认我们的渔网是不是破了? (测试覆盖率不够?断言不严谨?测试用例过时?) 。

软件交付是一项团队工作,即便自动化测试也一样需要全员协作。

文/ThoughtWorks郭泰瑜

api接口测试的步骤

1、拿到接口文档自己开发api测试工具的时候先分析文档自己开发api测试工具,分析的内容有:请求类型、必填项、选填项、入参、出参及描述
2、编写测试用例自己开发api测试工具,测试用例的编写参考下图自己开发api测试工具

3、利用eolinker、jmeter或者其它接口测试工具执行测试用例;

(在接口没有问题的情况下,前端测试出的bug都属于前端开发人员)
5、接口测试完成后再进行前端的功能及UI交互测试;
6、提交buglist清单,修复后一定要回归测试。

具体可以在eolinker在线使用了解: www.eolinker.com

常见的接口测试工具有哪些?

接口一般来说有两种,一种是程序内部的接口,一种是系统对外的接口。
系统对外的接口:比如你要从别的网站或服务器上获取资源或信息,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的,比如说咱们用的app、网址这些它在进行数据处理的时候都是通过接口来进行调用的。
程序内部的接口:方法与方法之间,模块与模块之间的交互,程序内部抛出的接口,比如bbs系统,有登录模块、发帖模块等等,那你要发帖就必须先登录,要发帖就得登录,那么这两个模块就得有交互,它就会抛出一个接口,供内部系统进行调用。
一、常见接口:
1、webService接口:是走soap协议通过http传输,请求报文和返回报文都是xml格式的,我们在测试的时候都用通过工具才能进行调用,测试。可以使用的工具有SoapUI、jmeter、loadrunner等;
2、http api接口:是走http协议,通过路径来区分调用的方法,请求报文都是key-value形式的,返回报文一般都是json串,有get和post等方法,这也是最常用的两种请求方式。可以使用的工具有postman、RESTClient、jmeter、loadrunner等;
二、前端和后端:
在说接口测试之前,我们先来搞清楚这两个概念,前端和后端。
前端是什么呢,对于web端来说,咱们使用的网页,打开的网站,这都是前端,这些都是html、css写的;对于app端来说呢,它就是咱们用的app,android或者object-C(开发ios上的app)开发的,它的作用就是显示页面,让我们看到漂亮的页面,以及做一些简单的校验,比如说非空校验,咱们在页面上操作的时候,这些业务逻辑、功能,比如说你购物,发微博这些功能是由后端来实现的,后端去控制你购物的时候扣你的余额,发微博发到哪个账号下面,那前端和后端是怎么交互的呢,就是通过接口。
前面说的你可能不好理解,你只需记住:前端负责貌美如花,后端负责挣钱养家。
三、什么是接口测试:
接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
OK,上面是百度百科上说的,下面才是我说的
其实我觉得接口测试很简单,比一般的功能测试还简单(这话我先这样说,以后可能会删O(∩_∩)O哈!),现在找工作好多公司都要求有接口测试经验,也有好多人问我(也就两三个人)什么是接口测试,本着不懂也要装懂的态度,我会说:所谓接口测试就是通过测试不同情况下的入参与之相应的出参信息来判断接口是否符合或满足相应的功能性、安全性要求。
我为啥说接口测试比功能测试简单呢,因为功能测试是从页面输入值,然后通过点击按钮或链接等传值给后端,而且功能测试还要测UI、前端交互等功能,但接口测试没有页面,它是通过接口规范文档上的调用地址、请求参数,拼接报文,然后发送请求,检查返回结果,所以它只需测入参和出参就行了,相对来说简单了不少。

关于自己开发api测试工具和api接口测试工具的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 自己开发api测试工具的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于api接口测试工具、自己开发api测试工具的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:JAVA实现长连接(含心跳检测Demo)
下一篇:JavaWeb项目音频资源播放实现方法详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~