用jmeter录制考试上传成绩等脚本时,出现的问题及解决方法如下:

1、beanshell前置处理器,不能读取本地csv文件里的数据:

方法一:

在beanshell里不能直接从本地的csv文件里读取到tid的值,幸好tid数据是有规律的,从700000开始,依次增加,于是通过如下的几个步骤,解决了我的问题:

(1)首先在test plan增加了一个全局变量,如tid,并赋值700000(这时,就不能读取csv里的数据了,这里需要注意);

(2)在beanshell前置处理器上写如下代码:

这里的md5加密是导入的jar包,进行调用的

import com.xuexin.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; String tid=vars.get("tid");
String m_xuexin_id = Integer.toString(Integer.parseInt(tid)+1);
String examSubjectID = "******";
String mid_url = "examSubjectID=" + examSubjectID + "&xuexinID=" + m_xuexin_id;
mymd5 mymd5 = new mymd5();
String sign_score = mymd5.getMd5(mid_url);
vars.put("sign_score",sign_score.toString());
vars.put("tid",m_xuexin_id.toString());

(3)http请求,参数值处,直接读取tid和sign_score,然后tid和sign就都能读取出来并匹配了。
PS:

a.传的json串里,包含很多个picnum,但是这个数值----程序本身也是随机生成的,所以最后用随机数函数生成picnum,这样既和服务器已有的不重复,本身基本上也不会重复

b.还可以用时间函数,每次取当前时间,这样既不相同,也不会重复,前提是这些数值服务器本身也是按一定规则生成的。

方法二:

写java代码直接从本地读取csv文件的数据,然后导入jar包,通过调用jar包的方法引用

(1)首先在test plan增加了2个全局变量,如i,j,并分别赋值1、0;

(2)引入jar包,并在beanshell前置处理器上进行调用:

java源码

import java.io.*;

/**
* Created by New-T450 on 2017/7/20.
*/
public class ReadCsvData { public static String readCSV(int row,int col){
String last = "";
try {
BufferedReader reader = new BufferedReader(new FileReader("D:\\scriptFile\\jmeter\\parameter\\yjxdata.csv"));//换成你的文件名
// reader.readLine();//第一行信息,为标题信息,不用,如果需要,注释掉
String line = null;
int index=0;
while((line=reader.readLine())!=null){
String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
if(index==row-1){
if(item.length>=col){
last = item[col];//这就是你要的数据了
System.out.println(last);
}
}
//int value = Integer.parseInt(last);//如果是数值,可以转化为数值
index++;
}
return last; } catch (Exception e) {
e.printStackTrace();
return null;
} } }

beanshell调用源码

    mymd5 mymd5 = new mymd5();
ReadCsvData readdata = new ReadCsvData(); String row=(String)vars.get("i");
String col=(String)vars.get("j"); String tid1=readdata.readCSV(Integer.parseInt(row),Integer.parseInt(col));
vars.put("tid1",tid1.toString());
log.info("tid1="+tid1); row=Integer.parseInt(row)+1+"";
vars.put("i",row);
vars.put("j",col); String examSubjectID = "********";
String m_xuexin_id = Integer.toString(Integer.parseInt(tid1));
String mid_url = "examSubjectID=" + examSubjectID + "&xuexinID=" + m_xuexin_id;
String sign_score = mymd5.getMd5(mid_url); vars.put("sign_score",sign_score.toString());
vars.put("examSubjectID",examSubjectID.toString());
vars.put("m_cur_version",m_cur_version.toString());
vars.put("tid1",tid1.toString());
log.info("tid1="+m_xuexin_id+" and sign_score="+sign_score);

(3)http请求,参数值处,直接读取tid1和sign_score,然后tid1和sign就都能读取出来并匹配了。
PS:

a.因为需要ReadCsvData.class 里的方法返回值,所以定义方法时不能用void关键字;由于要返回last的值,所以要把last在方法的最前面进行声明并赋值空字符串;

b.由于java里传参的时候是引用的int类型,所以在beanshell里需要把字符串强转为int类型,否则就会找不到readCSV这个方法;

c.由于每个循环都需要i和j增加,因此用vars.put时,应该把row和col值赋给i、j,这样才能保证下个循环读取的数据是下一行或者下一列的。

2、content-type错误,导致服务器接收不到我传递的参数:

因为post的参数里,其中有一个是json串,于是我就把整个请求都当成json串往服务器传了,因此我在http请求下添加了一个http信息头管理器,并在管理器中添加了一个参数,参数名称为Content-Type,参数值为application/json;结果服务器收到的参数一直为空。后来找了很长时间的原因,才发现可能是多了一个这个,试着把它删了,运行后正常,没问题了。

