PFLB

PFLB logo

游戏开发的性能推荐几个网赌网站:过程自动化

手机游戏在投放市场前需要进行性能推荐几个网赌网站, 否则,针对高端设备制作的游戏可能会遭到成千上万用户的抱怨,导致经济和声誉损失. 幸运的是,大多数主要市场参与者都意识到了这一点,并开始逃跑 性能和负载推荐几个网赌网站 在定期的基础上,在开发过程中,在下一个版本发布之前等等.因此,推荐几个网赌网站过程成为一个必要的例行程序.

推荐几个网赌网址很高兴与您分享推荐几个网赌网址在性能推荐几个网赌网站方面的专业知识, 因为推荐几个网赌网址的性能推荐几个网赌网站推荐几个网赌网址在许多不同规模的手机开发者中很受欢迎.

Table of Contents

寻找性能和负载推荐几个网赌网站提供者?

Drop us a line. 很可能,推荐几个网赌网址在之前的300个项目中已经处理过类似您的问题.

游戏公司的性能推荐几个网赌网站挑战

性能推荐几个网赌网站例行程序通常包含一个标准的7步过程:系统分析, 推荐几个网赌网站方法开发, scripts development, 推荐几个网赌网站场景的执行, results analysis, 在出现负面结果时进行调优, and a release. 那些需要人工工程并且最有趣的阶段是脚本开发和调优. 他们值得员工花时间工作. However, 推荐几个网赌网站过程本身和结果分析需要数小时和体力劳动, and they are boring, too. 在本文中,推荐几个网赌网址提出了一种将它们自动化的方法, 这样,推荐几个网赌网站工程师的注意力就会转移到真正需要的地方:调优系统.

另一个问题是,许多游戏开发者必须在同一个推荐几个网赌网站环境中同时推荐几个网赌网站几款不同的游戏, 然后将得到的结果与之前的推荐几个网赌网站结果进行比较. 使用Apache Jmeter推荐几个网赌网站游戏性能是很常见的,通常伴随着 Jenkins 用于持续集成(CI). 但是当每个项目中的推荐几个网赌网站数量增加时, 要分析的文件重达千兆字节, 涉众可能会对无需外部QA帮助就可以使用的推荐几个网赌网站自动化机会更感兴趣.

游戏公司过程自动化的性能推荐几个网赌网站

解决方案:Jmeter负载推荐几个网赌网站中心

Jmeter负载推荐几个网赌网站中心 是一个使用JMeter进行负载推荐几个网赌网站的CI在线web应用程序/仪表盘,由Django构建. LTC (Load Testing Center)使用PostgreSQL存储数据. It also uses pandas 模块分析带有数据的文件. Pandas是一个开源的数据分析和操作工具, 能够分析Jmeter中的csv文件, 即使它们重达千兆字节.

LTC’s main modules are:

1. 仪表板——显示有关最近一次推荐几个网赌网站的一般信息的首页;
2. 分析-建立报告,分析结果,并将结果与他人进行比较;
3. 在线—用于运行推荐几个网赌网站的在线监控;
4. 控制器——配置和运行推荐几个网赌网站;
5. 管理员-配置不同的参数.

要运行推荐几个网赌网站,只需打开Jenkins,选择一个项目并单击Start.

游戏公司的性能推荐几个网赌网站

After that, Jenkins在主推荐几个网赌网址器上启动Jmeter的主实例, 詹金斯和LTC所在的地方, 以及一个或多个远程虚拟机上所需数量的Jmeter推荐几个网赌网址器. 推荐几个网赌网站过程开始了.

During the test, 创建一个包含JMeter结果的CSV文件,并使用项目的$WORKSPACE文件夹中的数据进行更新, 以及另一个包含远程主机监控数据的CSV文件.

然后您可以打开LTC并在线观看您的推荐几个网赌网站运行. At this time, 应用程序将解析上述CSV文件并将它们放入数据库中的临时表中, based on which, Online draws graphs:

某游戏公司在线图形性能推荐几个网赌网站

Otherwise, 你可以等到考试结束, 特殊脚本将在一个工作表中收集所有数据,以便在Analyzer中进行分析并与其他推荐几个网赌网站的结果进行比较. Voila!

游戏公司分析中的性能推荐几个网赌网站

同时推荐几个网赌网站多个游戏项目

只有最后一个问题:如果您同时推荐几个网赌网站几个项目, 它们需要不同的承载能力, i.e., 模拟不同数量的虚拟用户, 如何分配可用的资源, say, 10个虚拟机生成器? 您可以将每个项目分配给特定的生成器, make a schedule, 或者使用Jenkins的阻塞插件. 但还有另一种选择.

