在自动化测试中使用TestNG【第 4 章 接口自动化测试 4.5 TestNG 集成 HttpClient】

4.5 TestNG 集成 HttpClient

首先将 TestNG 和 HttpClient 进行集成,然后进行 HTTP 接口自动化测试

在 pom.xml 文件的 <dependencies> 标签中输入以下粗体部分内容

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>cn.edu.bjut</groupId>
<artifactId>httpinterfacetest</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.9</version>
    </dependency>
    <dependency>
        <groupId>org.testng</groupId>
        <artifactId>testng</artifactId>
        <version>6.14.3</version>
        <scope>test</scope>
    </dependency>
    
    <dependency>
        <groupId>org.json</groupId>
        <artifactId>json</artifactId>
        <version>20180813</version>
    </dependency>
    <dependency>
        <groupId>org.dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>2.1.1</version>
    </dependency>
    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.2.0</version>
    </dependency>
</dependencies>

</project>

保存 pom.xml 文件,这时 Maven 会自动下载依赖的 jar 包。这里添加了 4 个依赖

①TestNG:自动化测试框架 TestNG 的依赖

②JSON:用于处理 JSON 数据,在 RESTful POST 请求的请求体及响应体中均可使用

③DOM4J:用于处理 XML 数据,在 SOAP 请求的请求体及响应体中均可使用

④JAXEN:当 DOM4J 用 XPath 方式获取节点时需要依赖该 jar 包

依赖 jar 包下载完成后,在工程(httpinterfacetest)上用鼠标右击,从弹出的快捷菜单中选择「TestNG → Convert to TestNG」选项,在工程中生成 testng.xml 文件

4.5.1 RESTful 接口自动化测试

1.编写 GET 接口自动化测试用例

在自动化测试中使用TestNG【第 4 章 接口自动化测试 4.5 TestNG 集成 HttpClient】 

把 Test Class 重命名为 GetMobilePhoneTest,删除 GetMobilePhoneTest 中的内容,输入以下代码

package cn.edu.bjut;

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.Assert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import java.net.URI;

public class GetMobilePhoneTest {
    private CloseableHttpClient client;
    private CloseableHttpResponse response;

    @BeforeClass
    public void init() {
        client = HttpClients.createDefault();
    }

    @Test
    public void testCase1() {
        Assert.assertEquals("{\"brand\":\"Apple\",\"model\":\"iPhone 6S\",\"os\":\"IOS\"}",
                sendHttpGetRequest(client, "iPhone 6S"));
    }

    @Test
    public void testCase2() {
        Assert.assertEquals("", sendHttpGetRequest(client, ""));
    }

    @Test
    public void testCase3() {
        Assert.assertEquals("", sendHttpGetRequest(client, null));
    }

    @Test
    public void testCase4() {
        Assert.assertEquals("", sendHttpGetRequest(client, "01234567890123456789012345678901234567890123456789"));
    }

    @AfterClass
    public void clear() {
        try {
            response.close();
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    //定义一个私有的方法,用来发送Get请求
    private String sendHttpGetRequest(CloseableHttpClient client, String model) {
        String result = null;
        try {
            URI uri = new URIBuilder().setScheme("http").setHost("localhost").setPort(8080).setPath("/mobilePhone")
                    .setParameter("model", model).build();
            response = client.execute(new HttpGet(uri));
            result = EntityUtils.toString(response.getEntity());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

}

修改 testng.xml 文件,在&lt;test&gt;标签中新增以下粗体部分内容

在自动化测试中使用TestNG【第 4 章 接口自动化测试 4.5 TestNG 集成 HttpClient】

 

保存所做的修改,在 testng.xml 上用鼠标右击,从弹出的快捷菜单中选择「Run As → TestNG Suite」选项,可以看到如图 4-2 所示的测试报告

在自动化测试中使用TestNG【第 4 章 接口自动化测试 4.5 TestNG 集成 HttpClient】

图 4-2

下面对运行结果进行说明

①init()方法初始化了一个 HTTP 客户端,并在 sendHttpGetRequest()方法中使用,最后在 clear()方法中关闭

② 将构造 URI、发送 GET 请求和转换服务器响应等过程封装在 sendHttpGetRequest()方法中,通过传递 HTTP 客户端和参数来使用该方法

③ 在 clear()方法中对 HTTP 客户端和服务器响应进行关闭操作,在操作过程中可能出现异常,所以需要对异常进行捕获和处理

2.POST 接口自动化测试用例编写

 

在自动化测试中使用TestNG【第 4 章 接口自动化测试 4.5 TestNG 集成 HttpClient】

上一篇:写规范的javascript脚本代码 之单var


下一篇:使用throng 加速nodejs 应用的并行执行能力