• 接口测试入门(2)--get和post初级请求/使用httpclient做一个获取信息list的请求(需要登录才可以)


    抛去测试自动化的架构来,直接写单个测试用例的思路如下:

    1.获取测试case的接口,对每一个接口的请求方式(get/post/delete/put)进行分析,是否需要参数(不同的用例设置不同的参数,如登录时的用户名密码设置)
    2.获取响应内容,进行json解析,获取状态或内容,或列表,与实际结果进行对比,特别需要根据功能的逻辑进行处理

    用例设计和小贴士:

    1.和UI自动化类似,自动化一般只使用于正向用例,覆盖常见的情景

    2.接口的请求和UI自动化不一样,只要获得相应的接口就可以,不用像UI自动化一样一步步按照操作步骤来,可以直接请求接口,这点要比UI自动化方便的多。

    3.如果接口返回的数据有问题,可以直接把接口输入浏览器中,查看返回的结果是否正确

    4.在真正做接口测试时回发现,UI界面变动总是很频繁,但是后台接口是很少有改变的,这样看来接口测试的性价比还是很高的,接口变化后及时和开发进行沟通,进行维护!!

     

    ------------------------------------------------------------华丽丽的分割线----------------------------------------------------------------------------

    第一次写用例时的过程  (~ o ~)~     遇到的各种坑

    初次练手的小用例:(先使用最原始的方法 java.net.URL 进行练习,注意输出流的处理)

    输出流的处理,用读取一个文档的内容为例:(因为在测试自动化过程中对于需要读取多个测试数据时经常用到,所以需要掌握哦~~)

    复制代码
    File f = new File("a.txt");     //定义一个文档
        //InputStream是一个标准的输入接口  
        //对应读取数据的类有:FileInputStream ObjectInputStream等  
          
        InputStream in = new BufferedInputStream(new FileInputStream(f));  
    
    
        byte[] b = new byte[1024];  
        while(in.read()!=-1){  
            try {  
            in.read(b);  
            System.out.println("读入buffer的信息:"+new String(b));  
            } catch (IOException e) {  
            e.printStackTrace();  
            }  
        }  
          
    //  InputSteream和OutpurStream是针对基于字节(byte)输入输出设计的,实际应用中常常需要读  
    //  写的是基于字符(char ,Unicode 2 个字节)的,java.io.Reader和java.io.Writer就是所有读  
    //  写字符数据流的父类。  
          
        //FileReader作为Reader对象的数据源  
        BufferedReader brin = new BufferedReader(new FileReader("a.txt"));  
          
          
        //Stream与Reader之间的转换  
        InputStreamReader inreader = new InputStreamReader(in);//<--Stream输入  
        BufferedReader reader = new BufferedReader(inreader);//使用Reader进行读取  
    System.out.println(reader.readLine());
    复制代码

     输出流和输入流处理可见 http://www.tuicool.com/articles/U7VFFr

     

    实例1:(get请求)

    思路为:

    1.设置url并获取连接器

    2.打开连接

    3.使用连接器设置传送的参数

    4.通过输出流对输出的信息按行读取,over

    复制代码
    package com.wyy.demo;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    
    /**
     * Created by wyy on 2016/3/30.
     */
    public class Get {
    
        public static String  doGet() throws Exception{
            URL url=new URL("http://36kr.com/asynces/comments/hot.json");//通过统一资源定位器(java.net.URL)获取连接器(java.net.URLConnection)
            URLConnection con=url.openConnection();     //打开连接
            HttpURLConnection  urlConnection=(HttpURLConnection)con;  // HttpURLConnection继承自URLConnection
    
            urlConnection.setRequestProperty("Accept-Charset", "utf-8");
            urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//设置传送的内容类型
    
    //        以输入流的形式获取返回内容
            InputStream inputStream = null; //InputSteream和OutpurStream是针对基于字节(byte)输入输出设计的
            InputStreamReader inputStreamReader = null;
            BufferedReader reader = null;
            //BufferedReader 流能够读取文本行 , 通过向 BufferedReader 传递一个 Reader 对象 , 来创建一个 BufferedReader 对象
            StringBuffer resultBuffer = new StringBuffer();
            String tempLine = null;
    
    
            if (urlConnection.getResponseCode() >= 300) {
                throw new Exception("请求不成功,响应码是 " + urlConnection.getResponseCode());
            }
    
            try {
                inputStream = urlConnection.getInputStream();
                inputStreamReader = new InputStreamReader(inputStream);
                reader = new BufferedReader(inputStreamReader);//使用Reader进行读取
                System.out.print(reader.readLine());//按行进行读取
    
                while ((tempLine = reader.readLine()) != null) {
                    resultBuffer.append(tempLine);
                }
    
            } finally {
    
                if (reader != null) {
                    reader.close();
                }
    
                if (inputStreamReader != null) {
                    inputStreamReader.close();
                }
    
                if (inputStream != null) {
                    inputStream.close();
                }
    
            }
    
            return resultBuffer.toString();
        }
    
        }
    复制代码

    结果为json显示如下:

    复制代码

    {
    "status": {
    "code": "200",
    "message": "返回成功"
    },
    "data": {
    "hot_commnets": [
    {
    "id": 367685,
    "content": "谈什么配置 没有神秘海域4 没有黑魂3 没有古墓丽影10 少哪个都不买",
    "created_at": "2016-05-11T09:04:12.159+08:00",
    "user": {
    "id": 323192,
    "display_name": "邮票君",
    "avatar": "https://krplus-pic.b0.upaiyun.com/201512/18/c1c9848caa4a417ca027e8ebb07c3678.jpg!480"
    },

    复制代码

    实例2:(post请求) 注意参数的设置可以用:   String  parameters="name=***& passport=***";   这个是最初级的,不是很好用

    复制代码
    package com.wyy.demo;
    
    import java.io.*;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.net.URLConnection;
    
    /**
     * Created by wyy on 2016/3/30.
     */
    public class Post {
        public static String doPost() throws Exception {
            String parameterData = "username=1771019****&password=12312******&" +
                    "ok_url=****";
    
            URL url = new URL("http://passport.36kr.com/******/sign_in");
            URLConnection con= url.openConnection();
            HttpURLConnection httpURLConnection = (HttpURLConnection)con;
    
            httpURLConnection.setDoOutput(true);
            httpURLConnection.setRequestMethod("POST");
            httpURLConnection.setRequestProperty("Accept-Charset", "utf-8");
            httpURLConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
            httpURLConnection.setRequestProperty("Content-Length", String.valueOf(parameterData.length()));
            httpURLConnection.setRequestProperty("User-Agent", "Chrome");
            httpURLConnection.setRequestProperty("Referer", "passport.36kr.com");
    
            OutputStream outputStream = null;
            OutputStreamWriter outputStreamWriter = null;
            InputStream inputStream = null;
            InputStreamReader inputStreamReader = null;
            BufferedReader reader = null;
            StringBuffer resultBuffer = new StringBuffer();
            String tempLine = null;
    
            try {
                outputStream = httpURLConnection.getOutputStream();
                outputStreamWriter = new OutputStreamWriter(outputStream);
    
                outputStreamWriter.write(parameterData.toString());
                outputStreamWriter.flush();
    
                if (httpURLConnection.getResponseCode() >= 300) {
                    throw new Exception("请求不成功,响应码是 " + httpURLConnection.getResponseCode());
                }
    
                inputStream = httpURLConnection.getInputStream();
                inputStreamReader = new InputStreamReader(inputStream);
                reader = new BufferedReader(inputStreamReader);
                System.out.print(reader.readLine());
    
                while ((tempLine = reader.readLine()) != null) {
                    resultBuffer.append(tempLine);
                }
    
            } finally {
    
                if (outputStreamWriter != null) {
                    outputStreamWriter.close();
                }
    
                if (outputStream != null) {
                    outputStream.close();
                }
    
                if (reader != null) {
                    reader.close();
                }
    
                if (inputStreamReader != null) {
                    inputStreamReader.close();
                }
    
                if (inputStream != null) {
                    inputStream.close();
                }
    
            }
    
            return resultBuffer.toString();
        }
    
    }
    复制代码

    此时,由于使用的urlConnection属于比较老的版本,并没有对登录后的重定向进行处理,所以会报错如下:

    {"redirect_to":"/oauth/authorize?client_id=d80f4c1aaba936ced6e346d8232ccf6b9c573f9bb7&redirect_uri=https%3A%2F%2Frong*****..com%2Foauth%2Fcallback&response_type=code&state=http%3A%2F%2Fz****%2Fprojects%3Fpage%3D1%26per_page%3D20"}
    Process finished with exit code 0

    而且注意,如果url中带有https,那么会报错SSL相关信息,需要额外处理,此处使用http请求就足够了。。

  • 相关阅读:
    WordPress错误:无法启用插件,因为它引起了一个致命错误
    快速使用 Thinkphp 之一: 准备工作-配置PHP环境及下载Thinkphp文件
    基于XML文件格式引用页面
    PHP清除html、css、js格式并去除空格的PHP函数
    本地无法启动MySQL服务,报的错误:1067,进程意外终止
    快速使用 Thinkphp 之二: 创建自己的应用项目
    HTML页面里加载flash文件源码
    【学习笔记】数据库 windrainpy
    【转】给年轻程序员的建议 windrainpy
    【转】js变量以及其作用域详解 windrainpy
  • 原文地址:https://www.cnblogs.com/alwayswyy/p/5483460.html
Copyright © 2020-2023  润新知