Jmeter断言的操作
JMeter 2009-09-10 16:31:54 阅读10 评论0 字号:大中小 订阅
在jmeter进行测试的时候,有时候,我们需要确定Jmeter究竟有没有正确工作,因为有时候,我们利用监听器查看的时候,监听器返回的结果是正确的,但是,实际上,我们发送的请求中的有些参数可能是错误的,系统并没有按照我们预期的方式进行相应,比如,一般典型的web应用一般都会:
1.有一个登录页,它是整个应用的入口。当用户登录之后,应用会将用户相关的安全信息放到session中。
2.有一个filter,它拦截请求,检查每个请求相关的session中是否包含有用户安全信息。如果没有,那么请求被重定向到登录页,要求用户提供安全信息。
在这种配置下应用前面介绍的测试计划,那么除了登录页之外的其它请求都将因为缺少用户安全信息,而使请求实际定位到登录页。如果不加断言,那么在监听器看来所有的请求都是成功。而实际上,这些请求最终都没有到达它们应该去的地方。显然,这种测试结果不是我们所期望的。
如果我们要确定Jmeter有没有按照我们的预期进行工作,我们应当考虑使Jmeter提供的断言,加到Sampler里面可以对返回的结果进行判断,例如判断HTTP返回结果里面是否含有某个字符串。如果断言为真,JMeter会标记请求为成功,否则标记为失败。为了最大限度的灵活性,JMeter允许使用正则表达式创建断言。
要在JMeter中添加断言,我们首先要知道我们期望返回什么结果,比如我们利用jmeter测试http请求,向程序添加数据,同时,Jmeter又有查询的http请求,那么,我们当然要验证我们利用jmeter的http请求,是否成功添加了数据,这个时候,我们可以在查询的http请求中添加断言,如下图所示:
我们一般选择响应断言,如下图所示:
我们可以根据自己的需要选择要测试的响应字段,文本,还是代码,一般选择响应文本,然后,我们选择匹配规则,一般选择“包含”,如果要精确匹配,则可以选择“匹配”,但是选择“匹配”,因为响应的内容一般还包含其他的信息,比如html语言标签,所以很难准确匹配。然后在在要册似乎的模式下面,添加你要响应的内容。
添加好断言后,要添加一个监听器,以监听响应断言,选择添加——监听器——断言结果,则,如果在执行的时候,http请求返回的数据符合添加的断言内容,断言结果则为运行成功的灰色,否则,则为运行失败的红色。
以下是一个添加断言的例子,在这个例子中,主要是添加一条数据,然后再查询该数据,如下图所示:
在这个测试计划中,我们添加房型的时候,传递的roomTypeBean.roomID值是一个带参数的值,因为这个值是唯一的,所以,我们利用jmeter的time参数,给它一个参数化的值,这样每次添加的时候,该值都会根据时间的不同而变化。然后,在查询的时候,我们可以将这个值当作查询的条件,这样,每次执行,只要添加了数据,则查询的时候,就能够查询到新添加的数据,然后,在查询的时候,我们可以将这个值当作是断言。
因为Jmeter是根据测试计划中的元件顺序执行的,如果直接在查询的时候,将添加的时候,参数化的值当作断言,则因为取time的时间不一致,断言结果肯定是错误的,我们要先定义一个基于线程组的用户参数,将time函数当作一个用户参数,然后再在添加和查询,以及断言的时候,调用定义的用户参数,则可以解决这个问题。
添加jmeter的time函数,选择选项——函数助手,然后选择__time函数,如下图所示:
在“ormat string for SimpleDateFormat (optional)”中输入值“MMddhhmmss”,表示取月日时分秒。然后,点击生成,怎生成了time参数。
然后再在线程组中定义一个用户参数,具体是添加——前置处理器——用户参数,出现添加用户参数的界面,如下图所示:
在用户参数中,名称写你参数名称,如“current”,用户,输入在函数助手中生成的time参数${__time(MMddhhmmss,)}
添加好用户参数后,在添加和查询的时候,在需要参数化的地方输入定义的用户参数,具体格式是${参数名},比如,上面我们定义的参数名是curent,则参数值应该是${curent},在断言中,断言内容也应该是${curent}这个。