app與後臺互動以及web與後臺互動的比較
阿新 • • 發佈:2019-01-03
前言:
以前的工作一直做的是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進行