python做前端mongodb_python实现向MongoDB快速造数据

这篇博客介绍了如何使用Python高效地为MongoDB生成测试数据,满足不同等级的用户登录天数和淘汰对手数量的场景。通过创建类`Mydata`,实现了根据指定条件插入数据到MongoDB的功能,包括查找符合资格的用户、创建记录并插入到`Record`表中。示例代码展示了如何利用`pymongo`库操作MongoDB,并用日期处理和随机数生成来模拟不同测试场景。
摘要由CSDN通过智能技术生成

作为一名小测试,造数据就是家常便饭,对于各种场景大量的数据等等,要如何机智的提高效率(偷懒)……嘿嘿……让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()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值