Initial commit
This commit is contained in:
112
pyground/sugar/SugarRushWebApiSimulator.py
Normal file
112
pyground/sugar/SugarRushWebApiSimulator.py
Normal file
@@ -0,0 +1,112 @@
|
||||
import json
|
||||
import random
|
||||
from typing import List, Dict, Tuple, Optional
|
||||
import time
|
||||
|
||||
import requests
|
||||
|
||||
"""
|
||||
此程序主要模拟用户真实使用过程中的RTP值
|
||||
|
||||
返奖率 RTP = 总赢 / 总投注
|
||||
"""
|
||||
|
||||
|
||||
class SugarRushSimulator:
|
||||
def __init__(self):
|
||||
self.session = requests.Session()
|
||||
self.headers = {
|
||||
'User-Agent': 'Mozilla/5.0 (Compatible; LongConnectionClient/1.0)',
|
||||
'Connection': 'keep-alive' # 显式告诉服务器保持连接
|
||||
}
|
||||
response = self.session.post("http://localhost:8081/api/login", json={'username': '19156010758', 'password': '123456'})
|
||||
data = self.do_result(response)
|
||||
if data is not None:
|
||||
self.session.headers.update({'Authorization': f"Bearer {data['token']}"})
|
||||
|
||||
def do_result(self, response):
|
||||
if response.status_code == 200:
|
||||
resp = json.loads(response.text)
|
||||
if resp['code'] == 200:
|
||||
if 'data' in resp:
|
||||
return resp['data']
|
||||
else:
|
||||
return resp
|
||||
else:
|
||||
print(f"发生错误: {resp}")
|
||||
return None
|
||||
else:
|
||||
print(f"请求发生错误: {response.status_code}")
|
||||
|
||||
|
||||
def buy_free_spins(self,bet, buy_type: str):
|
||||
response = self.session.get(f"http://localhost:8081/api/sugar/buy_free_spins?bet={bet}&kind={buy_type}", headers=self.headers, timeout=(5, 10))
|
||||
return self.do_result(response)
|
||||
|
||||
def do_spin(self, bet):
|
||||
response = self.session.get(f"http://localhost:8081/api/sugar/dospin?bet={bet}", headers=self.headers, timeout=(5, 10))
|
||||
return self.do_result(response)
|
||||
|
||||
def simulate_batch(self, spins: int, buy_type: Optional[str] = None) -> Dict:
|
||||
"""
|
||||
模拟指定次数的旋转
|
||||
:param spins: 模拟次数
|
||||
:param buy_type: None=普通混合模式, 'standard'=只测买普通, 'super'=只测买超级
|
||||
:return: 统计结果
|
||||
"""
|
||||
|
||||
bet = 1
|
||||
total_bet = 0.0
|
||||
total_win = 0.0
|
||||
for _ in range(spins):
|
||||
|
||||
if buy_type and buy_type != "normal":
|
||||
r = self.buy_free_spins(bet, buy_type)
|
||||
if r:
|
||||
total_bet += float(r.get("cost", 0))
|
||||
else:
|
||||
total_bet += bet
|
||||
|
||||
spin_win = 0
|
||||
can_spins = True
|
||||
while can_spins > 0:
|
||||
|
||||
res = self.do_spin(bet)
|
||||
if len(res['data']) == 0:
|
||||
can_spins = False
|
||||
else:
|
||||
spin_win = res['data'][-1]['tw']
|
||||
|
||||
total_win += float(spin_win)
|
||||
|
||||
print(f"旋转{spins} 次, 总下注 {total_bet}, 总盈利 {total_win}, RTP {(total_win / total_bet) * 100}")
|
||||
return {}
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
batchs = [
|
||||
# {
|
||||
# "buy_type": "normal",
|
||||
# "spins": 100,
|
||||
# },
|
||||
# {
|
||||
# "buy_type": "standard",
|
||||
# "spins": 20,
|
||||
# },
|
||||
# {
|
||||
# "buy_type": "super",
|
||||
# "spins": 20,
|
||||
# },
|
||||
]
|
||||
for batch in batchs:
|
||||
sim = SugarRushSimulator()
|
||||
start_time = time.time() # 记录开始时间
|
||||
sim.simulate_batch(
|
||||
batch["spins"],
|
||||
batch['buy_type']
|
||||
)
|
||||
end_time = time.time() # 记录结束时间
|
||||
elapsed_time = end_time - start_time
|
||||
print(f"Batch {batch['buy_type']} took {elapsed_time:.4f} seconds") # 打印耗时
|
||||
Reference in New Issue
Block a user