阅读692 返回首页    go 阿里云 go 技术社区[云栖]


手工脚本__脚本编写_使用手册_性能测试-阿里云

返回企业版测试脚本

手工脚本

对于非HTTP/HTTPS协议的业务(如: TCP协议等)或者某些内容不能录制(如:加密算法,非浏览器访问的应用等),需要进行手工编写代码开发脚本。

手工脚本语言为Jython,目前支持的Jython版本为2.5.3。 Jython是Python的Java语言实现,它使用Python的语法和类库,运行在JVM中,和同一个JVM中的Java类可以实现无缝互操作,因此使用Jython作为脚本语言可以最大程度的利用Python的简洁、高效,同时保留对Java语言的全面兼容。

  • Jython语法
    Jython程序由一系列语句组成,语句组成了代码块,代码块组成了方法、函数,然后再通过类把数据、方法和函数封装起来。和其它高级语言一样,Jython的语句也是由一些最基本的词(token)组成。Token可以是标识符(identifiers)、关键字(keywords)、字面值(literals)、操作符(operators)和分割符(delimiters),这些token通过Jython的语言执行器进行词法分析产生,而词法分析器通过字符方式读入Jython脚本文件。
  • 脚本框架
    性能测试的性能测试脚本是一个TestRunner类,这个类会被每一个并发线程初始化。测试进程首先加载脚本并执行脚本中顶格的语句,同时定义TestRunner这个测试类。然后每个线程会实例化一个TestRunner类,调用类中的init方法一次,继而循环调用TestRunner类的call方法。最后线程结束时会调用类中的del方法。initdel方法都是可选的,只有call方法是必需的。
#第一部分:执行器声明和脚本编码声明
#! /usr/bin/env python  
# -*- coding: utf-8 -*-
#第二部分:Jython类库、Java类库和自定义类的导入
# PTS Script Version 1.0
# PTS脚本SDK:框架API、常用HTTP请求/响应处理API
from util import PTS
from HTTPClient import NVPair
from HTTPClient import Cookie
from HTTPClient import HTTPRequest
from HTTPClient import CookieModule

#第三部分:测试进程级别的脚本语句和初始化
# 脚本初始化段,可以设置压测引擎的常用HTTP属性
#PTS.HttpUtilities.setKeepAlive(False)
#PTS.HttpUtilities.setUrlEncoding('GBK')
#PTS.HttpUtilities.setFollowRedirects(False)
#PTS.HttpUtilities.setUseCookieModule(False)
PTS.HttpUtilities.setUseContentEncoding(True)
PTS.HttpUtilities.setUseTransferEncoding(True)

#第四部分:TestRunner测试类
# 脚本执行单元类,每个VU/压测线程会创建一个TestRunner实例对象
class TestRunner:
    # TestRunner对象的初始化方法,每个线程在创建TestRunner后执行一次该方法
    def __init__(self):
        self.threadContext = PTS.Context.getThreadContext()
        self.init1()
        self.init_cookies = CookieModule.listAllCookies(self.threadContext)
    # 主体压测方法,每个线程在测试生命周期内会循环调用该方法
    def __call__(self):
        PTS.Data.delayReports = 1
        for c in self.init_cookies:
            CookieModule.addCookie(c, self.threadContext)
        statusCode = self.action1()
        PTS.Framework.setExtraData(statusCode)        
        statusCode = self.action2()
        PTS.Framework.setExtraData(statusCode)                
        PTS.Data.report()
        PTS.Data.delayReports = 0
    # TestRunner销毁方法,每个线程循环执行完成后执行一次该方法
    def __del__(self):
        for c in self.init_cookies:
            CookieModule.addCookie(c, self.threadContext)
        self.end1()
    # 定义请求函数
    def init1(self):
        ……
     def action2(self):
         ……
def action2(self):
         ……

#第五部分:instrumentMethod语句
# 编织压测事务
PTS.Framework.instrumentMethod(u'action1', 'action1', TestRunner)
PTS.Framework.instrumentMethod(u'action2', 'action2', TestRunner)

返回企业版测试脚本

最后更新:2016-05-06 10:44:36

  上一篇:go 录制工具__脚本编写_使用手册_性能测试-阿里云
  下一篇:go 脚本调试__脚本编写_使用手册_性能测试-阿里云