Jmeter AbstractJavaSamplerClient 案例

1:首先到apache-jmeter-3.0\lib\ext目录下引用以下两个jar包到Java工程里面

ApacheJMeter_core.jar

ApacheJMeter_java.jar

2:新建一个测试类继承AbstractJavaSamplerClient 并实现Serializable 接口,例如:

public class Ssfwpttest extends AbstractJavaSamplerClient implements Serializable {

    private static final long serialVersionUID = 1L;

    //设置GUI页面显示的变量名称
    private static final String URL_NAME = "URL";
    private static final String URLVALUE_DEFAULT = "https://xx";
    //resultData变量用来存储响应的数据,目的是显示到查看结果树中。
    private String resultData;

    private List<String> nsrsbhList = new ArrayList<String>();

    @Override
    public Arguments getDefaultParameters() {
        Arguments arguments = new Arguments();
        arguments.addArgument(URL_NAME, String.valueOf(URLVALUE_DEFAULT));
        return arguments;
    }

    @Override
    public void setupTest(JavaSamplerContext context) {
        nsrsbhList.clear();
        
        try {
            File file = new File("D:\\dj_nsrxx.xml");
            SAXReader reader = new SAXReader();

            Document doc = reader.read(file);

            Element rootElement = doc.getRootElement();

            List<Element> nsrs = rootElement.elements();

            Iterator<Element> iter = nsrs.iterator();

            while (iter.hasNext()) {
                Element row = iter.next();

                Element nsrsbh = row.element("NSRSBH");

                nsrsbhList.add(nsrsbh.getTextTrim());
            }
            
        } catch (DocumentException ex) {
            Logger.getLogger(Ssfwpttest.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    @Override
    public SampleResult runTest(JavaSamplerContext jsc) {
        int begin = 0;
        int end = nsrsbhList.size()-1;
        Random random = new Random();
        int index = random.nextInt(end)%(end-begin+1) + begin;
        String nsrsbh = nsrsbhList.get(index);
        nsrsbhList.remove(nsrsbh);//使用过了就移除,避免出现重复
        
        /*
         * SampleResult这个类是用来将测试结果输出到查看结果树中的。  
         * 并且也是用来控制事务的开始和结束的。  
         */
        SampleResult results = new SampleResult();
        results.setSampleLabel(nsrsbh+"=>"+URLVALUE_DEFAULT);
        results.sampleStart();

        //请求参数需要动态设置
        
        try {
            resultData = HttpsUtils.post(URLVALUE_DEFAULT, header, param, null);

            if (null != resultData) {
                JsonObject obj = new JsonParser().parse(resultData).getAsJsonObject();
                if (null != obj) {
                    String code = obj.get("code").getAsString();
                    if (code.equals("0")) {
                        results.setSuccessful(true);
                    }
                }
            }
        } catch (Exception e) {
            //如果发生异常,则捕捉,并且发送事务失败的消息。
            results.setSuccessful(false);
            //e.printStackTrace();
        } finally {
            //标记事务结束
            results.sampleEnd();
        }

        //将数据打印到查看结果树当中
        results.setResponseData(resultData, null);
        results.setDataType(SampleResult.TEXT);

        return results;
    }
}

3:将项目打包复制到apache-jmeter-3.0\lib\ext目录

 

posted @ 2017-12-20 14:36  yshy  阅读(2746)  评论(0编辑  收藏  举报