> 文章列表 > Java+TestNG+HttpClient接口自动化测试框架

Java+TestNG+HttpClient接口自动化测试框架

Java+TestNG+HttpClient接口自动化测试框架

目录

  • 1.HttpClient作用
  • 2.测试框架搭建
    • (1)JDK环境
    • (2)TestNG引入
    • (3)HttpClient引入
  • 3.发送Get请求和post请求
    • get请求:
    • post请求
    • 实际项目展示
  • 4.发送post请求
    • post请求封装

1.HttpClient作用

模拟客户端发送请求

2.测试框架搭建

(1)JDK环境

网上有很多

(2)TestNG引入

接口自动化入门-TestNg

(3)HttpClient引入

在maven项目的pom.xml中引入如下两个依赖

<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.4.10</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.6</version></dependency>

3.发送Get请求和post请求

如果post提交的是json类型数据,需要在pom.xml中添加依赖:

 		<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency>

get请求:

// 准备urlString url="http://www.baidu.com";//请求方法
HttpGet get = new HttpGet(url);
//请求头get.setHeader("Authorization",tokenV);//准备一个发送请求的客户端CloseableHttpClient httpClient = HttpClients.createDefault();// 发送请求得到响应报文-java中封装为对象CloseableHttpResponse response = httpClient.execute(get);

post请求

		String url="http://www.baidu.com";HttpPost post=new HttpPost(url);//添加请求头post.setHeader("Content-Type","application/json");//准备post参数
//        -- 1-json类型JSONObject json = new JSONObject();json.put("username","admin");json.put("password","123456");System.out.println("请求参数:"+json);
// 发送 json 类型数据,通过new StringEntity(),可将Content-Type设置为text/plain类型post.setEntity(new StringEntity(json.toString(),"UTF-8"));//创建发请求的客户端CloseableHttpClient httpClient=HttpClients.createDefault();//获得响应内容CloseableHttpResponse response=httpClient.execute(post);

实际项目展示

