一文搞定Java和Python在接口测试中的应用

本文将会通过java和python编码的方式来帮助大家实现接口测试。另外读者还可以通过这篇文章了解到什么是接口测试、工作中接口测试的主要分类、接口测试优势、接口测试的评估标准、开展接口测试的通用过程等入门接口测试必备知识点。如果你想上手接口测试,她一定会帮到你!无论你的接口项目编码使用的是java还是python,看这篇文章就够了!

接口测试必备知识点

接口测试概念

接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。

工作中接口测试的主要分类

1.模块接口测试(开发人员)

模块接口测试是单元测试的基础。它主要测试模块的调用与返回。类似于JUnit或者unittest中的单元测试。

2.Web接口测试(测试工作重点)

web接口测试又可分为两类:服务器接口测试和外部接口测试。

服务器接口测试:

是测试前端与服务器的接口(最常用的接口测试场景)。

外部接口测试:

这个很典型的例子就是第三方登录,比如你做的新系统免于新用户重新注册的麻烦会提供第三方登录,那用户在登录的时候调用的就是第三方登录的接口,由第三方验证用户名和密码并且返回给当前系统。

接口测试优势

1.接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定

2.测试可以更早的介入

3.可以发现功能测试覆盖不到的服务端问题

接口文档

接口文档是接口测试的依据,在接口文档不完善的情况下不主张开展接口测试

接口文档不管以什么形式存在,需要包含的内容有:

a.接口名称以及业务描述

b.接口类型(http\webservices等等)

c.输入参数

                 每个参数名;

                 每个参数类型;

                 每个参数业务含义;

                 每个是否可空;

                 每个字段长度(可选,一般需要提供,有严格要求的字段需特别注明);

                 每个参数的单位(可选,金额类字段需注明);

d.输出结果

                  每个参数名;

                   每个参数类型;

                   每个参数业务含义;

接口测试介入阶段

接口测试应该在程序的开发阶段就开始,具体的时间点应该是在后台接口开发基本完毕之后,需要开始接口测试,在前端写功能之前对接口进行测试,能够在早期就把接口层的问题暴露出来,后续前端在写功能时能够减少很多由于接口问题导致返工的工作量。

接口测试评估标准

业务功能覆盖是否完整

业务规则覆盖是否完整(与业务相关的操作规范、管理章程、规章制度、行业标准等)

参数验证是否达到要求(边界、业务规则)

返回数据正确性与格式

接口异常场景覆盖是否完整

接口覆盖率是否达到要求

性能指标是否满足要求(接口的响应时间、处理能力)

安全指标是否满足要求(一般接口都不会暴露在网上任意被调用,需要做一些限制,比如鉴权或认证。)

开展接口测试的过程

确认接口文档(接口测试依据)

准备数据(往往耗费很多精力)

构建接口(根据接口文档,使用代码或者工具),代码选择java或者python,工具选择postman、jmeter等

校验接口请求(根据接口文档,使用代码或者工具)

http接口实战

接口项目介绍

使用http协议是目前最常用的接口调用方式,她的本质是通过http请求调用后端的api,具体过程如下图所示:


一文搞定Java和Python在接口测试中的应用_第1张图片

关于http知识的详细内容在这里就不做详细介绍了,作为一个tester,http请求是必会的知识点之一,请大家自己查阅学习,重点关注如下内容:

请求方法(重点关注get和post)

请求头参数含义

响应头参数含义

响应代码含义

我们这里重点讲解如何通过java和python代码的方式进行http接口测试,主要就两步(比大象放冰箱里还简单)

1.http请求构建

2.http请求的解析

举一个get接口请求的例子

接口描述:判断获取用户的姓名和年龄是否成功

http://rap2.taobao.org:38080/app/mock/85630/getinfo

类型:get

参数:name(String)必选,age(Number)必选

返回值信息说明

参数传入正确

{

  "code": 0-10之间的数字,

  "msg": "OK"

}

参数缺失

"errMsg":"必选参数name或者age未传值

Python方式实现

Python使用requests模块进行接口测试

安装pip install requests

核心代码如下:

import requests

正确的调用

response=requests.get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?name=kevin&age=40")

print(response.text)

输出:

{

  "code": 10,

  "message": "ok"

}

异常调用

response=requests.get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?age=25")

print(response.text)

输出:

{"isOk":false,"errMsg":"必选参数name未传值。Required parameter name has no value."}

Java方式实现

使用httpclient jar包

下载地址:http://hc.apache.org/downloads.cgi

我这里使用的是4.5.12版本,把下图的所有jar包导入到eclipse中。


一文搞定Java和Python在接口测试中的应用_第2张图片

核心代码如下:

正确的调用

importorg.apache.http.client.fluent.Request;

String rsp1=Request.Get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?name=kevin&age=40")    

          .execute().returnContent().asString();

                System.out.println(rsp1);

输出:

{

 "code": 4,

 "msg": "OK"

}

异常调用

 Stringrsp2=Request.Get("http://rap2.taobao.org:38080/app/mock/85630/getinfo?age=40")    

                        .execute().returnContent().asString();

                              System.out.println(rsp2);

输出:

{"isOk":false,"errMsg":"必选参数name未传值。Required parameter name has no value."}

通过java和python对同一个接口调用的实现,我们很容易发现二者的实现差别不大,只要掌握了一门语言,使用另一门语言做接口测试也只不过是换了一种调用形式而已!核心就是:

使用合适的包或者模块

发送http请求

获取http请求

接口测试在unittest中的应用

在实际工作中,我们利用上面的核心代码+单元测试框架就可以完全搞定接口测试

Python unittest单元测试源码如下:


一文搞定Java和Python在接口测试中的应用_第3张图片

接口测试在junit4中的应用

Java Junit4源码如下:

一文搞定Java和Python在接口测试中的应用_第4张图片

总结

接口自动化测试的本质总结为以下两点:

通过使用requests或者httpclient提供的api,发送接口请求

解析接口响应判断接口发送成功与否;

大家可以看到发送接口请求的api要比ui自动化涉及的api少很多,也简单很多,因此更适合大家进行代码入门!关于ui自动化测试大家可以关注我的另一篇文章:

一文搞定Java和Python在Selenium3中的应用

随着大家接口测试经验的不断积累,在工作中可能还会遇到webservice、或者dubbo类型的接口,其实无论对于哪种接口进行测试,其本质和方法与我们文章中介绍的都是一致的!不同的接口会涉及使用不同的第三方jar包或者模块中的api来构建接口而已。个人经验,接口测试的难点不在于技术手段,而是前期的沟通工作!想要做好接口测试的重点是接口文档的详尽程度以及文档变更后及时通知的管理策略。各位同学可以在实际工作中多总结、多体会、找出一条适合自己公司的接口测试开展方案。真的写了很多也非常地辛苦,原创不易,如果文章帮到了你,欢迎转发,让更多的朋友受益!

你可能感兴趣的:(一文搞定Java和Python在接口测试中的应用)