问题:我们执行接口压力测试首先要生成测试URL,测试URL部分字段要进行MD5加密,如何生成这样的测试URL?
有两种方案进行如此测试:
1.使用java脚本生成一批加密后的测试URL,然后将这批数据放入Lr参数库中,编写c脚本进行调用
2.封装MD5加密等类,并将构建测试URL类一并打包,加载到LR-ClassPath中,这样就可以在LR中编写java脚本调用jar包自动生成测试URL了
备注:LR11中在controller跑c脚本支持10000用户,跑java脚本支持1000用户;LR12仅支持50用户,要想使用LR12跑压测,有能力的话可以去写线程池来提高虚拟用户数;
我们使用第二种方法,首先要在Eclipse中新建一个java工程,然后加入我们需要的类,需要Interface(FilmNew.java/Plans.java)类里边封装接口的主要方法参数,然后是基础类(MD5.java/GetENC.java/TimeSimple.java)生成加密数据,外部调用类(Vug.java)用以生成测试URL,结构如下图所示:
1.在FilmNews.java和Plans.java中主要通过HashMap存储接口参数如下:
// 影厅接口 public HashMap<String, String> hallsByCinemaId(String cinemaId) { HashMap<String, String> params = new HashMap<String, String>(); params.put("method", "getHallsByCinemaId"); params.put("uid", uid); params.put("cinemaId", cinemaId); // 影院id要动态生成 return params; }
2.MD5.java算法可以去百度一下,下边列出TimeSimple.java中获取某天日期方法如下:
@SuppressWarnings("static-access") public static String nextDataSimple(int index){ Date date=new Date();// Calendar calendar = new GregorianCalendar(); calendar.setTime(date); calendar.add(calendar.DATE,index);//根据index获取日期 date=calendar.getTime(); //获取某一天日期 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(date); }
3.Vug.java中主要是一个传入host与(FilmNews.java返回的)HashMap生成测试URL的方法如下:
public String getURL(String host, HashMap<String, String> params){ StringBuilder url = new StringBuilder(); url.append(host + "?"); params.put("time_stamp", String.valueOf(new Date().getTime())); String enc = GetENC.getEnc(params, Md5Key); for (Entry<String, String> e : params.entrySet()) { url.append(e.getKey() + "=" + e.getValue() + "&"); } url.append("enc=" + enc); return url.toString(); }
4.当这些脚本准备完成后,我们需要导出jar包,通过上边的截图可以看到我使用的是JDK1.7,而LR11不支持JDK1.7导出的jar包,我们需要更改成JDK1.6导出jar;
右键项目-Properties-Java Compiler-将JDK Compliance改成1.6,然后在以Export-JAR file即可
5.导出的jar包,任意起个名即可,然后将该jar包导入LR11-java vuser-Run-time Settings-Classpath如下图所示:
配置完成后,就可以再Actions界面调用jar中的方法