如上所述,后端是在Django框架上编写的. 在前端的开发中,使用了所有的标准库:jquery和bootstrap. For graphs, c3.js是一种容易绘制JSON格式接收数据的解决方案.

数据库中的表通常有一对键和一个具有JSONField()数据类型的字段. 之所以使用JSONField,是因为您可以在不更改表结构的情况下轻松地向该表添加新指标.

Thus, 存储响应时间数据的典型模型, 在一次推荐几个网赌网站中,错误和其他事情的数量看起来非常简单:

class TestData(models.Model):

test = models.ForeignKey(Test)

data = JSONField()

class Meta:

db_table = ‘test_data’

在数据字段中,有一些json存储在1分钟内聚合的数据.

游戏公司数据存储中的性能推荐几个网赌网站

要从表中提取数据,url中有一个端点.该函数调用一个函数来处理该数据并返回一个方便阅读的JSON:

Endpoint:

url(r’^test/(?P\d+)/rtot/$, views.test_rtot),

Function:

def test_rtot(request, test_id):

获取推荐几个网赌网站开始时间戳的代码:

min_timestamp = TestData.objects. \

filter(test_id=test_id). \

values(“test_id”).\

总(min_timestamp = Min (

RawSQL(“((data->>%s)::timestamp)”, (‘timestamp’,))))[‘min_timestamp’]

min_timestamp = TestData.objects. \

filter(test_id=test_id). \

values(“test_id”).\

总(min_timestamp = Min (

RawSQL(“((data->>%s)::timestamp)”, (‘timestamp’,))))[‘min_timestamp’]

从数据库中提取数据, 减去上面得到的min_timestamp得到绝对推荐几个网赌网站时间, sort by timestamp, 将其转换为JSON并返回:

d = TestData.objects. \

filter(test_id=test_id). \

注释(时间戳= (RawSQL (“((data->>%s)::timestamp)”, (‘timestamp’,)) – min_timestamp)). \

注释(平均= RawSQL (“((data->>%s)::numeric)”, (‘avg’,))). \

annotate(median=RawSQL(“((data->>%s)::numeric)”, (‘median’,))). \

annotate(rps=(RawSQL(“((data->>%s)::numeric)”, (‘count’,))) / 60). \

values(‘timestamp’, “average”, “median”, “rps”). \

order_by(‘timestamp’)

data = json.loads(

json.dumps(list(d), indent=4, sort_keys=True, default=str))

return JsonResponse(数据、安全=False)

d = TestData.objects. \

filter(test_id=test_id). \

注释(时间戳= (RawSQL (“((data->>%s)::timestamp)”, (‘timestamp’,)) – min_timestamp)). \

注释(平均= RawSQL (“((data->>%s)::numeric)”, (‘avg’,))). \

annotate(median=RawSQL (“((data->>%s)::numeric)”, (‘median’,))). \

annotate(rps=(RawSQL(“((data->>%s)::numeric)”, (‘count’,))) / 60). \

values(‘timestamp’, “average”, “median”, “rps”). \

order_by(‘timestamp’)

data = json.loads(

json.dumps(list(d), indent=4, sort_keys=True, default=str))

return JsonResponse(数据、安全=False)

在前面,是c3.指向这个端点的Js图:

var test_rtot_graph = c3.generate({

data: {

url: ‘/analyzer/test/’ + test_id_1 + ‘/rtot/’,

mimeType: ‘json’,

type: ‘line’,

keys: {

x: ‘timestamp’,

value: [‘average’, ‘median’, ‘rps’],

},

xFormat: ‘%H:%M:%S’,

axes: {

rps: ‘y2’

},

},

zoom: {

enabled: true

},

axis: {

x: {

type: ‘timeseries’,

tick: {

format: ‘%H:%M:%S’

}

},

y: {

padding: {

top: 0,

bottom: 0

},

label: ‘response times (ms)’,

},

y2: {

min: 0,

show: true,

padding: {

top: 0,

bottom: 0

},

label: ‘Requests/s’,

}

},

bindto: ‘#test_rtot_graph’

});

And this is the result:

游戏公司的响应时间性能推荐几个网赌网站

Actually, 整个应用程序由这样的图组成,从后端对应的端点绘制数据.

您可以从源代码中看到分析推荐几个网赌网站的整个系统是如何工作的, 所以接下来推荐几个网赌网址想分享游戏负载推荐几个网赌网站的案例模板,因为这可能是由你自己的QA团队完成的.

