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")); } } }