接口测试】接口测试怎么做

2021-03-09 10:28发布

4条回答
测试之光
2楼 · 2021-03-12 09:10

1、接口测试原理

接口测试,实际上是针对于接口做测试的。


那么接口是什么?

软件开发,既要做前端,也要做后端,并且后端是整个业务的核心,用于处理业务请求,实现具体的功能;而前端只是提供一个页面给用户看结果以及提供页面给用户做输入。所以整个业务的处理逻辑都在后端。而后端逻辑相对很复杂,所以在开发的时候,会由架构师确定接口,然后再针对这个接口实现其具体的功能。


接口也可以认为是我们要做多少事情,因为在技术层面,如果要实现登录、注册、增、删、改、查等操作,就会先设计好一个模块,说明具体实现哪些功能点,这个功能点应该有哪些输入项,有哪些方法。


这个东西就是我们所谓的接口,在java里,接口里包含属性名和方法,所有的方法都是抽象方法,只有方法名,而没有这个方法的具体实现。也就是说:我知道这是一个登录功能,但是登录怎么实现,这完全是不知道的,需要开发人员具体去实现。那么作为我们的开发人员,他就会领到一个任务去实现这个接口。比如,实现登录接口,注册接口等。


我们可以认为,虽然他是在实现登录接口、注册接口。也就相当于我们根据这个接口去实现登录功能,注册功能。所以这个接口实际上也就是后台一个具体的功能。


那么什么又是接口测试?

实际上我们所说的接口测试就是开发人员把这个接口实现了,他需要去验证这个接口的实现是否正确。


但是这是一个后台的功能,这个开发也是一个后台开发,他去验证接口的时候,他不会想让前端人员介入,因为让前台人员介入的话会比较麻烦。那么他就需要一个工具来模拟前端界面。(前端其实就是提供一个窗口,既能让用户输入数据,并且还可以查看结果。)


2、接口测试的实现

实际上我们做接口测试,还是“输入—处理—输出”这样的模式。用户输入一串数据,然后让这个接口或者让这个后台功能来处理,然后检查输出结果跟期望是否一致。


这个其实也就是我们所说的黑盒测试。也是我们做测试的一个常规的思路。用户输入一串数据,然后让系统去处理,然后我们再去检查结果跟期望是否一致。功能测试是这么做的,接口测试实际上还是这么做。


但是相对功能测试而言,接口测试有一个比较明显的区别,就是输入不再是界面的,而是一个基于HTTP的请求;输出也不再是界面,而是基于HTTP的响应。所以需要通过请求和响应分别来输入我们的数据以及检查我们的结果。


3、接口测试用例

其实接口测试和的功能测试是非常相似的,功能测试怎么做,接口测试还是怎么做。


功能测试用例,最核心的三个部分就是:输入、操作步骤和预期结果。


接口测试用例,其实主要的也就是这么三个部分。


平时所说的测试用例设计方法,也就是对输入项进行各种不同的取值,然后再做组合。拿登录来说,登录功能有用户名和密码,那用户名,有正确的用户名和错误的用户名两种情况,密码有正确的密码和错误的密码两种情况。用户名和密码在一起就会产生一些组合:

(1)用户名正确,密码正确;

(2)用户名正确,密码错误;

(3)用户名错误,密码的正确;

(4)用户名错误;密码错误。

输入时,选择不同的数据组合会产生不同的测试场景,每一个场景都需要执行一遍。


功能测试是这么去做的,但是接口测试没有界面,也就没有办法输入,怎么办?

接口测试里有个东西叫参数,这个参数就对应了功能测试里的输入项。所以,接口测试用例其实也就是对输入参数,做一个划分然后再做组合,形成接口测试用例。


每一组测试用例执行后,肯定会得到不同的结果。比如正确的用户名和正确的密码,结果是登录成功;错误的用户名或错误的密码,结果是登录失败。那么只要思考,如何将参数取值和测试结果应用在工具中,这个问题就解决了。


4、接口测试工具

接口测试工具有很多,比如soapUI,postman,jmeter等。


工具其实只是工具而已。


做接口测试一定要明白的一个前提:接口测试的流程。

第一步,设计操作步骤。

操作步骤就是请求,有一些请求是是单独的,有些请求是多个请求前后有联系的,这种情况就需要创建关联,。那么我们需要了解请求的格式,规范以及如何做关联。soapUI,postman,jmeter里,都有关联。


第二步,设计数据用例。

