zoukankan      html  css  js  c++  java
  • testng结合httpclient编写接口测试用例

    testng用来组织测试用例,控制用例运行顺序以及断言,httpclient用来模拟客户端发送请求,获取响应结果。

    通过testng里面的dataProvider数据提供者来实现参数化。

    代码如下:

    package com.mg.api.auto_v1;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.testng.annotations.DataProvider;
    import org.testng.annotations.Test;
    
    public class LoginCase {
    
        @Test(dataProvider = "loginData")
        // 测试登录
        public void testLogin(String username, String password) {
            String url = "http://49.235.92.12:9000/api/v1/login";
            Map<String, String> params = new HashMap<String, String>();
            params.put("username", username);
            params.put("password", password);
            System.out.println(HttpUtil.sendPost(url, params));
        }
    
        @DataProvider(name = "loginData")
        public Object[][] datas() {
            Object[][] datas = { { "test", "123456" }, // 正常登录
                    { "test", "" }, // 不输入密码登录
                    { "", "123456" }, // 不输入用户名登录
                    { "", "" }, // 输入为空登录
                    { "t", "123456" }, // 错误用户名登录
                    { "test", "1" }, // 错误密码登录
                    { "test$", "1" }, // 用户名包含特殊字符
                    { "test$", "123456#" }, // 密码包含特殊字符
            };
            return datas;
        }
    
    }

    HttpUtil.sendPost(url, params)调用了工具类里面的sendPost发送请求,并返回结果:

    package com.mg.api.auto_v1;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.util.EntityUtils;
    
    /**
     * 接口调用工具类,post和get
     * 
     * @author admin
     *
     */
    public class HttpUtil {
        /**
         * post请求处理接口
         * 
         * @param url:请求url地址
         * @param params:请求参数map形式添加
         * @return
         */
        public static String sendPost(String url, Map<String, String> params) {
    
            // 接口请求方式:post
            HttpPost post = new HttpPost(url);
            List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
    
            // 取出map中所有的参数名
            Set<String> keys = params.keySet();
    
            // 通过循环将参数保存到list集合里面
            for (String key : keys) {
                String value = params.get(key);
                parameters.add(new BasicNameValuePair(key, value));
            }
            // 定义全局变量,便于返回结果
            String result = "";
    
            try {
                post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));
                // 发送请求,获取响应
                HttpClient client = HttpClients.createDefault(); // 创建默认客户端,相当于按钮
                HttpResponse response = client.execute(post);
    
                // 状态码
                int code = response.getStatusLine().getStatusCode();
                System.out.println("状态码:" + code);
    
                // 响应报文
                result = EntityUtils.toString(response.getEntity());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return "响应报文:" + result;
        }
    
        /**
         * get请求处理接口
         * 
         * @param url
         * @param params
         * @return
         */
        public static String sendGet(String url, Map<String, String> params) {
            Set<String> keys = params.keySet();
            // 标识位
            int mark = 1;
            for (String key : keys) {
                if (mark == 1) {
                    url += ("?" + key + "=" + params.get(key));
                } else {
                    url += ("&" + key + "=" + params.get(key));
                }
                mark++;
            }
            System.out.println("url=" + url);
    
            // 请求方式:get
            HttpGet get = new HttpGet(url);
    
            // 发送请求,获取响应
            HttpClient httpClient = HttpClients.createDefault();
            HttpResponse response;
    
            String result = "";
    
            try {
                response = httpClient.execute(get);
                // 获取响应状态码
                int code = response.getStatusLine().getStatusCode();
                System.out.println("响应状态码:" + code);
    
                // 获取响应内容
                result = EntityUtils.toString(response.getEntity());
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return "响应报文:" + result;
        }
    }

    代码运行结果:通过数据提供者运行了8条用例

  • 相关阅读:
    UVA 1513
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:.geodatabase创建,创建时内容缺失问题总结
    《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码
    《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
    《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析
    《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)
    《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
    《ArcGIS Runtime SDK for Android开发笔记》——(3)、ArcGIS Runtime SDK概述
    《ArcGIS Runtime SDK for Android开发笔记》——(2)、Android Studio基本配置与使用
    《ArcGIS Runtime SDK for Android开发笔记》——(1)、Android Studio下载与安装
  • 原文地址:https://www.cnblogs.com/xiamaojjie/p/12260501.html
Copyright © 2011-2022 走看看