【接口测试】【HttpClient】使用HttpClient4+testNG进行简单的接口测试

一、HttpClient使用

HttpClient使用方法详见教程https://mp.csdn.net/mdeditor/83043457#

二、testNG

maven 的pom添加如下:

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

三、一个简单的接口测试范例

下面以一个百度搜索来作为例子说明如何使用HttpClient进行接口测试:

1、打开百度

url:http://baidu.com
代码如下:

import java.io.IOException;
import java.util.List;

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.protocol.HttpClientContext;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.testng.Assert;
import org.testng.annotations.Test;

public class TestCase1 {

	@Test
	public void httpClientTest() 
	{
		CloseableHttpClient client = HttpClients.createDefault();
		HttpGet get = new HttpGet("http://www.baidu.com");
		HttpClientContext context = new HttpClientContext();
		CloseableHttpResponse response = null;
		try {
			response = client.execute(get, context);
			System.out.println(response.getStatusLine().getStatusCode());//返回状态值
			Header[] headers = response.getAllHeaders();//获取所有的header信息
			for (int i = 0; i < headers.length; i++) {
				Header header = headers[i];
				System.out.println("headers: name:["+header.getName()+"];value:["+header.getValue()+"]");
			}
			List<Cookie> returnCookie = context.getCookieStore().getCookies();
			for (Cookie cookie : returnCookie) {
				System.out.println("cookie: name:["+cookie.getName()+"] ;value:["+cookie.getValue()
				+"] ;domain:["+cookie.getDomain()+"] ;path:["+cookie.getPath()+"] ;version:["
						+cookie.getVersion()+"]");
			}
			Assert.assertEquals(200, response.getStatusLine().getStatusCode());
		} catch (ClientProtocolException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Assert.assertFalse(true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			Assert.assertFalse(true);
		}finally 
		{
			try {
				response.close();
				client.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

运行结果如下:

[RemoteTestNG] detected TestNG version 6.10.0
[TestNG] Running:
  C:\Users\dufei\AppData\Local\Temp\testng-eclipse-902596798\testng-customsuite.xml

200
headers: name:[Cache-Control];value:[private, no-cache, no-store, proxy-revalidate, no-transform]
headers: name:[Connection];value:[Keep-Alive]
headers: name:[Content-Type];value:[text/html]
headers: name:[Date];value:[Fri, 19 Oct 2018 09:10:08 GMT]
headers: name:[Last-Modified];value:[Mon, 23 Jan 2017 13:28:24 GMT]
headers: name:[Pragma];value:[no-cache]
headers: name:[Server];value:[bfe/1.0.8.18]
headers: name:[Set-Cookie];value:[BDORZ=27315; max-age=86400; domain=.baidu.com; path=/]
headers: name:[Transfer-Encoding];value:[chunked]
cookie: name:[BDORZ] ;value:[27315] ;domain:[baidu.com] ;path:[/] ;version:[0]
PASSED: httpClientTest

===============================================
    Default test
    Tests run: 1, Failures: 0, Skips: 0
===============================================


===============================================
Default suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

[TestNG] Time taken by org.testng.reporters.XMLReporter@1f0f1111: 4 ms
[TestNG] Time taken by org.testng.reporters.EmailableReporter2@3cc2931c: 4 ms
[TestNG] Time taken by [FailedReporter passed=0 failed=0 skipped=0]: 0 ms
[TestNG] Time taken by org.testng.reporters.JUnitReportReporter@7c0c77c7: 3 ms
[TestNG] Time taken by org.testng.reporters.SuiteHTMLReporter@78e117e3: 11 ms
[TestNG] Time taken by org.testng.reporters.jq.Main@e056f20: 17 ms

如上范例只以返回值作为断言的条件,如果是要对header,或者cookie或者是内容做断言的话就复杂一些,但原理相同,需要查看开发者工具的内容,以此来确定断言的预期值,如上图例子,在chrome的开发者工具栏看到的接口内容如下:
百度主页
如上图所示,我们要取用的url即为General内的那个RequestURL的值,由于此接口没有参数,所以就不需要添加参数了;

猜你喜欢

转载自blog.csdn.net/df0128/article/details/83184914