建议将数据用例写到Excel文档里,然后让工具读取Excel。Excel里有几组数据用例,就执行几次。循环执行(自动化),就可以让每一个用例被执行一次,那么每一个测试场景也就被运行到了。


第三步:断言。

也就是提前将预期结果写入到工具中,让工具自动化判断结果是否正确。不同的工具叫法不同,soapUI和Jmeter中叫做断言,postman中叫做tests。


第四步:执行并检查测试结果。

执行很简单,对测试结果进行分析的话就需要了解协议。知道发出去了什么,返回了什么,才能够知道,到底哪个环节出了问题。


5、HTTP协议

HTTP协议非常重要。清楚了HTTP协议,再去使用工具其实就很容易,按照上面四个步骤就行。


为什么是HTTP协议而不是其他协议?因为90%的系统都是HTTP协议的。


HTTP协议包含请求和响应

请求就是用户的输入,响应就是结果。我们通过请求去找参数,然后输入不同的参数值,然后组合成请求,只要这个请求是合法的,那么就可以发出去,并且能够被服务器接收。所以,首先要能够判断出来什么叫做合法请求。


那么就需要去了解HTTP协议的请求的组成,请求的规范,知道哪些请求项是我们所关心的,哪些请求项是我们一定要遵循的,哪些项是我们可以删除的。


同理,要想检查结果是否正确,就需要去了解响应。


HTTP请求包含两个部分

请求头和请求体,请求头的第一行非常的重要,包含请求方法和URL。这两个东西是非常核心的东西。请求方法有GET方法,POST方法,需要知道他们之间的区别,当然区别最明显的就是GET请求没有请求体,而POST请求有请求体。URL,相当于接口的入口。请求头里有很多项,每一项最好能知道是什么意思,并且要知道哪些项是比较核心的,其实核心的东西不多。一个是content-type,一个是cookies。

备注:网上很多资料会把请求分为三部分,请求行、请求头和请求体。这里的请求头的第一行其实就是请求行了,下面的响应也是一样


请求体包括参数,一般我们在测试的时候会修改请求体里的东西。


懂了上面这些,就知道该如何组装HTTP请求了。


响应包含两个部分

一个是响应头,一个是响应体。响应头里的第一行有响应的状态码和状态信息,这个非常重要。面试时候一般会被问到:状态码有几类?一般是有五类,1开头(请求正在处理),2开头(请求处理成功),3开头(重定向),4开头(客户端错误),5开头(服务器错误),这五类分别代表什么需要记住。一般5开头的都是系统bug。


6、JMeter

其实哪个工具都可以,但是jmeter有两个好处,第一个:它是中文版的,学习成本较低,postman和soapUI都是英文版的;第二个,jmeter既可以做接口测试,又可以做性能测试。


对应上面的四个步骤,如何用jmeter做接口测试?

1、 设计操作步骤:这里我们创建HTTP请求即可

添加——取样器——HTTP请求


2、 设计数据用例:由于jmeter只支持CSV文件,所以设计测试用例时记得生成CSV格式的,将CSV导入到jmeter中(这部分在性能测试里面叫做jmeter的参数化)

添加——配置元件——CSV数据文件设置


3、 断言,添加一个响应断言即可(也可以加别的)

添加——断言——响应断言


4、 执行,添加一个结果树

添加——监听器——查看结果树


7、抓包

一般情况下,做接口测试是有接口文档的


但是如果没有接口文档我们怎么做接口测试?

这就需要抓包,请求我们是可以抓到的,响应如果抓不到,我们可以根据测试数据自己分析应该得到什么样的结果


抓包工具推荐fiddler,两个优势:

1、简单好用;

2、fiddler抓包后可以直接导出为jmeter脚本。


8、接口测试可以发现什么样的Bug?

为什么要做接口测试?

基于两个理由:

第一个:开发人员把这个接口或者把后台代码开发好了,他会去做接口测试。开发人员自测完成后,我们测试人员可以对这个接口做一个全面的测试。

第二个:接口测试不会受到输入界面的影响,那界面所做出的一些限制也就不存在了,我们直接测的就是后台这一块儿,可以检查后台有没有做到相应的限制。

一个常见的问题,页面的输入框可能会有长度限制,比如限制只能输入十个字符,但是后台并没有做限制,这样很容易会导致出现一些数据库的异常,这样的问题可能在功能测试里面没办法发现,但是接口测试可以。所以很多时候,接口测试,可以认为是功能测试的一种补充。它可以让我们的测试做得更深入,更全面。


