5.3.2 商品列表断言
1 使用响应断言
1)右键点击商品列表HTTP请求,选择“添加->后置处理器->正则表达式提取器”。按照图15进行设置。
图15 获得商品列表信息
- 修改名称为:获得商品列表信息。
- 引用名称为:name。
- 正则表达式为:<td ;(.*?)<td>。获取name的table信息。
- 模板为:1,表示正则表达式中有1个参数。
- 匹配数字为:-1。获得所有匹配。(在这里与边界提取器一样,1表示第1个匹配项;2表示第2个匹配项;…;n表示第n个匹配项;0表示随机由JMeter分配一个匹配项;负数表示获得所有的匹配项)。
- 缺省值为:null。
运行,在查看结果的取样器中可以获得所有的匹配参数,如图16所示。
图16 匹配到的所有商品列表信息
- 由于获得的多条信息,所以name为null。
- name_1:第1条记录匹配到的字符串为:“正山堂茶业 元正简雅正山小种红茶茶叶礼盒装礼品 武夷山茶叶送礼”。
- name_1_g:第1条记录匹配到参数个数,为1个。
- name_1_g0:正则表达式,对应部分用name_1替换,结果为:“<td >正山堂茶业 元正简雅正山小种红茶茶叶礼盒装礼品 武夷山茶叶送礼<td>”。
- name_1_g1同name_1,第1条记录匹配到的字符串:“正山堂茶业 元正简雅正山小种红茶茶叶礼盒装礼品 武夷山茶叶送礼”。
- name_2...、name_3...、name_4...和name_5...分别为第2、3、4、5匹配到的字符串响应得值。
- name_matchNr=5:表示总共匹配到的个数为5。
2)右键点击商品列表HTTP请求,选择“添加->断言->响应断言”。按照图17进行设置。
图17 商品列表信息响应断言
- 名称改为:商品列表信息响应断言。
- Apply to:在JMeter Variable Name to use:name_matchNr。
- 添加匹配规则为“字符串”,内容为:5。
运行后没有发生异常。对于响应断言将在第5.3-1节中进行详细介绍。
2 使用BeanShell断言
1)右键点击商品列表HTTP请求,选择“添加->断言->BeanShell断言”。按照图18书写断言代码。
图18 商品列表BeanShell断言
2)修改名称:商品列表BeanShell断言,然后在脚本中输入如下代码。
//获取系统变量 String name1 = vars.get("name_1"); String name2 = vars.get("name_2"); String name3 = vars.get("name_3"); String name4 = vars.get("name_4"); String name5 = vars.get("name_5"); String name_matchNr = vars.get("name_matchNr"); //判断返回值是否和预期一致 Failure = false; if (! name1.equals("正山堂茶业 元正简雅正山小种红茶茶叶礼盒装礼品 武夷山茶叶送礼")){ Failure = true; FailureMessage = "name1信息与预期不符合"; }else if(! name2.equals("红茶茶叶 正山小种武夷山红茶170g 春茶袋装170g散装新茶")){ Failure = true; FailureMessage = "name2信息与预期不符合"; }else if(! name3.equals("晋袍 花蜜香正山小种红茶 300g牛皮纸袋装礼盒 武夷山桐木关包邮")){ Failure = true; FailureMessage = " name3信息与预期不符合"; }else if(! name4.equals("正山小种红茶特级 新茶 礼盒装 桂圆香 送礼红茶暖养胃茶叶250g")){ Failure = true; FailureMessage = "name4信息与预期不符合"; }else if(! name5.equals("2016春茶 武夷红茶 桐木关 野生红茶 正山小种 包邮 办公室用茶")){ Failure = true; FailureMessage = "name5信息与预期不符合"; }else if(!name_matchNr.equals("5")){ Failure = true; ailureMessage = "name_matchNr信息与预期不符合"; }
运行后没有发生异常。由此可见BeanShall断言虽然掌握起来有一定难度,但是它的功能更强大的。对于BeanShell断言将在第5.3-2节中进行详细介绍。
注意:在正常的工作中,使用响应断言和BeanShell断言二者选其一即可,不需要全上。但是我个人觉得在这里建议使用BeanShell断言。
3.3 新版本商品列表
在新的版本中,仅从服务器端下载XML文件,然后通过HTML文件的解析,这个XML文件如下形式。
CATALOG> <GOOD> <ID>1</ID> <NAME>正山堂茶业 元正简雅正山小种红茶茶叶礼盒装礼品 武夷山茶叶送礼</NAME> <PRICE>¥238.0</PRICE> </GOOD> <GOOD> <ID>2</ID> <NAME>红茶茶叶 正山小种武夷山红茶170g 春茶袋装170g散装新茶</NAME> <PRICE>¥25.0</PRICE> </GOOD> <GOOD> <ID>3</ID> <NAME>晋袍 花蜜香正山小种红茶 300g牛皮纸袋装礼盒 武夷山桐木关包邮</NAME> <PRICE>¥188.0 </PRICE> <GOOD> <GOOD> <ID>4</ID> <NAME>正山小种红茶特级 新茶 礼盒装 桂圆香 送礼红茶暖养胃茶叶250g</NAME> <PRICE>¥238.12</PRICE> </GOOD> <GOOD> <ID&>5</ID> <NAME>2016春茶 武夷红茶 桐木关 野生红茶 正山小种 包邮 办公室用茶</NAME> <PRICE>¥68.0</PRICE> </GOOD> </CATALOG>
我们把它存储在Tomcat中,请求地址为:http://127.0.0.1:8080/sec/48/goods.xml。
1)建立HTTP请求。如图19所示。
图19 新版本商品列表HTTP请求
- 名称:商品列表(new)。
- HTTP请求:GET。
- 路径:/sec/48/goods.xml。
自动重定向。
2)右击商品列表HTTP请求(new),选择“添加->断言->XML断言”。按照图20进行设置。
图20 XML断言
XML断言,仅仅确保XML格式是否正确。
3)右击商品列表HTTP请求(new),选择“添加->断言->XPath断言”。按照图21进行设置。
图21 商品列表(new)XPath断言
- 修改名称:商品列表(new)XPath断言。
- Apply to:Main sample only。
- XPath://PRICE[text()="¥238.12"]。(存在<PRICE>¥238.12</PRICE>)。
最后点击【验证】按键,确保XPath格式输入正确。我们在第5.8节中介绍XPath断言。
4)现在XPath出现了2.0版本。所以我们也可以使用XPath2 Assertion来进行断言。右击商品列表HTTP请求(new),选择“添加->断言->XPath2 Assertion”。按照图22进行设置。
图22 商品列表(new) XPath2 Assertion
- 修改名称:商品列表(new) XPath2 Assertion。
- Apply to:Main sample only。
- XPath://PRICE[text()='¥68.0']。(存在<PRICE>¥68.0</PRICE>)。
最后点击【Validate xpath expression】按键,确保XPath格式输入正确。我们在第5.9节中介绍XPath2 Assertion。