1. 程式人生 > >HttpClient +Testng(1)進行介面測試入門

HttpClient +Testng(1)進行介面測試入門

參考以下等文件:

關於httpclient等概念東西上述幾位大神的文件中比較多,在這裡我們主要簡單搭建我們自己所需的最小化框架,並執行起來

一、所需環境的安裝

這裡可以參考以前文件中的安裝步驟

我們主要是安裝下面兩個工具就可以

1、JDK的安裝和JAVA_HOME的配置

注意:這裡唯一不一樣是,下面專案中的jdk已使用jdk8

2、Maven安裝及配置

二、開始編寫第一個Test

第一個Test,我們寫個京東登入介面的功能,下面是具體的實現過程

1、在intellij idea建立一個Maven專案FirstAPITest,在pom.xml新增如下依賴,如下圖所示


在pom.xml裡面新增相應的依賴

<properties>
    <!-- 指明編譯原始碼時使用的字元編碼,maven編譯的時候預設使用的GBK編碼,
     通過project.build.sourceEncoding屬性設定字元編碼,告訴maven這個專案使用UTF-8來編譯 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

    <!--這裡可以設定需要執行group-->
    <groupsTest>execShell</groupsTest>

     </properties>

     <dependencies>

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

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>3.10-FINAL</version>
    </dependency>

    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.9.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpmime</artifactId>
        <version>4.5.2</version>
    </dependency>
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.54</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.38</version>
    </dependency>

    <!--這個引用一直下載不成功,所以只能通過手工下載下來,然後在maven中手動引用
    <dependency>
        <groupId>net.sf.json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>2.4</version>
    </dependency>
    -->

    <!--下面幾個引用包是我們手動下載並新增的依賴-->
    <dependency>
        <groupId>commons-beanutils</groupId>
        <artifactId>commons-beanutils</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/json/commons-beanutils-1.7.0.jar</systemPath>
    </dependency>

    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/json/commons-collections-3.1.jar</systemPath>
    </dependency>

    <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/json/commons-lang-2.5.jar</systemPath>
    </dependency>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/json/commons-logging.jar</systemPath>
    </dependency>

    <dependency>
        <groupId>ezmorph</groupId>
        <artifactId>ezmorph</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/json/ezmorph-1.0.3.jar</systemPath>
    </dependency>

    <dependency>
        <groupId>json-lib</groupId>
        <artifactId>json-lib</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/json/json-lib-2.4-jdk15.jar</systemPath>
    </dependency>

     </dependencies>

     <build>
    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.19.1</version>
            <configuration>
                <threadCount>1</threadCount>
                <forkCount>1</forkCount>
                <reuseForks>true</reuseForks>
                <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>

                <forkMode>once</forkMode>
                <argLine>-Dfile.encoding=UTF-8</argLine>
                <groups>${groupsTest}</groups>

                <includes>
                    <include>**/*Test.java</include>
                </includes>
            </configuration>
        </plugin>
    </plugins>
     </build>
 

注意:上面json-lib的包沒有自動下載成功,所以採用手動下載後,放到專案根目錄資料夾json(該目錄是手動建立的)中,如下圖所示,然後再關聯進來,具體見上面配置。


之後在編輯器右側找到Maven Projects外掛,在FirstAPITest專案下的LifeCycle中點選 “test”,如下圖所示標識1所示。等待專案構建完成後,再點選Maven Projects中的Reimports按鈕,如下圖所示標識 2所示。

該操作是讓maven把我們需要用到的Lib自動下載下來。如果之前已經下載過了,則只要單擊標識2就可以 


如下圖所示表示上述標識1的test構建完成


2、建立第一個介面測試

FirstAPITest專案中,在目錄test->java下新建一個類FirstTest.java,如如下圖所示


2.1 首先使用Fiddler檢視京東登入介面

寫了一會Fiddler的使用方法,但是後來還是覺得網上這些已經寫的相當具體了,就直接貼上連結來更好

下面我們著重看下京東登入介面在Fiddler中的檢視。這裡我在登入時,使用者名稱和密碼都是隨便寫成test

則在Fiddler中捕獲到的Http請求可看到,如下圖所示的情況


上面中可看到紅線標註的請求就是京東登入時,我們捕獲到的HTTP請求

可看到該請求是Post型別,後面是請求對應的URL

然後看下右邊,這裡主要看Inspects這個標籤裡面的內容,其他標籤可看上面連結裡面介紹

該標籤裡面分上下兩部分,上面是請求相關的內容,下面是響應相關的資訊

上部分我們可以看下WebForms裡面的內容,如下圖所示


上面紅色框中顯示的是在京東登入對應的引數。

下面紅色框中顯示的是我們進行登入後,介面返回值,這裡我們是看JSON格式的返回值

通過上面,我們就可得知京東登入介面的請求型別、請求URL、請求引數。有了這些我們就可以建立一個最簡單的登入介面請求

2.2使用httpclient使用CSDN登入介面

在剛才建立的類FirstTest.java 輸入下面內容,這裡我們使用Testng作為介面單元測試框架:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.testng.annotations.Test;

import java.util.ArrayList;
import java.util.List;

public class FirstTest {

    private HttpClient httpClient = new DefaultHttpClient();
    private HttpPost httppost;
    private HttpResponse response;
    private HttpEntity entity;
    private String postResult = null;

    @Test
    public void loginJDTest() {

        String loginURL = "https://passport.jd.com/uc/loginService?uuid=ac394a05-05c0-4667-9940-2848f0c03809&&r=0.8636558873495089&version=2015";
        //建立一個httppost請求
        httppost = new HttpPost(loginURL);

        //建立Post請求引數
        List<NameValuePair> formparams1 = new ArrayList<NameValuePair>();
        formparams1.add(new BasicNameValuePair("uuid", "ac394a05-05c0-4667-9940-2848f0c03809"));
        formparams1.add(new BasicNameValuePair("eid", "Z6RZKBBPUUOORPHGELPNEZE6QHFEIE2IS4EQEBWOKH7VJAPDRIYUCSERJ3DLPNXRINL2ON3JC3IWHIG6L6PQMINSRY"));
        formparams1.add(new BasicNameValuePair("fp", "4d981fbd1f0cf45fc497eac85348c0f3"));
        formparams1.add(new BasicNameValuePair("_t", "_nthEAWj"));
        formparams1.add(new BasicNameValuePair("loginType", "c"));
        formparams1.add(new BasicNameValuePair("loginname", "test"));
        formparams1.add(new BasicNameValuePair("nloginpwd", "test"));
        formparams1.add(new BasicNameValuePair("chkRememberMe", ""));
        formparams1.add(new BasicNameValuePair("authcode", ""));
        formparams1.add(new BasicNameValuePair("pubKey", ""));
        formparams1.add(new BasicNameValuePair("sa_token", "B68C442BE645754F33277E701208059033541C4BBD4BE7A99A94927BD4C8D683E0AC371429CD887688E05A86C51F7C70CE1F231D2A69583750E3923BA39E17118B83A1A1535BAA4F550CDAFD8E0D42172C6687DE87E4A85EA190DE5B35DA60BB878C558875475CC8D7AC4EA721F380156DD8325B976C3C3266E677EACB204C70C0AE07DF75629F5D845602B5968A00D446F66A103CEE76CED0ED85D144B22580F9A9997B4C6606BBA4ACDA2E5675E1753923A7ED53A8CF7426C57380A1EEB3ACC25E396C9D72455D2F8A2EE727961C86C40637A355F83A8A4AC98AB4DB238EA80705100E51EAD01C3E00868DBD94D782ECF89A937893739D7EB48CD4A388D6DA51AF477822A57E7C2708E31DCEB0ADCA88A95D3FB8D20278B263B38D3679DFCD935E41A9612638671D699F59F0E494BF90B522095FF1E38DDB16541245EDE6703833CD15F1AE6D59575C55942B5306C749927362E5D3D7643BA060F53ACFC46F7222511019EBABBCA226F656DC896C7655A90663537C9BBB13657879FA7B99474D4EC9DB2879B409FCE973FA0A9E4E60F4160C3961B55C3401C7CC402917F6A0984544D666FB2C40B6001E1D740C97DAD646E692403DB4A3191F9C638549616672180317153D3EDC2FA55EA740BC4BAE3F5032FD1E3CE7BDA785DDFD5B65AFD0A4CAC07B18AB8B48FFE65E6C25D8E9D9C6B89D4AC495C2FE7937233EC85C60C8C3EA4A9368697EB136B02766908846FE18CF29CA73A07A0D9C3EA0EEB7A75369"));
        formparams1.add(new BasicNameValuePair("seqSid", "3845068114278942000"));

        try {
            httppost.setEntity(new UrlEncodedFormEntity(formparams1, "UTF-8"));
            response = httpClient.execute(httppost);
            entity = response.getEntity();
            // 在這裡可以用Jsoup之類的工具對返回結果進行分析,以判斷建立是否成功
            postResult = EntityUtils.toString(entity, "UTF-8");

            System.out.println("檢視登入介面請求返回的結果:" + postResult);
        } catch (Exception e) {
            e.printStackTrace();
        }

        httppost.releaseConnection();
    }
}

2.3執行程式

直接在編輯器中右鍵單擊,選擇“Run “loginJDTest””,  如下圖所示

執行後,可在日誌中檢視執行結果,如下圖所示



則我們完成第一個介面測試啦~~~


相關推薦

HttpClient +Testng(1)進行介面測試入門

參考以下等文件: 關於httpclient等概念東西上述幾位大神的文件中比較多,在這裡我們主要簡單搭建我們自己所需的最小化框架,並執行起來 一、所需環境的安裝 這裡可以參考以前文件中的安裝步驟 我們主要是安裝下面兩個工具就可以 1、JDK的安裝和JAVA_

介面自動化:HttpClient + TestNG + Java(一) - 介面測試概述+自動化環境搭建

1.1 介面測試簡介 1.1.1 什麼是介面測試 開始學習介面自動化測試之前,我們先要來了解什麼是介面,以及什麼是介面測試。 我們都知道,測試從級別上劃分可以分為 元件測試 整合測試 系統測試 驗收測試 其中在整合測試這個階段,一個最主要的測試活動就是介面測試。在元件測試中,我

jmeter介面效能測試1)----簡單的介面測試入門

首先來看一下介面的資訊:host:http://api.jhled888.comuri: /cgi-bin/get.json 介面請求方式: GET 入參:appid: jhyjlhxa03q4f2qlmfappsecret:eb28066907b14310a9401c0586c840

介面自動化落地(二:HttpClient+testNG實現對介面的測試及校驗)

這是之前login介面的程式碼 @Test(groups = "loginTrue",description = "使用者登入介面測試") public void loginTrue() throws IOException { S

testng+maven+java+idea 介面測試入門二:使用reportng優化報告格式

方法1: 1、將reportng資訊配置到pom.xml中 <dependency> <groupId>org.uncommons</groupId> <artifactId>reportng</art

robotframework 學習(2) :使用RIDE進行介面測試之傳送請求和接收資料斷言

一、RIDE的介紹:         RIDE是robotframework圖形操作前端,也可以理解為一種編輯器,它以cell的形式來進行定義資料和方法,返回結果等,我們可以使用它進行建立測試用例和編寫測試指令碼,並且執行自動化測試。  

使用 EOLINKER 進行介面測試的最佳路徑 (下)

本文為 《使用 EOLINKER 進行介面測試的最佳路徑》 下半部分文章,主要介紹測試指令碼如何執行和報告生成,以及測試專案人員如何協作。還沒看過上篇文章請戳 使用 EOLINKER 進行介面測試的最佳路徑(上) 本文內容 測試指令碼執行及報告:講述如何在 EOLINKER 上執行介面測試指令碼,及

介面測試----入門

介面測試理念         什麼是介面測試 介面是指系統模組與模組或系統與系統間進行互動,一般我們用 的多的是HTTP協議的介面、WebService協議的介面,還有RPC(Remote Procedure Call Protocol)——遠端過

Python3利用HTTPTestRunner進行介面測試

匯入HTTPTestRunner後,對一些常用方法進行了封裝,之後只要呼叫即可。實現一條語句完成請求 約定:請求的json檔案放在本目錄的特定資料夾下 包含了各種請求條件下的重寫方法,基本滿足需求 import requests import unittest impo

使用Jmeter進行介面測試和壓力測試的配置和使用

1. Jmeter簡介 Apache JMeter是Apache組織開發的基於Java的壓力測試工具。用於對軟體做壓力測試,它最初被設計用於Web應用測試,但後來擴充套件到其他測試領域。 JMeter 可以用於對伺服器、網路或物件模擬巨大的負載,來自不

利用unittest+ddt進行介面測試(一):簡單demo

原文地址 一般進行介面測試時,每個介面的傳參都不止一種情況,一般會考慮正向、逆向等多種組合。所以在測試一個介面時通常會編寫多條case,而這些case除了傳參不同外,其實並沒什麼區別。 這個時候就可以利用ddt來管理測試資料,提高程式碼複用率。 先看一個簡單的dem

excel+python進行介面測試

工作之餘寫了一個超級簡單的excel+python的介面測試指令碼,將多個介面的測試用例寫到表格裡後,指令碼針對單個介面測試它的全用例,然後將返回結果打印出來。之前用postman整合的時候引入excel表格,發現可以跑多個用例,但是我只能看到結果是成功(呈綠色)還是失敗(

如何優雅地使用httprunner進行介面測試

一天,你的領導X要你對某介面做測試,你一聽,介面測試,高大上。用什麼做好呢?postman?jmeter?loadrunner?balabala。。。優秀的你,想到了一大堆工具,當然也包括用python寫。為了凸顯B格,你選擇了python。新建一個a.py檔案,然後一頓猛如虎的擼程式碼:

postman如何繞過登入賬戶和密碼驗證,進行介面測試的方法

實測於:2019.01.08 參考原文:https://yq.aliyun.com/ziliao/403942 一、獲取登入後的cookie資料 1.開啟瀏覽器; 2.啟用開發者模式(F12鍵); 3.在開發者模式下執行:先開啟network,再點選all; 4.再回到使用者介面執行常規的登入

用Jmeter進行介面測試如何從資料庫獲取引數

用Jmeter進行介面測試如何從資料庫獲取引數 剛接觸介面測試,順便將自己的所學記錄下來,可能存在錯誤,如有需要後續會矯正。 此處以一個APP使用者登陸的介面為例。登入時需要的引數為username和password。 1. 建立並設定連線配置。 右擊執行緒組:新增 -

webservice介面測試,使用SoapUI工具進行介面測試

首先,介面使用cxf編寫介面,測試工具使用SoapUI 5.2.1 安裝之後是這樣的圖示: 測試操作步驟如下: <jaxws:endpoint id="ssg" implementor="cn.exchange.cxf.DataExchangeWebServiceImpl" addre

使用pytest+requests進行介面測試實踐——測試post請求

還是以Jenkins介面測試為例,Jenkins提供了“禁用”和“啟用”job的介面,這個介面的方法是POST方法。我們就以這個介面為例。 我們先點選任何一個job,比如“PythonRun”這個job,在開啟的頁面右下角REST API,在開啟的頁面中檢視提供的介面。我們

使用Jmeter進行介面測試時需登入後才能測試介面的配置

1、開啟Jmeter3.1:   啟動命令路徑:apache-jmeter-3.1\bin\jmeter.bat 2、測試步驟:1、測試計劃--右鍵新增--Threads--執行緒組2、執行緒組--右鍵--http資訊頭管理器  輸入Content-Type=application/json,表示介面請求的預

一個專門用來給測試學習者進行介面測試的公開介面

1、獲取學生資訊介面: 2、使用者註冊介面 3、登入 3、新增學生資訊 4、學生金幣充值 需要設定headers和body兩部分: 1.新增金幣需要以管理者身份新增(剛才“登入”介面測試時已經註冊了一個新使用者zhaixl,這個使用者已經被額外授權為管理員,

phoenixframe自動化平臺使用多批次資料進行介面測試的示例

package org.phoenix.cases.webservice; import java.io.IOException; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.LinkedList;