大冬瓜
3楼 · 2021-03-12 16:59

对于接口测试,首先测试人员要懂代码,你只需要知道接口的作用是什么就可以了(有文档更好,但大部分都没有);其次,自己去读开发的代码;然后,根据该接口功能及代码写测试用例;
用例设计:
1:写一个程序去调用该接口,看是否能够达到该接口所定义的功能
2:根据该接口参数构造不同的用例,测试接口在参数合法及非法情况下能否达到预期效果
3:根据该接口中的逻辑,设计不同条件的用例,测试该接口实现代码的逻辑
4:进行容错及健壮性测试
5:静态检测代码,看是否有内存泄露、或永远走不到的分支、代码规范及逻辑是否合理。
6:对于一些接口,需要进行多线程测试

猫的想法不敢猜
4楼 · 2021-03-14 10:52

接口测试作为集成测试的一部分,通过直接调用被测试的接口来确定系统在功能性、可靠性、安全性和性能方面是否能达到预期,有些情况是功能测试无法覆盖的,所以接口测试是非常必要的。

  接口测试分为两种,一种是webservice接口,走soap协议通过http传输,请求报文和返回报文都是xml格式的,测试时通过工具soapUI进行测试。使用情况比较少;另一种http api接口,走http传输协议,通过路径来区分调用的方法,最常用的是get和post请求。

  上面说过,get和post请求是通过路径来区分的,get请求的请求参数都是写在URL里的,格式为:http://url?param1¶m2。而post的请求一般都是写在body里的,可能是key-value格式,或者json串格式,也可能是上传一个文件。。。那么问题来了,get请求和post请求的区别在哪里呢?我们百度时,大多数的答案是这样的:

  1、get请求可以在浏览器中请求到,post请求的测试需要借助工具

  2、get请求使用url和cookie传参,post的数据放在body中

  3、post比get更安全,因为传递的参数在url上是看不到的

  4、get请求的url会有限制,而post请求的数据可以非常大

  5、一般get请求是来获取数据,post请求是传递数据的

  其实,对于现在飞速发展的互联网来说,上面的说法已经不严谨了。首先,post请求的参数也可以写在url里,但是这种情况不多见;其次表面上看起来,post利用body传参,比get的url传参安全,但其实只要用抓包工具(fiddler,Charles等),post的参数也是一览无余;再次,现在的浏览器非常强大,可以输入支持很长的URL,所以也不再有限制一说了。这么说来,种种区别只有最后一条是最根本的了。

  怎么来测试接口呢?根据什么来测呢?这就需要开发提供的接口文档了,接口文档和功能测试的需求说明书的功能是一样的。包括:接口说明、调用的url,请求方式(get or post),请求参数、参数类型、请求参数说明,返回结果说明。有了接口文档后,我们就可以设计用例了,一般接口测试的用例分为以下几种:

  1、通过性验证,说白了就是传递正确的参数,是否返回正常的结果

  2、参数组合,因为参数有必传和非必传,参数的类型和长度,以及传递时可能业务上的一些限制,所以在设计用例时,就要排列组合这些情况,保证所有情况都能覆盖到

  3、接口的安全性,这个又分为几种情况:

  1)绕过验证,比如提交订单时,在传递商品价格参数时,修改商品价格,就要看后端有没有验证了。或者我支付时,抓个包将订单金额一改,如果能以我改后的金额支付,那这个借口就有问题了。

  2)绕过身份验证,就是某个功能只有有特殊权限的用户才能操作,那我传递一个普通的用户,是不是也能操作呢

  3)参数是否加密,这个关系到一些账户的安全,比如我们在登录一些网站时,它要将我们的登录信息进行加密,如果不加密我们的信息就会暴露,危害性极大。

  4) 密码安全规则,设置密码时复杂程度的校验。

  4、根据业务逻辑来设计用例


征戰撩四汸
5楼 · 2021-10-14 14:35

1、由于我们项目前后端调用主要是基于http协议的接口,所以测试接口时主要是通过工具或代码模拟http请求的发送与接收。工具有很多如:postman、jmeter、soupUI、java+httpclient、robotframework+httplibrary等。

2、也可以用 接口自动化来实现,就是用代码实现,框架和UI自动化差不多,发送请求用断言来判断。