import com.alibaba.fastjson.JSONObject;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;/* @author zhaomin* @date 2023/4/6 16:34*/
public class CategoriesTest {//URL会变、参数会变、请求头会变//    @BeforeMethod@Test(dependsOnMethods = {"getToken"})public void getCategories() throws ClientProtocolException, IOException {//    请求UrlString url = "http://127.0.0.1:8888/api/private/v1/categories?type=1";Single token=Single.INSTANCE;String tokenV=token.getValue();
//        请求方法HttpGet get = new HttpGet(url);get.setHeader("Authorization",tokenV);
//        准备一个发送请求的客户端CloseableHttpClient httpClient = HttpClients.createDefault();
//        发送请求得到响应报文-java中封装为对象CloseableHttpResponse response = httpClient.execute(get);//状态行StatusLine statusLine = response.getStatusLine();
//        加断言-- todoSystem.out.println(statusLine.getReasonPhrase());System.out.println(statusLine.getStatusCode());System.out.println(statusLine.getProtocolVersion());
//        响应头Header[] headers = response.getAllHeaders();for (Header item : headers) {System.out.println(item);}
//        响应体HttpEntity entity = response.getEntity();String entityString = EntityUtils.toString(entity);
//        加断言-- todo
//        System.out.println(entity);System.out.println(entityString);}@Testpublic void getToken() throws ClientProtocolException, IOException {String url="http://127.0.0.1:8888/api/private/v1/login";HttpPost post=new HttpPost(url);//添加请求头post.setHeader("Content-Type","application/json");
//        post.setHeader("Content-Length","3843");//准备post参数
//        -- 1-json类型JSONObject json = new JSONObject();json.put("username","admin");json.put("password","123456");System.out.println("请求参数:"+json);
// 发送 json 类型数据,通过new StringEntity(),可将Content-Type设置为text/plain类型post.setEntity(new StringEntity(json.toString(),"UTF-8"));//--2-准备普通类型参数/*List<NameValuePair> parameters=new ArrayList<NameValuePair>();parameters.add(new BasicNameValuePair("username","admin"));parameters.add(new BasicNameValuePair("password","123456"));HttpEntity requestEntity=new UrlEncodedFormEntity(parameters);post.setEntity(requestEntity);*///创建发请求的客户端CloseableHttpClient httpClient=HttpClients.createDefault();//获得响应内容CloseableHttpResponse response=httpClient.execute(post);StatusLine statusLine = response.getStatusLine();HttpEntity entity=response.getEntity();System.out.println(entity);String entityString=EntityUtils.toString(entity);JSONObject jsonObj=JSONObject.parseObject(entityString);String status=jsonObj.getJSONObject("meta").getString("status");Assert.assertEquals("200",status,"获取token失败");String tokenV=jsonObj.getJSONObject("data").getString("token");//        entityString.enSingle token=Single.INSTANCE;token.setKey("token");token.setValue(tokenV);System.out.println(token.getKey());System.out.println(entityString);}}

4.发送post请求

import com.alibaba.fastjson.JSONObject;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpHead;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;/* @author zhaomin* @date 2023/4/6 16:34*/
public class CategoriesTest {//URL会变、参数会变、请求头会变//    @BeforeMethod@Test(dependsOnMethods = {"getToken"})public void getCategories() throws ClientProtocolException, IOException {//    请求UrlString url = "http://127.0.0.1:8888/api/private/v1/categories?type=1";Single token=Single.INSTANCE;String tokenV=token.getValue();
//        请求方法HttpGet get = new HttpGet(url);get.setHeader("Authorization",tokenV);
//        准备一个发送请求的客户端CloseableHttpClient httpClient = HttpClients.createDefault();
//        发送请求得到响应报文-java中封装为对象CloseableHttpResponse response = httpClient.execute(get);//状态行StatusLine statusLine = response.getStatusLine();
//        加断言-- todoSystem.out.println(statusLine.getReasonPhrase());System.out.println(statusLine.getStatusCode());System.out.println(statusLine.getProtocolVersion());
//        响应头Header[] headers = response.getAllHeaders();for (Header item : headers) {System.out.println(item);}
//        响应体HttpEntity entity = response.getEntity();String entityString = EntityUtils.toString(entity);
//        加断言-- todo
//        System.out.println(entity);System.out.println(entityString);}@Testpublic void getToken() throws ClientProtocolException, IOException {String url="http://127.0.0.1:8888/api/private/v1/login";HttpPost post=new HttpPost(url);//添加请求头post.setHeader("Content-Type","application/json");
//        post.setHeader("Content-Length","3843");//准备post参数
//        -- 1-json类型JSONObject json = new JSONObject();json.put("username","admin");json.put("password","123456");System.out.println("请求参数:"+json);
// 发送 json 类型数据,通过new StringEntity(),可将Content-Type设置为text/plain类型post.setEntity(new StringEntity(json.toString(),"UTF-8"));//--2-准备普通类型参数/*List<NameValuePair> parameters=new ArrayList<NameValuePair>();parameters.add(new BasicNameValuePair("username","admin"));parameters.add(new BasicNameValuePair("password","123456"));HttpEntity requestEntity=new UrlEncodedFormEntity(parameters);post.setEntity(requestEntity);*///创建发请求的客户端CloseableHttpClient httpClient=HttpClients.createDefault();//获得响应内容CloseableHttpResponse response=httpClient.execute(post);StatusLine statusLine = response.getStatusLine();HttpEntity entity=response.getEntity();System.out.println(entity);String entityString=EntityUtils.toString(entity);JSONObject jsonObj=JSONObject.parseObject(entityString);String status=jsonObj.getJSONObject("meta").getString("status");Assert.assertEquals("200",status,"获取token失败");String tokenV=jsonObj.getJSONObject("data").getString("token");//        entityString.enSingle token=Single.INSTANCE;token.setKey("token");token.setValue(tokenV);System.out.println(token.getKey());System.out.println(entityString);}}

post请求封装

如果有多个post请求时,不用每次都写重复。

@Testpublic String post(String url, HashMap<String,String> paramsMap)throws ClientProtocolException, IOException{HttpPost post=new HttpPost(url);//参数Set<String> keySet=paramsMap.keySet();JSONObject json = new JSONObject();for(String item:keySet){json.put(item,paramsMap.get(item));}// 发送 json 类型数据,通过new StringEntity(),可将Content-Type设置为text/plain类型post.setEntity(new StringEntity(json.toString(),"UTF-8"));CloseableHttpClient httpClient=HttpClients.createDefault();CloseableHttpResponse response=httpClient.execute(post);HttpEntity entity=response.getEntity();String entityString = EntityUtils.toString(entity);return entityString;}