作为一名小测试,造数据就是家常便饭,对于各种场景大量的数据等等,要如何机智的提高效率(偷懒)……嘿嘿……让python告诉你如何简单实现向MongoDB快速造数据……满足你想要的测试场景……
一、测试场景:
1、需求与交互:
【参与资格】:年满16周岁
【活动规则】:战神:累计登陆天数≥30天,淘汰对手≥3000
王牌:累计登陆天数≥20天,淘汰对手≥2000
皇冠:累计登陆天数≥10天,淘汰对手≥1000
2、指标测试场景:
【未达皇冠】:累计登陆天数=0,淘汰对手人数=0
累计登陆天数=9,淘汰对手人数=999
累计登陆天数=9,淘汰对手人数=1000
累计登陆天数=10,淘汰对手人数=999
【皇冠】:累计登陆天数=10,淘汰对手人数=1000
累计登陆天数=19,淘汰对手人数=1999
累计登陆天数=19,淘汰对手人数=2000
累计登陆天数=20,淘汰对手人数=1999
【王牌】:累计登陆天数=20,淘汰对手人数=2000
累计登陆天数=29,淘汰对手人数=2999
累计登陆天数=29,淘汰对手人数=3000
累计登陆天数=30,淘汰对手人数=2999
【战神】:累计登陆天数=30,淘汰对手人数=3000
累计登陆天数=31,淘汰对手人数=3000
累计登陆天数=30,淘汰对手人数=3001
累计登陆天数=1000,淘汰对手人数=10000
3、MongoDB数据如下:
每局竞赛100个人,故kill取值[0,100)
【数据来源】:累计登陆天数 = loginTime
淘汰对手人数 = kill的总和
二、python向MongoDB插入数据需要安装第三方库pymongo
MongoDB的id属于自增形式,故插入数据时,可不用填写
python中没有ISODate类型的数据,故插入时间时需要使用dateutil.parser转换
示例如下:
# -*- coding:utf-8 -*-
from pymongo import MongoClient
from dateutil import parser
import random
import datetime
myclient = MongoClient("mongodb://IP:端口号/")
mydb = myclient.get_database("mybase")
class Mydata():
#插入的数据:同时符合"累计登陆天数"、"淘汰对手人数"指标
def creat_record(self,uid,logintime,killcount):
time_str = parser.parse('2019-08-20T06:54:08.324+0000')
time_list = [(time_str + datetime.timedelta(days=i)) for i in range(1, logintime + 1)]
listcoun = []
#累计登陆天数
for i in range(logintime):
mylist = {
"userId": "%s"%uid,
"kill": 0,
"loginTime": time_list[i]
}
listcoun.append(mylist)
#淘汰对手人数
while killcount > 0:
killuser = random.randint(0, 99)#单局淘汰人数
if killcount < killuser:
killuser = killcount
mylist = {
"userId": "%s" % uid,
"kill": killuser,
"loginTime": time_list[0]
}
killcount = killcount - killuser
listcoun.append(mylist)
return listcoun
#查找符合参赛资格者
def find_user(self):
test_table = mydb['User']
myquery = {"age": {"$gte": 16}}
results = list(test_table.find(myquery,projection={"_id": 0, "userID": 1}))
return results
#向Record表插入数据
def insert_record(self,uid,logintime,killcount):
test_table = mydb["Record"]
results = self.creat_record(uid,logintime,killcount)
test_table.insert_many(results)
if __name__ == '__main__':
mydata = Mydata()
userlist = mydata.find_user()
#造数据:未达皇冠
mydata.insert_record(userlist['userID'][0],9,999)
mydata.insert_record(userlist['userID'][1], 9, 1000)
mydata.insert_record(userlist['userID'][2], 10, 999)
# 造数据:皇冠
mydata.insert_record(userlist['userID'][3], 10, 1000)
mydata.insert_record(userlist['userID'][4], 19, 1999)
mydata.insert_record(userlist['userID'][5], 19, 2000)
mydata.insert_record(userlist['userID'][6], 20, 1999)
# 造数据:王牌
mydata.insert_record(userlist['userID'][7], 20, 2000)
mydata.insert_record(userlist['userID'][8], 29, 2999)
mydata.insert_record(userlist['userID'][9], 29, 3000)
mydata.insert_record(userlist['userID'][10], 30, 2999)
# 造数据:战神
mydata.insert_record(userlist['userID'][11], 30, 3000)
mydata.insert_record(userlist['userID'][12], 30, 3001)
mydata.insert_record(userlist['userID'][13], 31, 3000)
mydata.insert_record(userlist['userID'][14], 1000, 10000)
myclient.close()