Java接口自动化测试框架设计之Get请求方法和测试详解

网友投稿 339 2023-01-02


Java接口自动化测试框架设计之Get请求方法和测试详解

我来介绍通过代码逐步实现接口自动化测试框架的设计过程。先不要着急,框架设计我们只是介绍基本的组件,而且框架设计没有想象那么难,一步一步跟着做就会了。这篇我们来演示,如果通过java代码来实现一个用纯代码实现Http中的Get请求过程。

1.Get请求API举例

浏览器打开网址https://reqres.in,然后下拉一屏,我们就可以看到这个网站的API举例,我们来看看显示用户的get接口。

通过这个图,我们能够获取这些信息

1)网站host地址:https://reqres.in/

2)用户展示请求方式是: Get

3)接口的url 是: /api/users

4)接口的响应状态码是200,还可以看到响应body的jsON内容。

获取上面这些接口信息之后,我们在本地postman上来测试一下,如果没有postman请安装一个和postman差不多的能做接口手工测试的图形化界面工具,例如jmeter等。

这个接口,我们通过postman手动测试,发现和网站提供的是一样结果,说明这get请求的接口测试通过。那么如果我们想通过Java代码实现,需要怎么做呢?接下来,才是本篇的重点内容。

2.代码过程

前面一篇文章,我们介绍了基础环境的搭建过程,这里,接着前面的环境来逐步完成一个Get请求的设计和测试过程。

2.1 设计配置文件

我们这个序列是要教会大家设计接口自动化测试框架的目的,所以我们一些设计和组织项目结构的方式,需要参考框架的思维。写一个配置文件,很简单,意义就是方便测试多套环境下的接口测试。我们工作中,一个项目,分测试环境,预发布环境和线上生产环境,这三套环境,接口肯定是一样,只不过服务器地址不同,所以,我们框架设计需要支持写一套接口测试用例,在三套环境上可以跑得同。

在src/main/java下新建一个包:com.qa.config,然后在新包下新建一个config.properties文件,文件内容如下。

然后在src/main/java下新建一个包:com.qa.base,新建一个TestBase.java,这个类作为所有接口请求测试的父类,都需要继承这个父类,目前我们就写一个构造方法,实现加载读取properties文件。

TestBase.java 代码如下:

package com.qa.base;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Properties;

public class TestBase {

public Properties prop;

//写一个构造函数

public TestBase() {

try {

prop = new Properties();

FileInputStream fis = new FileInputStream(System.getProperty("user.dir")+

 "/src/main/java/com/qa/config/config.properties");

prop.load(fis);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

这里来复习下构造函数的作用,上面我们把加载配置文件的代码写在空参构造里,好处就是,每初始化这个类的对象就会执行构造函数的代码,即执行读取配置文件这么一个作用。关于上面配置文件路径是否拼接正确,你可以新建一个main方法的类,执行打印语句:System.out.println(System.getProperty("user.dir"));

目前,项目结构图如下

2.2 Get请求方法代码实现

在src/main/java下新建一个包:com.qa.restclient,然后新建一个RestClient.java文件,下面是具体代码,实现了get请求,和得到相应状态码和响应头信息,以及响应主体的json内容。

package com.qa.restclient;

import java.io.IOException;

import java.util.HashMap;

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.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

public class RestClient {

//1. Get 请求方法

public void get(String url) throws ClientProtocolException, IOException {

//创建一个可关闭的HttpClient对象

CloseableHttpClient httpclient = HttpClients.createDefault();

//创建一个HttpGet的请求对象

HttpGet httpget = new HttpGet(url);

//执行请求,相当于postman上点击发送按钮,然后赋值给HttpResponse对象接收

CloseableHttpResponse httpResponse = httpclient.execute(httpget);

//拿到Http响应状态码,例如和200,404,500去比较

int responseStatusCode = httpResponse.getStatusLine().getStatusCode();

System.out.println("response status code -->"+responseStatusCode);

//把响应内容存储在字符串对象

String responseString = EntityUtils.toString(httpResponse.getEntity(),"UTF-8");

//创建Json对象,把上面字符串序列化成Json对象

JSONObject responseJson = JSON.parseObject(responseString);

System.out.println("respon json from API-->" + responseJson);

//获取响应头信息,返回是一个数组

Header[] headerArray = httpResponse.getAllHeaders();

//创建一个hashmap对象,通过postman可以看到请求响应头信息都是Key和value得形式,所以我们想起了HashMap

HashMap hm = new HashMap();

//增强for循环遍历headerArray数组,依次把元素添加到hashmap集合

for(Header header : headerArray) {

hm.put(header.getName(), header.getValue());

}

//打印hashmap

System.out.println("response headers -->"+ hm);

}

}

上面的get方法代码写得比较乱,需要认真看注释,不然层次不清晰。这段代码肯定需要以后重构的,我们刚开始,方便我们测试就先这样去写就好。目前,项目结构图如下

2.3 TestNG用例测试Get方法

在src/test/java下新建一个包:com.qa.tests,然后新建一个GetApiTest.java类,写一个TestNG的测试用例来测试下我们上面写的Get请求方法。

package com.qa.tests;

import java.io.IOException;

import org.apache.http.client.ClientProtocolException;

import org.testng.annotations.BeforeClass;

import org.testng.annotations.Test;

import com.qa.base.TestBase;

import com.qa.restclient.RestClient;

public class GetApiTest extends TestBase{

TestBase testBase;

String host;

String url;

RestClient restClient;

@BeforeClass

public void setUp() {

testBase = new TestBase();

host = prop.getProperty("HOST");

url = host + "/api/users";

}

@Test

public void getAPITest() throws ClientProtocolException, IOException {

restClient = new RestClient();

restClient.get(url);

}

}

选择run as testng,运行,输出结果如下:

[RemoteTestNG] detected TestNG version 6.14.3

response status code -->200

respon json from API-->{"per_page":3,"total":12,"data":[{"last_name":"Bluth","id":1,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","first_name":"George"},{"last_name":"Weaver","id":2,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg","first_name":"Janet"},{"last_name":"Wong","id":3,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg","first_name":"Emma"}],"page":1,"total_pages":4}

response headers -->{Transfer-Encoding=chunked, Server=cloudflare, CF-RAY=41e822894b39336d-HKG, Access-Control-Allow-Origin=*, ETag=W/"1bb-D+c3sZ5g5u/nmLPQRl1uVo2heAo", Connection=keep-alive, Set-Cookie=__cfduid=d9d93dc43c046707f916670ef491f4c8e1526917157; expires=Tue, 21-May-19 15:39:17 GMT; path=/; domain=.reqres.in; HttpOnly, Date=Mon, 21 May 2018 15:39:17 GMT, Content-Type=application/json; charset=utf-8, X-Powered-By=Express, Expect-CT=max-age=604800, report-uri="https://report-nymmCOqeruri.cloudflare.com/cdn-cgi/beacon/expect-ct"}

PASSED: getAPITest

接下来,我们把响应内容的的body的json内容拷贝到一个在线的Josn格式化显示网站(https://json.cn/),看看效果如下。

这个结果和postman上一样,数据都对得上,本篇关于Java代码基于Httpclient开源库实现Get请求的过程就介绍到这里。


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

上一篇:api网关和微服务网关(API网关)
下一篇:java枚举类实现接口(java枚举类实现接口有哪些)
相关文章

 发表评论

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