一、前言
在对抽奖进行测试时,都会去对奖品的概率进行测试,确保概率的准确性。那如何对概率进行测试也是一个问题。本期主要用jmeter来为大家验证概率准确性,以及概率该如何测试。
二、抽奖接口准备
为了更加直观的进行概率的抽奖,我们直接写一个抽奖接口进行测试,方便大家参考。
from flask import *
import random
app = Flask(__name__)
@app.route('/lottery')
def lottery():
# 奖品列表和对应的概率
prizes = {"一等奖": 50, "二等奖": 20, "三等奖": 10,"未中奖":20}
# 生成一个1~100之间的随机数
lucky_number = random.randint(1,100)
# 初始化区间值和奖品名称
prob_sum_start = 0
prob_sum_end = 0
prize_name = None
# 遍历奖品列表
for name, prob in prizes.items():
# 累加后一个区间值
prob_sum_end += prob
# 如果随机数在计算区间内,则中奖
if prob_sum_start < lucky_number <= prob_sum_end:
prize_name = name
break
# 累加前一个区间值
prob_sum_start = prob
# 返回随机值和中奖产品
return jsonify({"name":prize_name})
if __name__=="__main__":
app.run(port=8080,host="0.0.0.0",debug=True)
通过访问http://127.0.0.1:8080/lottery 这个接口就可以进行测试。
三、开发人员进行自测
在提交给开发人员进测试之前,开发人员会对自己代码进行单元测试,保障质量第一步。
当然在实际生产中需要考虑到更多的条件,这里,我们简单编写一下测试代码。
prizes = {"一等奖": 0, "二等奖": 0, "三等奖": 0,"未中奖":0}
for i in range(0,10000):
name=lottery()["name"]
prizes[name]+=1
print(prizes)
我们重复去调用我们的方法,调用一万次,如果出现对应奖品,就将奖品加1,我们运行这段代码,就会得到结果:
四、测试人员编写代码测试
测试人员如果通过编码进行测试时,使用requests模块。
代码如下:
import requests
prizes = {"一等奖": 0, "二等奖": 0, "三等奖": 0,"未中奖":0}
for i in range(0,1000):
url=requests.get("http://127.0.0.1:8080/lottery")
t=url.json()
name=t["name"]
prizes[name]+=1
print(prizes)
通过循环调用接口进行概率测试验证结果:
这是一种方式,那另外一种是通过各种工具进行测试
五、通过工具进行测试
这里我们选用比较常用的测试工具jmeter。
第一步、添加http请求
如图,我们需要填写服务器,然后路径,请求方式,和端口号。因为我们写的这个接口没有传入参数的要求,我们也就可以不需要传参。
第二步、添加json提取器
给我们的抽奖接口添加json提取器,提取接口返回的数据name。可根据接口返回数据的不同,选择不同的提取器。这里提取结果我们定义名称为name
第三步、添加Debug sample
添加这个的目的是为了后面做奖品的区分和统计。这里就需要用到上面定义的变量结果名
Name,我们将名称修改为${name}.
第四步、添加聚合报告和查看结果树
查看结果树用于调试,主要使用聚合报告。
调试通过后进入下一步
第五步、启动,运行
我们调整线程达到1000个(相当于1000个人同时来抽奖,会造成并发,对电脑要求较高),或者调整循环次数(1个人去抽奖1000次),并启动。
在运行结束之后,我们也得到了我们的结果数据与我们设计的数据进行比较。接近,这种请况下那说明概率正确,测试通过。
# 奖品列表和对应的概率prizes = {"一等奖": 50, "二等奖": 20, "三等奖": 10,"未中奖":20}
六、文章总结
文章主要通过简单的接口示例来更加直观的为大家讲述抽奖概率的测试方法。可以学习到flask的简单使用,jmeter的简单应用,概率的基本测试方式。