接口測試入門(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請求就足夠了。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM