天天看點

java vuser 參數化_2018-05-20 java方法參數化

一、初始方法

public static void httpPost() throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse httpResponse = null;

BufferedReader reader = null;

StringBuffer response = new StringBuffer();

try {

String url = "http://47.98.226.232:8080/guoya-medium/user/login.action";

HttpPost httpPost = new HttpPost(url);

RequestConfig requestConfig = RequestConfig.custom()

.setSocketTimeout(6000).setConnectTimeout(6000).build();// 設定請求和傳輸逾時時間

httpPost.setConfig(requestConfig);

httpPost.addHeader("Host", "47.98.226.232:8080");

httpPost.addHeader("Connection", "keep-alive");

List paramList = new ArrayList();

paramList.add(new BasicNameValuePair("userName", "guoya"));

paramList.add(new BasicNameValuePair("password",

"46da9da65fae31c690e7c391f37b085a"));

paramList.add(new BasicNameValuePair("checkCode", "12345"));

try {

httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

httpResponse = httpClient.execute(httpPost);

reader = new BufferedReader(new InputStreamReader(httpResponse

.getEntity().getContent(), "UTF-8"));

String inputLine;

while ((inputLine = reader.readLine()) != null) {

response.append(inputLine);

}

} catch (Exception var) {

var.printStackTrace();

} finally {

if (reader != null) {

reader.close();

}

if (httpResponse != null) {

httpResponse.close();

}

httpClient.close();

}

System.out.println(response.toString());

boolean isSuccess = response.toString().contains("班級類型");

Assert.assertEquals(true, isSuccess);

// return response.toString();

}

二、第一輪重構:參數化

字元串參數化

鍵值對參數化

斷言功能分離,該方法隻負責http請求

public static String httpPost2(int timeout,String url,HashMap headers,HashMap params,String encode) throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse httpResponse = null;

BufferedReader reader = null;

StringBuffer response = new StringBuffer();

try {

//String url = "http://47.98.226.232:8080/guoya-medium/user/login.action";

HttpPost httpPost = new HttpPost(url);

// RequestConfig requestConfig = RequestConfig.custom()

// .setSocketTimeout(6000).setConnectTimeout(6000).build();// 設定請求和傳輸逾時時間

RequestConfig requestConfig = RequestConfig.custom()

.setSocketTimeout(timeout).setConnectTimeout(timeout).build();// 設定請求和傳輸逾時時間

httpPost.setConfig(requestConfig);

Iterator iterator=headers.entrySet().iterator();

while(iterator.hasNext()){

Map.Entry entry = (Map.Entry) iterator.next();

httpPost.addHeader(entry.getKey().toString(), entry.getValue().toString());

}

List paramList = new ArrayList();

iterator=params.entrySet().iterator();

while(iterator.hasNext()){

Map.Entry entry = (Map.Entry) iterator.next();

paramList.add(new BasicNameValuePair(entry.getKey().toString(), entry.getValue().toString()));

}

// paramList.add(new BasicNameValuePair("userName", "guoya"));

// paramList.add(new BasicNameValuePair("password",

// "46da9da65fae31c690e7c391f37b085a"));

// paramList.add(new BasicNameValuePair("checkCode", "12345"));

try {

//httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));

httpPost.setEntity(new UrlEncodedFormEntity(paramList, encode));

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

httpResponse = httpClient.execute(httpPost);

// reader = new BufferedReader(new InputStreamReader(httpResponse

// .getEntity().getContent(), "UTF-8"));

reader = new BufferedReader(new InputStreamReader(httpResponse

.getEntity().getContent(), encode));

String inputLine;

while ((inputLine = reader.readLine()) != null) {

response.append(inputLine);

}

} catch (Exception var) {

var.printStackTrace();

} finally {

if (reader != null) {

reader.close();

}

if (httpResponse != null) {

httpResponse.close();

}

httpClient.close();

}

System.out.println(response.toString());

// boolean isSuccess = response.toString().contains("班級類型");

// Assert.assertEquals(true, isSuccess);

return response.toString();

}

三、第二輪重構:參數封裝成bean

預設值:逾時時間、編碼想取預設值,給不給都不會報錯