相关问题推荐

  • 回答 2
    已采纳

    看看这个思维导图能帮助到你吗

  • 回答 4

    早期的开关量控制装置就是继电器逻辑控制,后来有电子技术了,开关量控制装置开始采用电子技术模仿继电逻辑,比较典型的就是比较典型的就是可编程序控制器(PLC),此外还有各种开关电路组成的控制器、以单片机为核心器件的控制器等,很多,其基本原理都是源...

  • 回答 5

    几乎所有编程语言就是在变量中存储值,并且能读取和修改此值。事实上,在变量中存储值和取出值的能力,给程序赋予了状态。 如果没有这样的概念,一个程序虽然可以执行一些任务,但是它们将会受到极大的限制而且不会非常有趣。...

  • 回答 8

    断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新启用断言。使用断言可以创建更...

  • 回答 3

    一、Jmeter关联的方式:Jmeter中关联可以在需要获取数据的请求上 右键–>后置处理器 选择需要的关联方式,如下图有很多种方法可以提取动态变化数据:  在LR中有自动关联跟手动关联,但在我看来手动关联更准确,在jmeter中,就只有手动关联为什么要进行关联:...

  • 回答 5

    ①仔细阅读 接口说明/设计文档。将每个接口当成被测功能点来理解。接口也有功能、性能、安全等测试。②设计接口测试方案,比如确定要使用的接口测试工具。③设计接口测试用例(和功能测试设计用例的方法一样,运用等价类、边界值、正交试验法等黑盒测试方法)。...

  • 回答 9
    已采纳

    1、Postman是谷歌的一款接口测试插件,它使用简单,支持用例管理,支持get、post、文件上传、响应验证、变量管理、环境参数管理等功能,可以批量运行,并支持用例导出、导入。2、jmeter是一款100%纯Java编写的免费开源的工具,它主要用来做性能测试,相比load...

  • 回答 2

    1.首先需要开发提供给我们接口文档,样子如下。需要指出 接口的类型,这里是POST。还需要指出接口的地址,这里就是黑色框中的URL地址。2. 需要下载一个 postman,我的是windows 7 64bit,可以去官网下载一个最新版本。...

  • 回答 5

    测试管理工具主要是QC、TD之类的,测试工具主要有QIP、LoadRunner、Winruuner、lr之类的,如果是手工测试比较多的话测试管理工具就比较重要,自动化测试比较多的话测试工具就比较重要...

  • 回答 2

    发包,就是运用搜索引擎的缝隙发送数据,然后传输相对应的虚伪数据,当然这组数据也能够算是点击数据,只不过这组数据是经过参数数据发包形式传送。所以有些公司又把发包点击称之为参数点击。所以其实发包技术并不复杂,复杂的是找到有用的间隙。一般的发包工...

  • 回答 5
    已采纳

    自动化测试工具的类型记录和重放:此类别中的工具为自动脚本提供了记录选项。屏幕上的每个交互(例如点击,滚动或键入)都将被记录并转换为自动化步骤。可以重播已录制的脚本以执行操作并验证。基于坐标的识别:此类工具在x/y坐标的帮助下与被测应用程序交互...

  • 回答 2
    已采纳

    POSTMAN缺点:1、只使用单一API场景测试2、无法实现脚本间串联调用3、无法和CI/CD工具结合优点:1、上手容易,调试方便2、适合快速测试、一次性测试开源工具(例:YAPI)缺点:1、断言需要熟悉nodeJS用法2、复杂场景测试数据驱动无法实现优点:1、上手简单,...

  • 回答 4

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的进出Fiddler的数据。Fiddler的优点独立的可以直接抓http请求小巧、功能完善快捷、启动就行代理方便...

  • 回答 4
    已采纳

    Poster这是火狐浏览器的一个插件,如果你想调试服务器,发出HTTP请求,Poster操作简单,你先设定一个内容类型,数分钟内,你将拥有需要检视HTTP请求结果的所有信息。PostmanPostman是一款网页调试与发送网页HTTP请求的Chrome插件,它可以利用Chrome插件的形式...

  • 回答 4

    HTTP代理就是介于浏览器和web服务器之间的一台服务器,连接代理后,浏览器不再直接向web服务器取回网页,而是向代理服务器发出信号,代理服务器再想web服务器发出请求,收到web服务器返回的数据后再反馈给浏览器。HTTP代理其作用就是说代理互联网客户去获得网...

  • 回答 3

    1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。3.灵活:HTTP允许传...

没有解决我的问题,去提问