不想自己运行推荐几个网赌网站?

没有比PFLB更适合QA解决方案的地方了.
推荐几个网赌网址写信,了解推荐几个网赌网址的团队能为您做些什么.

负载推荐几个网赌网站游戏:案例模板

负载推荐几个网赌网站环境

整个负载推荐几个网赌网站环境应该由一个主推荐几个网赌网址器组成 admin.loadtest, and several generatorN.loadtest servers. admin.loadtest 适用于Debian Linux 9虚拟机的情况, with 16 cores/16 gigs, running Jenkins, LTC和其他可忽略的软件. generatorN.loadtest 推荐几个网赌网址器是安装了Java 8的裸虚拟机Debian Linux 8. 他们的实际权力可能有所不同. On admin.loadtest, Jmeter(带有最基本插件的最新版本)作为预组装的deb发行版安装在/var/lib/apache-jmeter文件夹中.

GIT

每个项目的推荐几个网赌网站计划应该位于GitLab的单独项目中, 每个团队的开发人员或QA可以提出自己的修改建议. 每个项目都应该配置为使用Git. 每个项目包括 ./jmeter_ext_libs/src/, ./test-plan.jmx, and ./prepareAccouts.sh.

  • jmeter_ext_libs是一个文件夹,包含使用Gradle收集的附加插件的源代码,并在每次推荐几个网赌网站前放在/var/lib/apache-jmeter/lib/ext中;
  • test-plan.jmx is a test plan;
  • *.Sh存储用于准备用户帐户的附加脚本等.

Test plan

每个推荐几个网赌网站计划使用一个带有三个变量的步进线程组:thread_count, ramp_up, and duration.

这些变量的值在运行推荐几个网赌网站时来自Jenkins, 但首先它们必须放在用户定义变量中的推荐几个网赌网站计划的主要元素中, 和所有其他参数化变量一样. 推荐几个网赌网址称它为重要的一个 pool, 是将每个运行的Jmeter推荐几个网赌网址器的序列号发送到的那个吗, 为了随后区分所使用的数据池(例如, user logins). In ${__P(THREAD_COUNT,1)}, THREAD_COUNT是将来自Jenkins的变量的名称, 1是默认值, if it does not come.

某游戏公司的性能推荐几个网赌网站变量

Also, 在每个推荐几个网赌网站计划中都有一个SimpleDataWriter,它将采样器的结果存储在CSV文件中. 它激活了以下选项:

<time>truetime>

<latency>truelatency>

<timestamp>truetimestamp>

<success>truesuccess>

<label>truelabel>

<code>truecode>

<fieldNames>truefieldNames>

<bytes>truebytes>

<threadCounts> truethreadCounts>

<time>truetime>

<latency>truelatency>

<timestamp>truetimestamp>

<success>truesuccess>

<label>truelabel>

<code>truecode>

<fieldNames>truefieldNames>

<bytes>truebytes>

<threadCounts> truethreadCounts>

Jenkins

Before running the test, 每个用户都可以设置一些参数,这些参数传递给Jmeter推荐几个网赌网站计划的上述变量:推荐几个网赌网址器名, thread count, duration and ramp up.

Running the test

现在让推荐几个网赌网址继续讨论脚本. 首先,在预构建脚本中准备Jmeter分发版:

  • 创建临时文件夹“/tmp/jmeter-xvgenq/”;
  • 将主分发包从/var/lib/apache-jmeter/;
  • 从jmeter_ext_libs文件夹收集其他插件(如果有的话);
  • copy the collected *.Jar in /tmp/jmeter-xvgenq/;
  • 将Jmeter现成的临时配电包扩展到负载发电机.

#!/bin/bash

export PATH=$PATH:/opt/gradle/gradle-4.2.1/bin

echo “JMeter home: $JMETER_HOME

JMETER_INDEX=$(cat /dev/urandom | tr -dc . ‘a-zA-Z0-9’ |头-n 1)

Generate a random name:

JMETER_DIR=“/tmp/jmeter$JMETER_INDEX

echo “JMeter directory: $JMETER_DIR

echo $JMETER_DIR > “/tmp/jmeter_dir$JOB_NAME

mkdir $JMETER_DIR

cp -rp $JMETER_HOME* $JMETER_DIR

if [ -d $WORKSPACE/jmeter_ext_libs” ]; then

echo “构建额外的JMeter库”

cd $WORKSPACE/jmeter_ext_libs”

gradle jar