參數化後變量個數太多,不利于閱讀和維護

什麼時候用入參,什麼時候用bean封裝入參?

個數少的時候(4個以内),直接參數化,個數多的時候,将參數封裝成javabean

package com.guoyasoft.tools.http;

import java.util.HashMap;

public class ApacheHttpBean {

private int timeout=6000;

private String url;

private HashMap headers=new HashMap();

private HashMap params=new HashMap();

private String encode="UTF-8";

public int getTimeout() {

return timeout;

}

public void setTimeout(int timeout) {

this.timeout = timeout;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public HashMap getHeaders() {

return headers;

}

public void setHeaders(HashMap headers) {

this.headers = headers;

}

public HashMap getParams() {

return params;

}

public void setParams(HashMap params) {

this.params = params;

}

public String getEncode() {

return encode;

}

public void setEncode(String encode) {

this.encode = encode;

}

}

public static String httpPost2(ApacheHttpBean params) throws Exception {

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse httpResponse = null;

BufferedReader reader = null;

StringBuffer response = new StringBuffer();

try {

//String url = "http://47.98.226.232:8080/guoya-medium/user/login.action";

HttpPost httpPost = new HttpPost(params.getUrl());

// RequestConfig requestConfig = RequestConfig.custom()

// .setSocketTimeout(6000).setConnectTimeout(6000).build();// 設定請求和傳輸逾時時間

RequestConfig requestConfig = RequestConfig.custom()

.setSocketTimeout(params.getTimeout()).setConnectTimeout(params.getTimeout()).build();// 設定請求和傳輸逾時時間

httpPost.setConfig(requestConfig);

Iterator iterator=params.getHeaders().entrySet().iterator();

while(iterator.hasNext()){

Map.Entry entry = (Map.Entry) iterator.next();

httpPost.addHeader(entry.getKey().toString(), entry.getValue().toString());

}

List paramList = new ArrayList();

iterator=params.getParams().entrySet().iterator();

while(iterator.hasNext()){

Map.Entry entry = (Map.Entry) iterator.next();

paramList.add(new BasicNameValuePair(entry.getKey().toString(), entry.getValue().toString()));

}

// paramList.add(new BasicNameValuePair("userName", "guoya"));

// paramList.add(new BasicNameValuePair("password",

// "46da9da65fae31c690e7c391f37b085a"));

// paramList.add(new BasicNameValuePair("checkCode", "12345"));

try {

//httpPost.setEntity(new UrlEncodedFormEntity(paramList, "UTF-8"));

httpPost.setEntity(new UrlEncodedFormEntity(paramList, params.getEncode()));

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

httpResponse = httpClient.execute(httpPost);

// reader = new BufferedReader(new InputStreamReader(httpResponse

// .getEntity().getContent(), "UTF-8"));

reader = new BufferedReader(new InputStreamReader(httpResponse

.getEntity().getContent(), params.getEncode()));

String inputLine;

while ((inputLine = reader.readLine()) != null) {

response.append(inputLine);

}

} catch (Exception var) {

var.printStackTrace();

} finally {

if (reader != null) {

reader.close();

}

if (httpResponse != null) {

httpResponse.close();

}

httpClient.close();

}

System.out.println(response.toString());

// boolean isSuccess = response.toString().contains("班級類型");

// Assert.assertEquals(true, isSuccess);

return response.toString();

}

package com.guoyasoft.tools.http;

import org.testng.Assert;

import org.testng.annotations.Test;

public class TestHttp {

@Test

public void testHttp() throws Exception{

ApacheHttpBean bean=new ApacheHttpBean();

bean.setUrl("http://47.98.226.232:8080/guoya-medium/user/login.action");

bean.getHeaders().put("Host", "47.98.226.232:8080");

bean.getHeaders().put("Connection", "keep-alive");

bean.getParams().put("userName", "guoya");

bean.getParams().put("password", "46da9da65fae31c690e7c391f37b085a");

bean.getParams().put("checkCode", "12345");

String response=ApacheHttp.httpPost2(bean);

System.out.println(response);

boolean isSuccess=response.contains("真實姓名");

Assert.assertEquals(true, isSuccess);

}

}

第四輪重構:使用csv作為資料源

java vuser 參數化_2018-05-20 java方法參數化

image.png

java vuser 參數化_2018-05-20 java方法參數化

image.png

net.sourceforge.javacsv

javacsv

2.0

package com.guoyasoft.tools.csv;

import java.io.IOException;

import java.nio.charset.Charset;

import java.util.ArrayList;

import java.util.HashMap;

import com.csvreader.CsvReader;

import com.csvreader.CsvWriter;

public class CSVReader {

public static Object[][] readCSV(String csvFilePath) {

//try{業務代碼}catch(Exception e){如果做業務的過程中出了錯,的異常處理邏輯}

try {

//容器:對象少的時候,直接把對象列出來;當對象很多的時候,要用一個容器裝起來打包

ArrayList csvFileList = new ArrayList();

// 這個不用背,隻要看得懂會用就行。建立CSV讀對象 例如:CsvReader(檔案路徑,分隔符,編碼格式);

CsvReader reader = new CsvReader(csvFilePath, ',', Charset.forName("GBK"));

// 跳過表頭 如果需要表頭的話,這句可以忽略

reader.readHeaders();

// 逐行讀入除表頭的資料

//boolean變量:真假true或者false

while (reader.readRecord()) {

System.out.println(reader.getRawRecord());

//将一行的字元串按照“,”逗号分成多列,存放到String[]數組中

//再将這個string[]放到list容器中存起來

csvFileList.add(reader.getValues());

}

//資料取完了,關閉檔案

reader.close();

// 周遊讀取的CSV檔案

//for是一個整數次的循環,三個參數:最小值,最大值,增量,取個變量名存放每次循環的序列值

Object[][] result=new Object[csvFileList.size()][5];

for (int row = 0; row < csvFileList.size(); row++) {

result[row]=csvFileList.get(row);

}

return result;

} catch (IOException e) {

e.printStackTrace();

}

return null;

}

public static void writeCSV(String csvFilePath) {

try {

// 建立CSV寫對象 例如:CsvWriter(檔案路徑,分隔符,編碼格式);

CsvWriter csvWriter = new CsvWriter(csvFilePath, ',', Charset.forName("UTF-8"));

// 寫表頭

String[] csvHeaders = { "編号", "姓名", "年齡" };

csvWriter.writeRecord(csvHeaders);

// 寫内容

for (int i = 0; i < 20; i++) {

String[] csvContent = { i + "000000", "StemQ", "1" + i };

csvWriter.writeRecord(csvContent);

}

csvWriter.close();

System.out.println("--------CSV檔案已經寫入--------");

} catch (IOException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

//JavaCSV.writeCSV(csvFilePath);

CSVReader.readCSV("C:\\softwareData\\workspace\\guoya-test\\src\\main\\resources\\testNG\\searchData.csv");

}

}

package com.guoyasoft.tools.http;

import org.testng.annotations.DataProvider;

import com.guoyasoft.tools.csv.CSVReader;

public class ApacheHttpDataProvider {

@DataProvider(name="loginUser")

public static Object[][] getLoginUser(){

Object[][] objs=CSVReader.readCSV("src/main/java/com/guoyasoft/tools/http/loginUsers.csv");

return objs;

}

}

@Test(dataProvider="loginUser",dataProviderClass=com.guoyasoft.tools.http.ApacheHttpDataProvider.class)

public void testHttpCsv(ITestContext context, String userName,String password,String checkCode,String exception) throws Exception{

ApacheHttpBean bean=new ApacheHttpBean();

String url=context.getCurrentXmlTest().getParameter("url");

bean.setUrl(url);

// bean.setUrl("http://47.98.226.232:8080/guoya-medium/user/login.action");

// bean.getHeaders().put("Host", "47.98.226.232:8080");

// bean.getHeaders().put("Connection", "keep-alive");

bean.getParams().put("userName", userName);

bean.getParams().put("password", password);

bean.getParams().put("checkCode", checkCode);

String response=ApacheHttp.httpPost2(bean);

System.out.println(response);

boolean isSuccess=response.contains(exception);

Assert.assertEquals(true, isSuccess);

}