3、所有奖券的状态显示正常

自动化方案:

1、中奖概率在千万级别不可能用人工进行,需要借助自动化。

2、在自动化测试工具的选择上,用Java代码脚本的形式做到千万级别的次数运行时间太长,需要借助并发测试工具。

3、考虑使用Jmeter的接口测试功能,加上并发的功能和顺序执行的逻辑来实现。

实施方案:

考虑到项目的测试需求是测试中奖率,所以只需要选取主要的三个接口进行测试即可。产生奖券 – 刮奖

每个用户经过这个流程,从产生奖券传入用户名参数,返回奖券ID,生成的ID用到刮奖接口中,返回奖券状态。多用户使用Jmeter的CVSRead方法来生成,刮奖使用的奖券ID参数用正则表达式提取器提取出来,作为刮奖接口的参数。通过多用户并发执行产生奖券和刮奖的接口,完成这个业务逻辑的功能测试。

JMeter实施过程

设置3个全局变量,服务器地址,端口号和活动的ID号

设置3个全局变量,服务器地址,端口号和活动的ID号

新建一个dat文件,供CVSRead函数调用。Dat文件内容为

t.dat

CVSRead函数

每行代表一个用户名和用户ID,在Jmeter的选项中调出函数对话框,选择_CVSRead,在第一行中输入dat文件的路径 c:\t.dat, 第二行输入0,然后生成函数${__CSVRead(c:\t.dat,0)}, 调用这个函数的时候,0表示调用第一列的值,1表示调用第二列的值,依此类推。

(这里补充一下,如果涉及到性能测试的多用户并发,使用配置元件中的CSV Data config会好点,因为这里没有涉及到性能上的问题,所以采用这种方式)

设置产生奖券接口

这里写图片描述

正则表达式提取器

这里写图片描述

1、在产生奖券的请求下面新建一个正则表达式提取器

2、在测试计划下面新建一个查看结果树

3、点击绿色三件按钮执行测试,查看结果树中影响数据:{“resultCode”:”0000”,”resultMsg”:”抽奖成功!”,”resultData”:{“id”:11566355,”userId”:9000,”userName”:”autotest0”,”activeId”:3,”status”:0,”catalog”:null,”prizeId”:null,”recipient”:null,”contact”:null,”address”:null,”province”:null,”city”:null,”area”:null,”orderNo”:null,”deviceType1”:”123456”,”deviceId1”:”123456”,”source”:”test”,”deviceType2”:null,”deviceId2”:null,”deviceType3”:null,”deviceId3”:null,”endTime”:1448935237000,”openTicketTime”:0,”createTime”:1447232320281,”prizeName”:null,”prizePrice”:0.0,”thumbnail”:null}}

4、需要提取的是id后面的值:11566355, 正则表达式为{“id“(.+?), 匹配的是需要的值。

设置刮奖接口

刮奖接口调用产生奖券接口生成的ID,使用JMeter自带的函数表达式即可${ticketId},注意的是,使用通过正则表达式提取器得到的参数,只能是该请求下面的请求才能使用,逆向不可用。

这里写图片描述

脚本配置完需要设置并发的线程数和执行的时间来进行测试,在线程组中设置,若测试的中奖概率比较小,比如五百万分之一,想要尽快完成测试,线程数需要设置大一点,这里推荐100(按CPU线程数来算,128个线程比较合理),循环次数勾选永远,即测试会不停执行。

这里写图片描述

测试结果在项目中的效果

这里写图片描述


本文由转载于互联网,如有侵权请联系删除!