cp ./build/libs/* $JMETER_DIR/lib/ext/

ls $JMETER_DIR/lib/ext/

fi

cd $WORKSPACE

回到上面讨论的挑战, 如果您设计了多个虚拟机来生成负载(并且您不知道当前是否正在运行来自其他项目的推荐几个网赌网站), 基于所需的模拟THREAD_COUNT线程总数, 假设您需要运行一定数量的Jmeter推荐几个网赌网址器,足以模拟这些虚拟机上所需的负载.

In our script, 这是在Jenkins bash脚本中使用三行完成的, 这自然会导致LTC脚本中更严重的操作:

python /var/lib/jltc/manage REMOTE_HOSTS_DATA = '.py shell -c “import controller.views as views; print(views.prepare_load_generators(’”$JOB_NAME“‘,'”$WORKSPACE“‘,'”$JMETER_DIR“‘, ‘$THREAD_COUNT‘, ‘$duration));”`

THREADS_PER_HOST = ' python - c ' json,导入系统;数据= dict(’”$REMOTE_HOSTS_DATA”);打印数据(“threads_per_host”)`

REMOTE_HOSTS_STRING = ' python - c ' json,导入系统;数据= dict(’”$REMOTE_HOSTS_DATA”);打印数据(“remote_hosts_string”)`

python /var/lib/jltc/manage REMOTE_HOSTS_DATA = '.py shell -c “import controller.views as views; print (views. prepare_load_generators(’”$JOB_NAME“‘, ‘”$WORKSPACE“‘, ‘”$JMETER_DIR“‘, ‘$THREAD_COUNT‘, ‘$duration));”`

THREADS_PER_HOST = ' python - c ' import json,sys;data=dict (' "$REMOTE_HOSTS_DATA“‘); print data[“threads_per_host”]’`

REMOTE_HOSTS_STRING= ' python -c ' import json,sys;data=dict (' "$REMOTE_HOSTS_DATA“‘); print data[“remote_hosts_string”]’`

Thus, 在第一行中调用prepare_load_generators函数并在其中放入各种数据, namely, the project name, 项目工作区目录的路径, 上面创建的临时Jmeter发行版(/tmp/ Jmeter -xvgenq/)的路径, the duration of the test, and, most importantly, 期望的模拟线程总数$THREAD_COUNT. 接下来发生的事情可以在存储库中看到. To summarize it:

  • 所需Jmeter推荐几个网赌网址器数量的计算基于给定的THREAD_COUNT. Let it be X.
  • 然后,根据生成器上的当前负载和可用内存.loadtest machines, 在每台机器上启动Jmeter推荐几个网赌网址器的数量,直到它们的总数达到X.
  • 接下来,通过rsync将相同的临时Jmeter分布加载到每个选定的生成器n.loadtest machines.
  • On each generator, 启动了多个Jmeter推荐几个网赌网址器(在上一步中获得), 您应该将一个顺序的池号传递给每个正在运行的进程, 用于数据池的分布.
  • 关于运行Jmeter实例的所有数据都存储在数据库中——在推荐几个网赌网站之后, 根据这些数据,他们都会被摧毁.
  • 最后,函数返回一个这样的JSON:

{

“remote_hosts_string”: “generator1.generator2 loadtest: 10000.loadtest:10000, generator2.loadtest:10001”,

“threads_per_host”: 100

}

 {

       “remote_hosts_string”: “generator1.generator2 loadtest: 10000.loadtest:10000, generator2.loadtest:10001”,

       “threads_per_host”: 100

   }

As you can see, at that moment all Jmeter servers are running and waiting to be connected; then, 推荐几个网赌网站本身就要开始了. Thus, 在第二行和第三行中,推荐几个网赌网址从这个JSON中获取值,并将它们传递给Jmeter的主实例. THREAD_COUNT的初始值在远程Jmeter推荐几个网赌网址器和threads_per_host的每个帐户之间分配(注意,对于THREAD_COUNT,推荐几个网赌网址传递上面计算的threads_per_host的值):

java -jar -server $JAVA_ARGS $JMETER_DIR/bin/ApacheJmeter.jar -n -t $WORKSPACE/test-plan.jmx -R $REMOTE_HOSTS_STRING -GTHREAD_COUNT=$threads_per_host -GDURATION=$DURATION -GRAMPUP=$RAMPUP

java -jar -server $JAVA_ARGS $JMETER_DIR/bin/ ApacheJmeter.jar -n -t $WORKSPACE/test-plan.jmx -R $REMOTE_HOSTS_STRING -GTHREAD_COUNT= $threads_per_host -GDURATION=$DURATION -GRAMPUP=$RAMPUP

运行远程Jmeter推荐几个网赌网址器有一种不同的模型. 保存关于正在运行的推荐几个网赌网站、虚拟机、端口、进程id等的数据. 当需要销毁相同的jmeter推荐几个网赌网址器时,需要进一步停止推荐几个网赌网站.

class JmeterInstance(models.Model):

test_running = models.ForeignKey (TestRunning on_delete =模型.CASCADE)

load_generator = models.ForeignKey (LoadGenerator)

pid = models.IntegerField(default=0)

port = models.IntegerField(default=0)

jmeter_dir = models.CharField(max_length=300, default=“”)

project = models.ForeignKey(项目,on_delete =模型.CASCADE)

threads_number = models.IntegerField(default=0)

class Meta:

db_table = ‘jmeter_instance’

class JmeterInstance(models.Model):

test_running = models.ForeignKey (TestRunning, on_delete=models ..CASCADE)

load_generator = models.ForeignKey (LoadGenerator)

pid = models.IntegerField(default=0)

port = models.IntegerField(default=0)

jmeter_dir = models.CharField (max_length=300, default=“”)

project = models.ForeignKey(项目,on_delete =模型.CASCADE)

threads_number = models.IntegerField(default=0)

class Meta:

db_table = ‘jmeter_instance’

Meanwhile, 首页显示了漂亮的视觉效果,总结了一些关于运行推荐几个网赌网站的数据和负载生成器的状态.

游戏公司推荐几个网赌网站运行中的性能推荐几个网赌网站

Stopping the test

After the test, 有必要销毁所有正在运行的Jmeter推荐几个网赌网址器, 删除临时的Jmeter分布并收集结果. 构建后脚本应该如下所示:

JMETER_DIR = $ (cat / tmp / JMETER_DIR$JOB_NAME)

echo 删除Jmeter目录: $JMETER_DIR

rm -rf $JMETER_DIR


python /var/lib/jltc/manage.py shell -c “import controller.views as views; print(views.stop_test_for_project(’”$JOB_NAME“‘))”

JMETER_DIR = $ (cat / tmp / JMETER_DIR$JOB_NAME)

echo 删除Jmeter目录: $JMETER_DIR

rm -rf $JMETER_DIR

python /var/lib/jltc/manage.py shell -c “import controller.views as views; print (views.stop_test_for_project(’”$JOB_NAME“‘))”

从从主推荐几个网赌网址器删除临时分发版开始, 然后调用stop_test_for_project函数, 将项目名称传递给它. 函数将经过数据库中的一个特殊表, 哪个存储了关于运行Jmeter实例的信息, and stop them.

For the final step, 收集您的推荐几个网赌网站结果, 你将不得不使用两种可能的方法之一. 第一个是运行这个脚本:

python /var/lib/jltc/datagenerator_linux.py

Python /var/lib/jltc/ datagenerator_linux . xml.py

否则,你可以本地调用web推荐几个网赌网址:

curl –data “results_dir=$JENKINS_HOME/jobs/$JOB_NAME/builds/$BUILD_NUMBER/”http://localhost:8888/controller/parse_results

curl –data “results_dir=$JENKINS_HOME/jobs/$JOB_NAME/ builds/$BUILD_NUMBER/” http://localhost:8888/controller/parse_results

curl –data “results_dir=$JENKINS_HOME /jobs/$JOB_NAME/builds/ $BUILD_NUMBER/” http://localhost: 8888 /控制器/ parse_results

That’s it!

游戏公司过程自动化的性能推荐几个网赌网站2

The results

Of course, 使用这个游戏性能推荐几个网赌网站用例模板所得到的结果并不是通用的. 您还可以使用InfluxDB来存储指标,并使用Grafana仪表板来可视化它们. 而是分析不同推荐几个网赌网站的结果或比较不同项目的推荐几个网赌网站结果, 你要么用InfluxDB和Grafana自动化你的报告, 你也可以读到 here), or use this solution. 如果您的团队在这些场景中需要帮助, please, 让推荐几个网赌网址知道:推荐几个网赌网址有400多名认证推荐几个网赌网站人员,在世界各地处理了超过300个性能或负载推荐几个网赌网站项目. 为了让一支熟练的推荐几个网赌网站团队为你的项目工作, contact us!

Have a project in mind?

自2008年以来,推荐几个网赌网址一直致力于性能推荐几个网赌网站项目.

推荐几个网赌网址写信,了解推荐几个网赌网址的团队能为您做些什么.

vertical divider
Clutch badge orig
2019年欧洲推荐几个网赌网站奖徽章
Techreviewer 2022徽章来源
CTA performance testing