1. 程式人生 > >app與後臺互動以及web與後臺互動的比較

app與後臺互動以及web與後臺互動的比較

前言:
以前的工作一直做的是web方面的測試工作,效能測試也主要是模擬web端向伺服器傳送http請求。對app這一塊的體系和框架了解比較少。由於下一份工作主要是測試app伺服器的效能。就在網上找了一些資料,簡單的搭建一個app的測試環境。同時希望能夠使用jmeter模擬app向伺服器傳送請求。所以只適合初學者和我一起學習看,大神勿噴
前面我已經搭建了一個非常簡單的javaweb應用,實現使用javaServlet進行登陸的過程。參照前面的博文
現在基於LoginServlet開發app端的程式

  • 1 使用adt建立android專案。layout我的理解就是與使用者互動的介面,屬於app的前端
    在layout的activity_main.xml配置一些程式碼
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity" >

  <EditTextandroid:id="@+id/nameText"android:layout_width
="match_parent"android:layout_height="wrap_content"android:hint="username" />
<EditTextandroid:id="@+id/pwdText"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="password" /> <Button android:id="@+id/button1"android:layout_width="match_parent"android:layout_height
="wrap_content"android:text="submit" />
</LinearLayout>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 2 在mainactivity.java輸入下面程式碼,初學理解:這個java相當於是處理layout傳送過來的資料。一些前端的校驗工作可以在這進行,以及具體處理工作也可以在此進行。這裡是接收layout的使用者輸入,然後點選登陸的時候使用get方法向伺服器傳送http請求
package com.example.test;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
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.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;

import android.app.Activity;
 import android.os.Bundle;
 import android.util.Log;
import android.view.View;
 import android.view.View.OnClickListener;
import android.widget.Button;
 import android.widget.EditText;

public class MainActivity extends Activity {

    private EditText nameText;
    private EditText pwdText;
    private Button button;

   @Override
     protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       nameText = (EditText) findViewById(R.id.nameText);
      pwdText = (EditText) findViewById(R.id.pwdText);
        button = (Button) findViewById(R.id.button1);

       button.setOnClickListener(new OnClickListener() {

           @Override
          public void onClick(View v) {
                 // TODO Auto-generated method stub
              // 使用者輸入使用者名稱密碼, 然後通過Get方法傳送給本地伺服器
                String name = nameText.getText().toString();
               String pwd = pwdText.getText().toString();

            // 執行執行緒,使用GET方法向本地伺服器傳送資料
               GetThread getThread = new GetThread(name, pwd);
                getThread.start();
          }
        });
    }

    //子執行緒:通過GET方法向伺服器傳送使用者名稱、密碼的資訊
     class GetThread extends Thread {

       String name;
       String pwd;

       public GetThread(String name, String pwd) {
           this.name = name;
            this.pwd = pwd;
       }

        @Override
       public void run() {
          //用HttpClient傳送請求,分為五步
           //第一步:建立HttpClient物件
          HttpClient httpClient = new DefaultHttpClient();
           //注意,下面這一行中,我之前把連結中的"test"誤寫成了"text",導致調BUG調了半天沒弄出來,真是浪費時間啊
           String url = "http://localhost:8080/LoginServlet/LoginServlet?name=" + name+ "&password=" + pwd;
           //第二步:建立代表請求的物件,引數是訪問的伺服器地址
          HttpGet httpGet = new HttpGet(url);
       try {
               //第三步:執行請求,獲取伺服器發還的相應物件
              HttpResponse response = httpClient.execute(httpGet);
               //第四步:檢查相應的狀態是否正常:檢查狀態碼的值是200表示正常
               if (response.getStatusLine().getStatusCode() == 200) {
                   //第五步:從相應物件當中取出資料,放到entity當中
                 HttpEntity entity = response.getEntity();
                BufferedReader reader = new BufferedReader(
                          new InputStreamReader(entity.getContent()));
                   String result = reader.readLine();
                    Log.d("HTTP", "GET:" + result);
              }
             } catch (Exception e) {
                e.printStackTrace();
            }

        }
    }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92

我在前面的LoginServlet.java裡面加入了列印程式碼。如果有請求過來就列印資訊。用於驗證請求傳送成功。

至此:app端與伺服器端的互動模擬過程已經完成

  • 分析
    從業務邏輯可以看出來,app端與伺服器的互動與web端與伺服器的互動幾乎一樣,可以認為是一套伺服器,兩種不同的客戶端。上面介紹的後臺使用的是同一個javaservlet,一個是通過html的靜態web頁面去訪問,另外一種是通過app端訪問,對伺服器端來說效果是一樣的。

所以有過測試web伺服器效能的測試人員,不用擔心說沒有測試過app的伺服器效能。他們是同一套後臺,測試伺服器效能時直接模擬web端就是OK的。如果沒有web端,只有app端,測試效能的時候,可以找對應開發人員提供http請求報文。然後放到jmeter裡面進行測試就ok了
當然還有一種方式就是使用javasampler直接呼叫後臺的介面進行測試。這個要參照前面的javasampler進行