实习日记(第二周)

任务

  1. 模拟玩家登入过程,测试大量玩家并发请求,一次登入过程,至少包含login、get_game_info、get_user_profile、update、join_chat、join_tournament等请求,且必须返回正确数据;
  2. 需要模拟多玩家同时登入过程,所以需要多线程、多进程和协程的技术三选一使用;

期望

  1. 测试出某些接口性能是否存在问题;
  2. 可尝试攻击服务器,发现潜在的安全隐患;

游戏过程command事件

1. 登录

update_profile
update
join_chat
execute
get_many_user_profile
execute

2. 加入战斗:

join_arena
get_tournament_info
get_tournament_info
finish_mission
update
execute
get_clan_info

3. 1V1战斗

join_tournament
get_user_profile
get_tournament_info
update
update
get_tournament_info
execute
get_clan_info
get_tournament_info

4. 扫荡

sweep_arena
get_tounament_info
update
collect_contract
get_clan_info
update
collect_contract
get_tournament_info
updat
get_clan_info
collect_contract
get_tournament_info
update
collect_contract
update
collect_contract
get_clan_info
update
collect_contract
get_tournament_info
get_clan_info
update
collect_contract
collect_contract
get_tournament_info
update
collect_contract
get_clan_info
update
collect_contract
…(事件过多)

5. 恭喜你解锁新兵种

update
execute
execute
execute
execute
(一直未点击时不时update)

headers:

update_profile:
请求头
Host:192.168.1.124:10002
User-Agent:Mozilla/5.0
Accept:
Accept-Language
Accept-Encoding:gzip,deflate
Connection:keep-alive
响应头:
Content-Length:356
Content-Type:text/plain


游戏事件注意点

  1. finish_misson事件没法模拟
  2. 游戏战斗结束后才能模拟战斗,否则报错

1. join_tournament兵种不够的话进行派遣,事件报错

相关知识

1.XML和JOSN的区别

  1. 定义介绍
    (1).XML定义
    扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(document type definition)文档类型定义来组织数据;格式统一,跨平台和语言,早已成为业界公认的标准。
    XML是标准通用标记语言 (SGML) 的子集,非常适合 Web 传输。XML 提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。
    (2).JSON定义
    JSON(JavaScript Object Notation)一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。可在不同平台之间进行数据交换。JSON采用兼容性很高的、完全独立于语言文本格式,同时也具备类似于C语言的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)体系的行为。这些特性使JSON成为理想的数据交换语言。
    JSON基于JavaScript Programming Language , Standard ECMA-262 3rd Edition - December 1999 的一个子集。

  2. XML和JSON优缺点
    (1).XML的优缺点
    <1>.XML的优点
      A.格式统一,符合标准;
      B.容易与其他系统进行远程交互,数据共享比较方便。
    <2>.XML的缺点
      A.XML文件庞大,文件格式复杂,传输占带宽;
      B.服务器端和客户端都需要花费大量代码来解析XML,导致服务器端和客户端代码变得异常复杂且不易维护;
      C.客户端不同浏览器之间解析XML的方式不一致,需要重复编写很多代码;
      D.服务器端和客户端解析XML花费较多的资源和时间。
    (2).JSON的优缺点
    <1>.JSON的优点:
      A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小;
      B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
      C.支持多种语言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服务器端语言,便于服务器端的解析;
      D.在PHP世界,已经有PHP-JSON和JSON-PHP出现了,偏于PHP序列化后的程序直接调用,PHP服务器端的对象、数组等能直接生成JSON格式,便于客户端的访问提取;
      E.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护。
    <2>.JSON的缺点
      A.没有XML格式这么推广的深入人心和喜用广泛,没有XML那么通用性;
      B.JSON格式目前在Web Service中推广还属于初级阶段。

2.requests使用

import requests
url = "http://192.168.1.124:10002/command/login"
payload = "\"fb:72.hello\" auth_key=\"eb74cbda703bfaf410148cf18c42d343\">\r\n\t0\r\n"
response = requests.request("POST", url, data=payload,)
print(response.text)

3.pool进程池的使用

#!/usr/bin/env python
# coding=utf-8
from multiprocessing import Pool
from time import sleep
def f(x):
    for i in range(10):
        print '%s --- %s ' % (i, x)
        sleep(1)
def main():
    pool = Pool(processes=3)  # set the processes max number 3
    for i in range(11, 20):
        result = pool.apply_async(f, (i,))
    pool.close()
    pool.join()
    if result.successful():
        print 'successful'
if __name__ == "__main__":
    main()

4.XML文件的解析(提取里面的session、sid等信息)

def getsession(self,body1):
    root = ET.fromstring(body1)
    for node in root.iter():
        if (node.attrib.get('session') != None):
            body1 = node.attrib.get('session')
    return body1

测试结果



服务器性能:

  1. 请求总数越多,最慢一条的处理时间变长
  2. 在只有login事件请求时平均处理一条的时间是最快的
  3. 在1万个总请求数下,服务器能够完全执行请求
  4. 在两台电脑上进行测试时,有一台电脑的请求速度变慢,甚至停止在等待
  5. 服务器处理事件的平均响应时间为0.005~0.006s
  6. 服务器平均每秒事务数为175次

你可能感兴趣的:(实习周记,多进程,python,测试)