优秀的编程知识分享平台

网站首页 > 技术文章 正文

接口测试01(接口测试面试题及答案)

nanyue 2024-08-08 19:00:22 技术文章 9 ℃

介绍


什么是接口测试


基于HTTP协议,通过代码或者工具模拟请求,检查服务器返回的响应结果是否符合接口说明文档的描述


接口测试的分类


系统对外的接口测试:比如你要从别人的网站或者服务器获取资源或者信息,别人肯定不会把数据库共享给你。他只能写一个方法,提供一个接口,我们通过接口访问他写好的方法,最终达到数据共享的目的

系统内部的接口测试:前端显示的数据都是来自服务器,前端发送请求给服务器,服务器通过接口获取前端发送的请求,并返回响应数据


接口测试的意义


接口测试测的是服务端,检查服务器端是否做校验,保存服务器的安全性和稳定性

接口测试属于集成测试阶段,介入时间早,更早发现bug,bug修复成本低

接口测试的执行效率比较高

接口测试比UI自动化测试更稳定,更适合做回归测试,满足后端快速发版的需求,实现持续集成,缩短项目周期


如何做接口测试


找开发要接口说明文档

设计测试用例

通过代码或者工具模拟请求


接口测试开发环境搭建


JDK(1.8以上版本)、maven、IDEA


maven:找到maven安装路径,找到conf,找到settings.xml,在159行添加代码

?


<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>




打开IDEA,新建项目,点击左侧maven,点击从原型创建,选择quickstart,下一步?

?

??

?给项目取名??

?

??


选择对应版本?

?

??

?新建包名


点击pom.xml,下载代码库?

?

?

??


<dependency>
     <groupId>org.apache.httpcomponents</groupId>
     <artifactId>httpclient</artifactId>
     <version>4.5.13</version>
</dependency>

<dependency>
     <groupId>org.testng</groupId>
     <artifactId>testng</artifactId>
     <version>6.8.8</version>
     <scope>test</scope> 
</dependency>




代码实现


手工操作思路:打开浏览器→输入网址→敲回车→检查响应结果是否正确




代码思路:1.创建一个支持HTTP协议的客户端


可以理解为这是一种特殊的浏览器


2.构造网址


网址分为五部分:协议scheme、域名host、端口号port、路径path、参数parameter


3.创建请求


请求分为三部分:请求行、信息头、消息体


4.通过客户端把请求发送给服务器,最后从服务器获取响应结果


5.检查响应结果是否符合接口说明文档




代码实现


以微信公众平台测试账号为例(https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index)


登录账号,可以获得自己的appID和appsecret


下方有可以体验的接口权限表?

???

??



点击第一个获取access_token,查看接口说明文档,会有请求方式、参数说明以及返回码说明????

?

????

打开IDEA,创建accesstoken.java


1.创建HttpClient


CloseableHttpClient client = HttpClients.createDefault();



2.构造网址


URI uri = new URIBuilder()
  .setScheme("协议")
  .setHost("域名")
  .setPort(端口号)
  .setPath("路径")
  .setParameter("键","值")
  .setParameter("键","值")
  ....
  .build();


根据网址的五部分,带入到代码中


底部代码异常,点击添加异常到方法签名】



3.创建请求


HttpGet get = new HttpGet(uri);




4.通过client发送请求,获取响应结果


CloseableHttpResponse response = client.execute(get);



5.检查响应结果


状态行


response.getStatusLine();


信息头


response.getAllHeaders();


消息体


response.getEntity();





测试结果



代码整合


import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.http.Header;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.testng.annotations.Test;

public class AccessToken {
  @Test
  public void f() throws URISyntaxException, ClientProtocolException, IOException {
	  // 1.创建HttpClient
	  // 导包快捷键: ctrl + shift + o
	  CloseableHttpClient client = HttpClients.createDefault();
	  // 2.构建网址
	  // https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
	  URI uri = new URIBuilder()
			  .setScheme("https")
			  .setHost("api.weixin.qq.com")
			  .setPort(443)
			  .setPath("/cgi-bin/token")
			  .setParameter("grant_type","client_credential")
			  .setParameter("appid","       ")
			  .setParameter("secret","        ")
			  .build();
	  // 3.创建请求
	  HttpGet get = new HttpGet(uri);
	  // 4.执行请求,获取响应
	  CloseableHttpResponse response = client.execute(get);
	  // 5.检查响应结果是否正确
	  // 5.1 状态行  response.getStatusLine()
	  System.out.println(response.getStatusLine());
	  // 5.2信息头 response.getAllHeaders();
	  Header[] headers = response.getAllHeaders();
	  for (int i=0; i<headers.length; i++) {
		  System.out.println(headers[i]);
	  }
	  // 5.3消息体response.getEntity()
	  // {"access_token":"ACCESS_TOKEN","expires_in":7200}
	  // {"access_token":"            ","expires_in":7200}
	  String responseText = EntityUtils.toString(response.getEntity());
	  System.out.println(responseText);
  }
}

Tags:

最近发表
标签列表