当前位置: 首页 > 工具软件 > Django Silk > 使用案例 >

Django性能测试工具Silk

卫英悟
2023-12-01

组内工具主要使用Django框架进行开发,为了得到更好的用户体验,在开发过程中需要注意对性能方面的测试优化。

性能测试优化主要是测量项目的瓶颈指标(执行时间、响应时间、内存占用、函数调用次数等)。这里采用Silk工具进行测量指标,可以快速高效的确认瓶颈。

1Django性能测试工具Silk

功能介绍

Silk的功能主要包括:

  1. 用于拦截请求/响应的中间件
  2. 用于分析数据库查询的SQL执行包装器
  3. 上下文管理器/装饰器可以手动或动态地分析代码和函数块。
  4. 用于上述检查和可视化的用户界面。

安装Silk

安装环境:

  1. Django: 1.11, 2.0
  2. Python: 2.7, 3.4, 3.5, 3.6

安装步骤:

在我们项目的虚拟环境中使用pip安装

pip install django-silk

设置配置文件

MIDDLEWARE = [

    ...

    'silk.middleware.SilkyMiddleware',

    ...

]

 

INSTALLED_APPS = (

    ...

    'silk'

)

 

注意:中间件放置是敏感的,也就是其放置的顺序会影响到中间件是否能进行执行。使用前如果返回 process_request,该中间将不会执行,另外如果有使用django.middleware.gzip.GZipMiddleware ,请将该中间放在silk.middleware.SilkyMiddleware 前面,否则会编码错误。

启用性能数据的用户界面的访问,在urls.py 中添加:

urlpatterns += [url(r'^silk/', include('silk.urls', namespace='silk'))]

由于其性能数据是保存在数据库的,所以需要在项目主目录下运行指令创建对应数据表:

python manage.py migrate//如果无migrate内容,可先python manage.py makemigrations,在运行

还需要将前端样式文件等进行收集:

python manage.py collectstatic //需要配置STATIC_ROOT

Silk用户界面使用

这里拿系统举例,安装完成后启动项目,然后简单的访问一下网站,再打开Silk的用户界面(浏览器打开设置的Silk访问地址)。

概要数据


访问后显示性能测试工具的概要数据统计信息(可通过选择导航下第一行内容中date来选择一个范围时间概要的统计信息)。

概要数据显示内容主要包括:

项目请求次数,剖析代码次数,平均访问时间,平均请求数据库语句数,平均连接数据库时间,以及统计各请求总体的访问时间,使用数据库数据以及语句数。而且还将各接口使用数据库时间,及语句数量从大到小进行比对。

请求列表


请求列表显示了项目使用期间的访问请求,可通过导航栏右侧进行数据筛选及选择每页数据和数据排序规则。可以查看到每个请求的状态码以及请求访问时间及访问数据库时间和语句数量。其中数据为绿色的表示该请求状态良好,红色则表示请求可能会影响到用户体验。

请求详情


在请求列表中点击一个具体请求可进入请求详情。

Details中显示的请求相关数据内容,包括Request Headers,Request Body,Response Headers,Response Body等内容。

SQL中显示了本次请求的访问的所有语句,点击具体语句可查看到语句详情及项目使用位置

如果有对项目对应模块进行代码分析将会显示本次请求的剖析块内容。(下面会说明如何使用代码剖析块)

如果有对项目对应模块进行代码分析将会显示本次请求的剖析块内容。(下面会说明如何使用代码剖析块)

点击具体的剖析块,将会显示剖析块具体代码位置内容,并由图表和列表显示代码剖析的数据,以及该剖析快访问的数据库语句相关内容。
 

Silk配置参数(在settings文件中配置)

启用代码剖析

SILKY_PYTHON_PROFILER = True

启用后可通过两种方式进行代码剖析:

  1. 在配置文件中进行动态设置

SILKY_DYNAMIC_PROFILING = [{

    'module': 'path.to.module',#必填

    'function': 'foo',#必填

    # Line numbers are relative to the function as opposed to the file in which it resides

    'start_line': 1,

    'end_line': 2,

    'name': 'Slow Foo'

}]

 

对某个模块的foo方法中开始行数为1,结束行数为2的区域的代码进行剖析,剖析命名为Slow Foo。
2. 通过装饰器设置

from silk.profiling.profiler import silk_profile

 

 

@silk_profile(name='View Blog Post')

def post(request, post_id):

    p = Post.objects.get(pk=post_id)

    return render_to_response('post.html', {

        'post': p

    })

 

这里说一个坑,在Django Restful框架中,我们自定义的接口需要加装饰器

from rest_framework.decorators import detail_route, list_rout

需要将Slik的装饰器放置在定义路由的装饰器下面,否则请求会返回405。

将剖析内容导出文件:

SILKY_PYTHON_PROFILER_RESULT_PATH = '/path/to/profiles/'

设置Slik访问界面权限

SILKY_AUTHENTICATION = True  # User must login

SILKY_AUTHORISATION = True  # User must have permissions

设置Request/Response bodies
默认情况下,无论多大,Silk都会为每个请求保存请求和响应主体以供将来查看,这会对空间/时间性能产生巨大影响。此行为可以使用以下选项进行配置。

SILKY_MAX_REQUEST_BODY_SIZE = -1  # Silk takes anything <0 as no limit

SILKY_MAX_RESPONSE_BODY_SIZE = 1024  # If response body>1024kb, ignore

对元数据进行剖析

SILKY_META = True

Silk可配置的参数还有很多,可通过访问其进行查看

 

 类似资料: