ngrinder groovy 参数化-读取文件参数化

import static net.grinder.script.Grinder.grinder
import static org.junit.Assert.*
import static org.hamcrest.Matchers.*
import net.grinder.plugin.http.HTTPRequest
import net.grinder.plugin.http.HTTPPluginControl
import net.grinder.script.GTest
import net.grinder.script.Grinder
import net.grinder.scriptengine.groovy.junit.GrinderRunner
import net.grinder.scriptengine.groovy.junit.annotation.BeforeProcess
import net.grinder.scriptengine.groovy.junit.annotation.BeforeThread
// import static net.grinder.util.GrinderUtils.* // You can use this if you're using nGrinder after 3.2.3
import org.junit.Before
import org.junit.BeforeClass
import org.junit.Test
import org.junit.runner.RunWith

import java.util.Date
import java.util.List
import java.util.ArrayList

import HTTPClient.Cookie
import HTTPClient.CookieModule
import HTTPClient.HTTPResponse
import HTTPClient.NVPair

import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.HttpResponse;
import org.apache.http.HttpEntity
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.entity.StringEntity;
import org.apache.http.util.EntityUtils;
import org.apache.commons.lang3.RandomStringUtils; //导入方法依赖的package包/类
import groovy.sql.Sql

/**
 * A simple example using the HTTP plugin that shows the retrieval of a
 * single page via HTTP. 
 * 
 * This script is automatically generated by ngrinder.
 * 
 * @author xiaochanchan
 */
@RunWith(GrinderRunner)
class TestRunner {

	public static GTest test
	public static HTTPRequest request
	public static NVPair[] headers = []
	public static NVPair[] params = []
	public static Cookie[] cookies = []
	
	public static List<String> LineList //存放参数化数据

	@BeforeProcess
	public static void beforeProcess() {
		HTTPPluginControl.getConnectionDefaults().timeout = 6000
		test = new GTest(1, "10.248.64.58")
		request = new HTTPRequest()
		
		LineList = new File("./resources/get_customerID.csv").readLines("UTF8")//从文件读取参数化数据
		grinder.logger.info("LineList={}",LineList);
grinder.logger.info("before process."); } @BeforeThread public void beforeThread() { test.record(this, "test") grinder.statistics.delayReports=true; grinder.logger.info("before thread."); } @Before public void before() { request.setHeaders(headers) cookies.each { CookieModule.addCookie(it, HTTPPluginControl.getThreadHTTPClientContext()) } grinder.logger.info("before thread. init headers and cookies"); } @Test public void test(){ def gtime=new Date().format('yyyyMMddHHmmssSSS')//生成17位时间戳 //String getStr=RandomStringUtils.randomAlphanumeric(24)//获取24位长的字母和数字随机字符串 int testcount=grinder.getProperties().getInt("grinder.runs",1); //测试总数 int total_processes=grinder.getProperties().getInt("grinder.processes",1); //总进程数 int total_threads=grinder.getProperties().getInt("grinder.threads",1); //总线程数 grinder.logger.info("total_runs={},total_processes={},total_threads={}",testcount,total_processes,total_threads) String code=grinder.agentNumber.toString()+grinder.processNumber.toString()+grinder.threadNumber.toString()+grinder.runNumber.toString() int Listindex=grinder.processNumber*total_threads+grinder.threadNumber+total_processes*total_threads*grinder.runNumber;// 取在数组中的序号 String customerID = LineList.get(Listindex).toString() grinder.logger.info("code={},customerID={}",code,customerID) //定义请求报文 String req_xml="<CustomerNumber>${customerID}</CustomerNumber><OrderNumber>${code}JCKL${gtime}${RandomStringUtils.randomAlphanumeric(20)}</OrderNumber>" grinder.logger.info("请求报文={}",req_xml) HttpClient client = new DefaultHttpClient(); HttpPost post_request = new HttpPost("http://IP:post/targets"); //URL修改为请求的真实IP和端口 StringEntity entityParams = new StringEntity(req_xml,"utf-8"); entityParams.setContentType("text/xml");//设置请求头数据传输格式 post_request.setEntity(entityParams); //设置post请求实体 HttpResponse response = client.execute(post_request); //发送http请求 HttpEntity resEntity = response.getEntity(); String responseXML = EntityUtils.toString(resEntity, "utf-8"); grinder.logger.info("响应报文={}",responseXML);//打印响应报文 //获取响应状态码和描述 def rootNode = new XmlParser().parseText(responseXML); String RspDesc=rootNode.order_content.order_resp.InterBOSS.Response.RspDesc.text(); String RspCode=rootNode.order_content.order_resp.InterBOSS.Response.RspCode.text(); String resp_code=rootNode.order_content.resp_code.text(); String resp_desc=rootNode.order_content.resp_desc.text(); //断言 if(RspCode != '0000'){ grinder.logger.error("接口响应失败>>>resp_code:{},resp_desc:{},RspCode:{},RspDesc:{}",resp_code,resp_desc,RspCode,RspDesc); assertThat("判断响应结果:",RspCode, is("0000")); } } }

  

posted @ 2022-05-18 19:42  垄上行  阅读(92)  评论(0编辑  收藏  举报