3.json串里,有的参数也需要参数化,这里只需要把需要参数化的地方替换成${参数名称},然后就能读取数据了(当然前提是能有地方存放正确的参数值列表)。

---------------------
作者:爱笑的人更可爱
来源:CSDN
原文:https://blog.csdn.net/kaluman/article/details/73910469
版权声明:本文为博主原创文章,转载请附上博文链接!

jmeter读取本地CSV文件的更多相关文章

  1. 关于sparksql操作hive,读取本地csv文件并以parquet的形式装入hive中

    说明:spark版本:2.2.0 hive版本:1.2.1 需求: 有本地csv格式的一个文件,格式为${当天日期}visit.txt,例如20180707visit.txt,现在需要将其通过spar ...

  2. Mysql加载本地CSV文件

    Mysql加载本地CSV文件 1.系统环境 系统版本:Win10 64位 Mysql版本: 8.0.15 MySQL Community Server - GPL Mysql Workbench版本: ...

  3. 读取gzmt.csv文件,计算均值及概率

    问题: 读取gzmt.csv文件所有数据,选取收盘价格(倒数第二列),计算20天均值,权重取成交量(选做:时间权重为半衰期为15天):将该均值修剪为超过600的都设置为1000,并打印出该均值超过55 ...

  4. 读取本地json文件,并转换为dictionary

    // 读取本地JSON文件 - (NSDictionary *)readLocalFileWithName:(NSString *)name { // 获取文件路径 NSString *path = ...

  5. jQuery ajax读取本地json文件

    jQuery ajax读取本地json文件 json文件 { "first":[ {"name":"张三","sex": ...

  6. JavaScript读取本地json文件

    JavaScript读取本地json文件 今天调试了一上午,通过jQuery读取本地json文件总是失败,始终找不出原因,各种方法都试了 开始总以为是不是json格式的问题.高了半天不行 后来读了一个 ...

  7. 读取本地json文件,转出为指定格式json 使用Base64进行string的加密和解密

    读取本地json文件,转出为指定格式json   引用添加Json.Net 引用命名空间 using Newtonsoft.Json //读取自定目录下的json文件StreamReader sr = ...

  8. JAVA读取本地html文件里的html文本

    /** * 读取本地html文件里的html代码 * @param file File file=new File("文件的绝对路径") * @return */ public s ...

  9. C语言读取写入CSV文件 [一]基础篇

    本系列文章目录 [一] 基础篇 [二] 进阶篇--写入CSV [三] 进阶篇--读取CSV 什么是CSV? CSV 是一种以纯文本形式存储的表格数据,具体介绍如下(来自维基百科): 逗号分隔值(Com ...

随机推荐

  1. buildroot mysql mysql.mk hacking

    /*********************************************************************** * buildroot mysql mysql.mk ...

  2. [转]_int64、long long 的区别

    大学生程序代写 C++的64位整数[原]by 赤兔 http://baike.baidu.com/view/1235293.htm 在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常 ...

  3. 【跨域】Access-Control-Allow-Origin

  4. CH6B12 最优高铁环

    6B12 最优高铁环 0x6B「图论」练习 背景 幻影国建成了当今世界上最先进的高铁,该国高铁分为以下几类: S---高速光子动力列车---时速1000km/h G---高速动车---时速500km/ ...

  5. Excel特殊格式的列

    1.根据前两列显示天时分格式,算出所需时间列的内容=DAY(O2-N2)&"天"&HOUR(O2-N2)&"小时"&MINUTE ...

  6. Python知识点:distutils常用子模块

    from distutils.core import setup, Extension, Commandfrom distutils.command.build import buildfrom di ...

  7. Linux如何打开执行脚本

    命令行下例如要打开startmysql.sh就直接 sh /目录/目录当前界面下就简单了在这个SH文件目录下打开终端 输入 sh startmysql.sh 回车或者对这个文件右键 打开 选择“在终端 ...

  8. Linux编程里getopt_long_only函数用法详解

    在程序中难免需要使用命令行选项,可以选择自己解析命令行选项,但是有现成的,何必再造轮子.下面介绍使用getopt_long_only和getopt_long(两者用法差不多)解析命令行选项. 程序中主 ...

  9. SpringMvc之参数绑定注解详解之三

    2. @RequestHeader.@CookieValue @RequestHeader 注解,可以把Request请求header部分的值绑定到方法的参数上. 示例代码: 这是一个Request ...

  10. 引用静态资源的url添加版本号,解决版本发布后的浏览器缓存有关问题

    在日常的工作中,我们经常会遇到页面文件(html,jsp等)中引用的js,css,图片等被修改后,而浏览器依然缓存着老版本的文件,客户一时半会看不到修改后的效果,同时也给生产环境的版本发布带来了一些问 ...